Si vous souhaitez copier des informations dans un autre tampon, puis laisser les tampons évoluer indépendamment, vous pouvez le faire .
Mais si vous voulez que l'autre tampon reflète le contenu original en temps réel, alors Emacs fournit cela avec des tampons indirects . Un tampon indirect est un autre tampon qui a le même contenu que l'original (les modifications dans un tampon sont reflétées dans l'autre tampon), mais des paramètres différents: un mode majeur différent, différents modes mineurs, différentes variables locales, un point différent, des marques différentes , un rétrécissement différent, etc.
Vous pouvez donc obtenir une vue d'une partie d'un tampon dans un autre mode principal, tout en gardant une trace des modifications dans le tampon d'origine et en reflétant les modifications dans le tampon d'origine. Créez d'abord un tampon indirect avec M-x clone-indirect buffer
; il y a aussi clone-indirect-buffer-other-window
qui est lié à C-x 4 c
( C-x 4
préfixe de la fenêtre et c
pour le clone ). Dans le tampon cloné, restreignez à la région souhaitée: sélectionnez la partie intéressante et exécutez C-x n n
( narrow-to-region
). Modifiez le mode principal comme vous le souhaitez.
Vous pouvez automatiser cela avec une commande comme celle-ci pour une utilisation interactive:
(defun edit-region-in-foo-mode (beg end)
(interactive "@r")
(let ((new-buffer (clone-indirect-buffer nil t)))
(narrow-to-region beg end)
(foo-mode)))
Pour la programmation, utilisez:
(defmacro with-indirect-buffer-in-foo-mode (beg end &rest body)
`(with-current-buffer (clone-indirect-buffer nil nil)
(narrow-to-region beg end)
(foo-mode)
(unwind-protect
,body
(kill-buffer (current-buffer)))))