Chcę tylko sprawdzić, czy bieżąca linia jest pusta, czy nie (jeśli zawiera tylko białe znaki, nadal uważam ją za pustą).
Oto moja początkowa wersja:
(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)))
Jak najłatwiej sprawdzić, czy bieżąca linia jest pusta?
whitespace
ChillarAnand
źródło
źródło
\s
jest równoznaczne z pisaniems
. Być może miałeś na myśli"^\\s*$"
.\\s-
zamiast\\s
. Ten łącznik jest wymagany w wyrażeniu regularnym elisp.Odpowiedzi:
Czy coś takiego byłoby „łatwiejsze”?
źródło
Prosta metoda, blisko tego, co masz:
źródło
match-data
.\\s-
zamiast\s
. Wypróbowałeś to rozwiązanie?źródło
Sugeruję:
(Zauważ, że
progn
s są w rzeczywistości niepotrzebne, ponieważ funkcje pomijania nigdy nie zwracają wartości zero). Tak jak Dan w swojej odpowiedzi,skip-syntax-*
można go również użyć.źródło
skip-syntax-*
to odpowiedni zestaw funkcji do użycia tutaj.Oto inne proste rozwiązanie, wzięte z
comment-dwim-2
pakietuźródło
To jest modyfikacja odpowiedzi na PythonNut, która nie działała dla mnie (dlaczego?):
string-match-p
zwracał indeks następnego wiersza, ilekroć bieżący wiersz nie był pusty. Sprawdziłem więc, czy zwracana wartość to 0.źródło
(thing-at-point 'line)
zawiera nową linię na końcu linii. Jeśli bieżący wiersz nie jest pusty, wyrażenie regularne pasuje do tej nowej linii. Jedyny czas, którystring-match-p
zwraca tutaj zero, znajduje się w ostatnim wierszu bufora (i Dario, twoja wersja nie działa w ostatnim wierszu, jeśli bufor nie kończy się na nowej linii).current-indentation
daje kolumnę z następującymi odstępami, które można porównać z kolumną na końcu wiersza:źródło