Так 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.