Récupère le contenu d'un tampon

15

Obtient donc buffer-stringle contenu du tampon actuel. Mais cela ne permet pas de spécifier d'autres tampons.

Comment contourner cela? Ai-je besoin de quelque chose comme ça save-window-excursionpour que ça marche?

Maciej Goszczycki
la source
Si cela ne vous dérange pas que je demande, qu'essayez-vous de faire?
Luke Shimkus
@King Je crée un processus asynchrone et je veux envoyer le contenu du tampon comme entrée standard. J'ai pensé que je pouvais utiliser process-send-stringet je suis resté coincé.
Maciej Goszczycki

Réponses:

25

Beaucoup de choses dans Emacs fonctionnent sur le tampon actuel. Vous devez modifier le tampon actuel et le restaurer lorsque vous avez terminé. À utiliser with-current-bufferpour les cas simples où il vous suffit de faire quelque chose dans un autre tampon et save-current-bufferpour les cas plus complexes où vous devez naviguer entre plusieurs tampons.

(defun buffer-string* (buffer)
  (with-current-buffer buffer
    (buffer-string)))

Si vous souhaitez que le contenu texte du tampon sans propriétés, appelez buffer-substring-no-properties.

buffer-stringrenvoie uniquement la partie rétrécie du tampon. Si vous avez besoin de tout le contenu, élargissez-le après avoir enregistré le rétrécissement.

(defun buffer-whole-string (buffer)
  (with-current-buffer buffer
    (save-restriction
      (widen)
      (buffer-substring-no-properties (point-min) (point-max)))))

Si vous devez également enregistrer le point, appelez save-excursionégalement. Notez que ne save-excursionrestaure le point que dans le tampon actuel, donc si vous devez basculer vers un autre tampon et vous y déplacer, appelez à l' save-excursionintérieur save-current-bufferou with-current-buffer.

Gilles 'SO- arrête d'être méchant'
la source