Então, buffer-stringobtém o conteúdo do buffer atual. Mas não permite especificar outros buffers.
Como posso contornar isso? Preciso de algo save-window-excursionpara fazê-lo funcionar?
process-send-stringe fiquei preso.
Então, buffer-stringobtém o conteúdo do buffer atual. Mas não permite especificar outros buffers.
Como posso contornar isso? Preciso de algo save-window-excursionpara fazê-lo funcionar?
process-send-stringe fiquei preso.
Respostas:
Muitas coisas no Emacs operam no buffer atual. Você precisa alterar o buffer atual e restaurá-lo quando terminar. Use with-current-bufferpara casos simples em que você só precisa fazer algo em outro buffer e save-current-bufferpara casos mais complexos em que você precisa navegar entre vários buffers.
(defun buffer-string* (buffer)
(with-current-buffer buffer
(buffer-string)))
Se você deseja que o conteúdo do texto do buffer sem propriedades, chame buffer-substring-no-properties.
buffer-stringretorna apenas a parte reduzida do buffer. Se você precisar de todo o conteúdo, amplie-o após salvar o estreitamento.
(defun buffer-whole-string (buffer)
(with-current-buffer buffer
(save-restriction
(widen)
(buffer-substring-no-properties (point-min) (point-max)))))
Se você também precisar salvar o ponto, ligue save-excursiontambém. Observe que save-excursionrestaura o ponto apenas no buffer atual; portanto, se você precisar alternar para outro buffer e se mover por aí, ligue para save-excursiondentro save-current-bufferou with-current-buffer.