Uzyskaj zawartość bufora

15

W ten sposób buffer-stringpobiera zawartość bieżącego bufora. Ale nie pozwala na określenie innych buforów.

Jak mogę to obejść? Czy potrzebuję czegoś takiego, save-window-excursionaby działało?

Maciej Goszczycki
źródło
Jeśli nie masz nic przeciwko, żebym zapytał, co próbujesz zrobić?
Luke Shimkus
@King Tworzę proces asynchroniczny i chcę wysłać zawartość bufora jako standardowe wejście. Pomyślałem, że mogę użyć process-send-stringi utknąłem.
Maciej Goszczycki

Odpowiedzi:

25

Wiele rzeczy w Emacsie działa na bieżącym buforze. Musisz zmienić bieżący bufor i przywrócić go, gdy skończysz. Służy with-current-bufferdo prostych przypadków, w których wystarczy zrobić coś w innym buforze, oraz save-current-bufferdo bardziej skomplikowanych przypadków, w których trzeba nawigować między kilkoma buforami.

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

Jeśli chcesz zawartość tekstową bufora bez właściwości, zadzwoń buffer-substring-no-properties.

buffer-stringzwraca tylko zwężoną część bufora. Jeśli potrzebujesz całej zawartości, poszerz ją po zapisaniu zwężenia.

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

Jeśli musisz również zapisać punkt, zadzwoń save-excursionrównież. Pamiętaj, że save-excursionprzywraca punkt tylko w bieżącym buforze, więc jeśli chcesz przełączyć się na inny bufor i się tam poruszać, zadzwoń do save-excursionśrodka save-current-bufferlub with-current-buffer.

Gilles „SO- przestań być zły”
źródło