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)))))
Gilles 'SO- arrête d'être méchant'
la source
M-x copy-to-buffer
proposais en fait , puis j'ai rouge la réponse @legoscia, qui est probablement ce que vous voulez. si le processus d'extraction et le mode principal sont les mêmes, une fonction sera meilleureJ'ai aimé ce que @Gilles a écrit. J'ai modifié ce que @Gilles a écrit pour demander à l'utilisateur quel mode il aimerait utiliser. Vous pouvez modifier ce que j'ai écrit pour fournir les modes que vous préférez ou même modifier l'appel pour terminer la lecture afin qu'il vous permette de fournir un mode non fourni dans la liste par défaut.
la source
Pour un cas d'utilisation similaire, j'avais écrit une fonction elisp
modi/switch-to-scratch-and-back
qui vous permet de basculer rapidement entre un tampon FILE et un tampon * scratch * ayant le même mode principal que le tampon FILE. La fonction hyperliée ci-dessus vous mènera à une question emacs SE existante.Voici comment vous pouvez utiliser cette fonction:
Voici un exemple de fonction wrapper
copy-current-buffer-to-scratch
à une clé si vous le souhaitez et son exécution vous donnera un tampon * scratch * avec le contenu de votre tampon de travail.C'est juste une autre façon de faire ce que vous voulez; vous voudrez peut-être utiliser des tampons indirects dont parle la solution de @Gilles. Cette approche est utile si vous devez effectuer des modifications importantes dans un tampon temporaire sans risquer des sauvegardes accidentelles dans le tampon d'origine jusqu'à ce que vous ayez atteint une solution stable.
Un exemple d'utilisation consiste à essayer des fonctions expérimentales elisp avant de les enregistrer dans votre init emacs.
la source