Quindi buffer-stringottiene il contenuto del buffer corrente. Ma non consente di specificare altri buffer.
Come posso aggirarlo? Ho bisogno di qualcosa di simile save-window-excursionper farlo funzionare?
process-send-stringe mi sono bloccato.
Quindi buffer-stringottiene il contenuto del buffer corrente. Ma non consente di specificare altri buffer.
Come posso aggirarlo? Ho bisogno di qualcosa di simile save-window-excursionper farlo funzionare?
process-send-stringe mi sono bloccato.
Risposte:
Molte cose in Emacs operano sul buffer corrente. È necessario modificare il buffer corrente e ripristinarlo al termine. Utilizzare with-current-bufferper casi semplici in cui è sufficiente eseguire operazioni in un altro buffer e save-current-bufferper casi più complessi in cui è necessario spostarsi tra più buffer.
(defun buffer-string* (buffer)
(with-current-buffer buffer
(buffer-string)))
Se si desidera il contenuto testuale del buffer senza proprietà, chiamare buffer-substring-no-properties.
buffer-stringrestituisce solo la parte ristretta del buffer. Se hai bisogno di tutto il contenuto, allargalo dopo aver salvato il restringimento.
(defun buffer-whole-string (buffer)
(with-current-buffer buffer
(save-restriction
(widen)
(buffer-substring-no-properties (point-min) (point-max)))))
Se è necessario salvare anche il punto, chiamare save-excursionanche. Si noti che save-excursionripristina il punto solo nel buffer corrente, quindi se è necessario passare a un altro buffer e spostarsi lì, chiamare save-excursionall'interno save-current-buffero with-current-buffer.