Wie der Stern sagt, gibt (buffer-substring (mark) (point))
den Inhalt der Region zurück, wenn die Markierung gesetzt ist. Wenn Sie die string properties nicht möchten, können Sie die 'buffer-substring-no-properties
Variante verwenden.
Wenn Sie jedoch einen interaktiven Befehl schreiben, gibt es eine bessere Möglichkeit, die Endpunkte der Region zu erhalten, indem Sie das Formular (interactive "r")
verwenden. Hier ist ein Beispiel von simple.el
:
(defun count-lines-region (start end)
"Print number of lines and characters in the region."
(interactive "r")
(message "Region has %d lines, %d characters"
(count-lines start end) (- end start)))
Wenn von Lisp-Code genannt, die (interactive ...)
Form ignoriert wird, so dass Sie diese Funktion verwenden, können die Linien in jeden Teil des Puffers zu zählen, nicht nur die Region, durch Übergeben Sie die entsprechenden Argumente: z. B. (count-lines-region (point-min) (point-max))
, um die Zeilen im eingeengten Teil des Puffers zu zählen. Aber wenn es interaktiv aufgerufen wird, wird das (interactive ...)
Formular ausgewertet, und der Code "r"
liefert den Punkt und die Markierung als zwei numerische Argumente, kleinste zuerst.
Siehe das Emacs Lisp Handbuch, Abschnitte 21.2.1 Using Interactive und 21.2.2 Code Characters for interactive.
Das ist wunderbar, danke. Das hätte ich bestimmt nicht selbst gefunden. – Singletoned