Отримайте вміст буфера


15

Так buffer-stringотримується вміст поточного буфера. Але це не дозволяє вказувати інші буфери.

Як я можу обійти це? Чи потрібно мені щось на зразок, save-window-excursionщоб воно працювало?


Якщо ви не проти мені запитати, що ви намагаєтеся зробити?
Люк Шимкус

@King Я створюю асинхронний процес і хочу надіслати вміст буфера так, як це стандартне введення. Я зрозумів, що можу використовувати, process-send-stringі я застряг.
Maciej Goszczycki

Відповіді:


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.