Je veux juste vérifier si la ligne actuelle est vide ou non (si elle ne contient que des espaces, alors je la considère toujours vide).
Voici ma version initiale:
(defun strip-text-properties(txt)
(set-text-properties 0 (length txt) nil txt)
txt)
(defun is-current-line-empty ()
(interactive)
(setq c-line (thing-at-point 'line))
(string-match "^\s*$" (strip-text-properties c-line)))
Quelle est la façon la plus simple de vérifier si la ligne actuelle est vide?
whitespace
ChillarAnand
la source
la source
\s
équivaut à l'écritures
. Peut-être que vous vouliez dire"^\\s*$"
.\\s-
au lieu de\\s
. Ce trait d'union est requis dans elisp regexp.Réponses:
Est-ce que quelque chose comme ça serait "plus facile"?
la source
Une méthode simple, proche de ce que vous avez:
la source
match-data
.\\s-
au lieu de\s
. Avez-vous essayé cette solution?la source
Je suggère:
(Notez que les
progn
s sont en fait inutiles car les fonctions de saut ne renvoient jamais nul). Comme Dan le fait dans sa réponse,skip-syntax-*
pourrait également être utilisé à la place.la source
skip-syntax-*
est le bon ensemble de fonctions à utiliser ici.Voici une autre solution simple, tirée de l'
comment-dwim-2
emballagela source
Ceci est une modification de ce que PythonNut a répondu qui n'a pas fonctionné pour moi (pourquoi?):
string-match-p
a renvoyé l'index de la ligne suivante chaque fois que la ligne actuelle n'était pas vide. J'ai donc vérifié que la valeur de retour est 0.la source
(thing-at-point 'line)
inclut la nouvelle ligne à la fin de la ligne. Si la ligne actuelle n'est pas vide, l'expression rationnelle correspond à cette nouvelle ligne. Le seul temps destring-match-p
retour nul ici est sur la dernière ligne du tampon (et Dario, votre version ne fonctionne pas sur la dernière ligne si le tampon ne se termine pas par une nouvelle ligne).current-indentation
vous donne la colonne suivant les blancs en tête, qui peuvent être comparés à la colonne à la fin de la ligne:la source