W ten sposób buffer-string
pobiera zawartość bieżącego bufora. Ale nie pozwala na określenie innych buforów.
Jak mogę to obejść? Czy potrzebuję czegoś takiego, save-window-excursion
aby działało?
process-send-string
i utknąłem.
W ten sposób buffer-string
pobiera zawartość bieżącego bufora. Ale nie pozwala na określenie innych buforów.
Jak mogę to obejść? Czy potrzebuję czegoś takiego, save-window-excursion
aby działało?
process-send-string
i utknąłem.
Odpowiedzi:
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-buffer
do prostych przypadków, w których wystarczy zrobić coś w innym buforze, oraz save-current-buffer
do 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-string
zwraca 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-excursion
również. Pamiętaj, że save-excursion
przywraca 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-buffer
lub with-current-buffer
.