Так buffer-string
получает содержимое текущего буфера. Но это не позволяет указывать другие буферы.
Как я могу обойти это? Нужно ли что-то вроде, save-window-excursion
чтобы это работало?
process-send-string
и я застрял.
Так buffer-string
получает содержимое текущего буфера. Но это не позволяет указывать другие буферы.
Как я могу обойти это? Нужно ли что-то вроде, save-window-excursion
чтобы это работало?
process-send-string
и я застрял.
Ответы:
Многое в Emacs работает с текущим буфером. Вам нужно изменить текущий буфер и восстановить его, когда вы закончите. Используйте with-current-buffer
для простых случаев, когда вам просто нужно что-то сделать в другом буфере, и save-current-buffer
для более сложных случаев, когда вам нужно перемещаться между несколькими буферами.
(defun buffer-string* (buffer)
(with-current-buffer buffer
(buffer-string)))
Если вы хотите текстовое содержимое буфера без свойств, позвоните buffer-substring-no-properties
.
buffer-string
возвращает только суженную часть буфера. Если вам нужен весь контент, расширьте его после сохранения сужения.
(defun buffer-whole-string (buffer)
(with-current-buffer buffer
(save-restriction
(widen)
(buffer-substring-no-properties (point-min) (point-max)))))
Если вам также нужно сохранить точку, позвоните save-excursion
также. Обратите внимание, что save-excursion
восстанавливает точку только в текущем буфере, поэтому, если вам нужно переключиться на другой буфер и переместиться туда, позвоните save-excursion
внутрь save-current-buffer
или with-current-buffer
.