Получить содержимое буфера

15

Так buffer-stringполучает содержимое текущего буфера. Но это не позволяет указывать другие буферы.

Как я могу обойти это? Нужно ли что-то вроде, save-window-excursionчтобы это работало?

Мацей Гошицкий
источник
Если вы не возражаете, я спрашиваю, что вы пытаетесь сделать?
Люк Шимкус
@King Я создаю асинхронный процесс и хочу отправить содержимое буфера в качестве стандартного ввода. Я подумал, что могу использовать, process-send-stringи я застрял.
Мацей Гожчицкий,

Ответы:

25

Многое в 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.

Жиль "ТАК - перестань быть злым"
источник