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