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