2009-03-03 4 views

Antwort

49

buffer-substring zusammen mit region-beginning und region-end kann das tun.

+0

Das ist wunderbar, danke. Das hätte ich bestimmt nicht selbst gefunden. – Singletoned

59

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.

4

Wenn Sie Regionsinhalt in einem Lisp-Code in eine benutzerzugängliche Datenstruktur wie Kill-Ring, X-Zwischenablage oder Register kopieren möchten, empfiehlt Emacs Lisp-Handbuch filter-buffer-substring anstelle von einfach buffer-substring zu verwenden. Vor dem Kopieren wendet die Funktion Filterfunktionen aus einer Listenvariablen namens filter-buffer-substring-functions an. Die Funktion war added in version 22.3.

Verwandte Themen