Quels sont les avantages de l'utilisation de tampons indirects ? Dans quelles circonstances sont-ils utiles?
Quels sont les avantages de l'utilisation de tampons indirects ? Dans quelles circonstances sont-ils utiles?
Réponses:
Pour voir et modifier plusieurs emplacements du même tampon. Ainsi, vous n'avez pas à faire défiler un long tampon, mais simplement basculer la fenêtre vers la région visible. Chaque tampon cloné a également un anneau de marque différent, un rétrécissement et d'autres propriétés de tampon. Si vous n'utilisez pas de tampon indirect mais créez une autre fenêtre du même tampon, tout est partagé et vous ne pouvez pas effectuer d'autres fonctionnalités avancées au-delà de l'affichage et de la modification de différents emplacements. Par exemple, avec un tampon indirect, vous pouvez plier tout le bloc de code, créer efficacement une "arborescence de balises" sans affecter le tampon d'origine. À l'aide d'une fenêtre, les deux tampons des deux fenêtres sont repliés car les deux tampons sont identiques.
En résumé, le tampon indirect est un tampon complètement différent qui partage le même texte et fichier dans votre tampon d'origine, donc lorsque vous enregistrez un tampon cloné, il enregistre également votre fichier d'origine.
Un cas d'utilisation utilise un mode majeur différent sur une partie d'un fichier.
Par exemple, je travaillais à un moment avec des documents xml avec du code à l'intérieur de certains éléments. Je voulais pouvoir modifier l'intégralité du document comme s'il s'agissait de XML, mais avoir toujours toutes les principales fonctionnalités de mode pour le langage de programmation intégrées dans certains éléments, j'ai donc réduit le corps de ces éléments dans un tampon indirect qui exécutait le mode majeur approprié.
Voici une fonction de ma configuration que j'utilise pour ce faire:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Remarque: ce n'est pas parfait, des choses comme le verrouillage de police nécessitent un travail supplémentaire spécial pour une utilisation dans ce scénario.
Les tampons indirects vous offrent plusieurs vues du même tampon, en particulier, plusieurs rétrécissements, chacun agissant, à bien des égards, comme un tampon séparé.
Comme le dit le Commentaire de la bibliothèque narrow-indirect.el
:
Vous pouvez utiliser des tampons indirects pour plus que vous ne le pensez. Vous pouvez utiliser des clones extraits de portions de tampons Dired, par exemple, pour vous donner des vues utiles (actives) dans une liste de répertoires. Il n'y a que quelques touches / commandes (telles que la
g
mise à jour de la liste) qui ne fonctionnent pas, car elles dépendent d'une vue de l'ensemble du tampon Dired. Expérimentez, et vous trouverez sans aucun doute de nouvelles utilisations intéressantes pour les tampons indirects.