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


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.