Liefert den Inhalt eines Puffers

15

So buffer-stringbekommt man den Inhalt des aktuellen Puffers. Es ist jedoch nicht möglich, andere Puffer anzugeben.

Wie kann ich das umgehen? Benötige ich etwas save-window-excursion, damit es funktioniert?

Maciej Goszczycki
quelle
Wenn es dir nichts ausmacht, wenn ich frage, was versuchst du dann zu tun?
Luke
@King Ich erstelle einen asynchronen Prozess und möchte den Inhalt des Puffers als Standardeingabe senden. Ich dachte, ich kann es gebrauchen process-send-stringund bin stecken geblieben.
Maciej Goszczycki

Antworten:

25

Viele Dinge in Emacs arbeiten mit dem aktuellen Puffer. Sie müssen den aktuellen Puffer ändern und wiederherstellen, wenn Sie fertig sind. Verwenden with-current-bufferSie diese Option für einfache Fälle, in denen Sie nur etwas in einem anderen Puffer tun müssen, und save-current-bufferfür komplexere Fälle, in denen Sie zwischen mehreren Puffern navigieren müssen.

(defun buffer-string* (buffer)
  (with-current-buffer buffer
    (buffer-string)))

Wenn Sie den Textinhalt des Puffers ohne Eigenschaften erhalten möchten, rufen Sie auf buffer-substring-no-properties.

buffer-stringgibt nur den verengten Teil des Puffers zurück. Wenn Sie den gesamten Inhalt benötigen, erweitern Sie ihn nach dem Speichern der Verengung.

(defun buffer-whole-string (buffer)
  (with-current-buffer buffer
    (save-restriction
      (widen)
      (buffer-substring-no-properties (point-min) (point-max)))))

Wenn Sie den Punkt auch speichern müssen, rufen Sie ebenfalls an save-excursion. Beachten Sie, dass save-excursionder Punkt nur im aktuellen Puffer wiederhergestellt wird. Wenn Sie also in einen anderen Puffer wechseln und sich dort bewegen müssen, rufen Sie aufsave-excursion in save-current-bufferoder auf with-current-buffer.

Gilles 'SO - hör auf böse zu sein'
quelle