Q: comment puis-je obtenir de nouveaux tampons pour honorer le mappage auto-mode-alist
?
Lors de la recherche d'un fichier , Emacs compare l'extension du fichier à auto-mode-alist
pour déterminer le mode principal à utiliser pour le tampon du fichier. Existe-t-il un moyen d'utiliser les informations dans auto-mode-alist
pour déterminer le mode d'un tampon auquel aucun fichier n'est (encore) associé?
C'est-à-dire: si j'ouvre un nouveau tampon dont le nom a quelque chose qui ressemble à une extension de fichier, puis-je le faire s'ouvrir automatiquement dans le mode attendu? Par exemple, si je devais ouvrir un nouveau tampon a-new-buffer.el
qui n'est pas encore associé à un fichier, je veux qu'il s'ouvre emacs-lisp-mode
plutôt que dans le mode par défaut.
auto-mode-alist
, vous faites en sorte que le tampon " visite " le fichier (et cela s'occupe de tout).org
tampon temporaire pour tester les nouvelles fonctions que j'écris pour utilisationorg-mode
; b) unR
tampon temporaire pour effectuer des manipulations statistiques rapides et jetables; c) un tampon de texte temporaire pour composer un e-mail. Dans tous les cas, je ne pas veux créer un fichier à la visite, je veux juste un tampon jetable qui ouvre néanmoins dans le mode approprié.C-x C-f
ne pas « créer un fichier à la visite ». C'est un malentendu fondamental. Ils font simplement exactement ce que vous cherchez. Ce n'est que si et lorsque vous essayez d' enregistrer le tampon qu'un fichier est créé. Si vous n'essayez pas d'enregistrer le tampon, aucun fichier n'est créé. Ce que vous voulez, d'après ce que je comprends jusqu'à présent, est de "visiter un fichier" (ce qui signifie vraiment ouvrir un tampon dans le mode approprié).Réponses:
Commandes de visite de fichiers telles que
C-x C-f
ne pas créer de fichier à visiter. Ils font ce que vous cherchez.Ce n'est que si et lorsque vous essayez d' enregistrer le tampon qu'un fichier est créé .
Si vous n'essayez pas d'enregistrer le tampon, aucun fichier n'est créé. Ce que vous voulez, d'après ce que je comprends jusqu'à présent, est de " visiter un fichier " (ce qui signifie vraiment ouvrir un tampon dans le mode approprié).
la source
n
pour ne pas sauvegarder, soit (souvent) je sauvegarde simplement le tampon. Et plus tard, je lance le fichier créé ... ou pas.)*scratch*
: vous êtes invité à enregistrer lorsque ce doigt frappe automatiquementC-x C-s
.Si vous utilisez la solution de Juri Linkov depuis des années.
Je crée des tampons temporaires avec quelque chose comme
C-x
b
test.org
C-j
. Lemajor-mode
est déterminé par l'extension de fichier viaauto-mode-alist
.Pour tester l'effet, vous pouvez essayer
(prog1 (and (switch-to-buffer "my-new.org") major-mode) (kill-buffer "my-new.org"))
=>
org-mode
. Dans un nettoyage,emacs -q
le test reviendraitfundamental-mode
.la source
advice
option que j'utilisais. Je ne suis pas sûr de savoir à quoi(prog1...)
sert la pièce, mais la(setq-default major-mode ...)
pièce est plutôt sympa.prog1
-test montre simplement que vous obtenez ce que vous attendezmajor-mode
lorsque vous passez à un tampon. Évaluez lasetq-default
pièce et exécutez le test. Il reviendraorg-mode
Sans lesetq-default
il reviendraitfundamental-mode
.J'ai trouvé une manière basée sur des conseils en utilisant des idées qui provenaient des commentaires de @ Drew et de la réponse de @ glucas que j'enregistrerai ici au cas où elles seraient utiles à n'importe qui.
La version courte: utilisez des
after
conseils pour demander si le tampon a un nom de fichier associé, définissez-en un temporairement si ce n'est pas le cas, puis laissez le reste de laset-auto-mode
machine s'occuper des détails. Après un peu de test (pas extensif), cela semble très bien fonctionner.Pour
ido-switch-buffer
et vanilleswitch-to-buffer
, les deux conseils seraient:Je trouve cette option utile en plus du
find-file
point soulevé par @Drew parce que mes doigts peuvent devancer mon cerveau: la mémoire musculaire m'amènera souvent dans un territoire de basculement vers le tampon avant qu'elle ne me vienne à l'esprit quifind-file
ferait ce dont j'ai besoin. Maintenant, les deux options sont disponibles.MISE À JOUR: petit bug potentiellement irritant dans le code ci-dessus: il réexécutera le hook de mode sur le tampon à chaque fois que vous y basculerez. Ce qui suit lui donne un nom de fichier réel hors du
/tmp
répertoire et évite ce problème:la source
La
set-auto-mode
fonction définit le mode en fonction du fichier associé à un tampon. Voici une fonction qui définit temporairement àbuffer-file-name
partir du nom du tampon afin de définir le mode:Vous pouvez l'exécuter lorsqu'un tampon est renommé à l'aide des conseils:
Je ne suis pas sûr du meilleur endroit pour connecter ceci pour affecter de nouveaux tampons. Ici, j'utilise le
buffer-list-update-hook
, mais qui est appelé dans plus de cas que nécessaire.la source
buffer-list-update-hook
car lechange-major-mode-hook
n'était pas appelé avec le tampon actuel attendu. Pour mémoire, il est probablement plus judicieux de conseiller votre fonction de commutateur-tampon comme le fait @Dan dans sa réponse.Vous pouvez utiliser des tampons * scratch * dans le but de créer des tampons temporaires qui ont le même mode principal que le fichier sur lequel vous travaillez.
Voici une réponse emacs SE qui pourrait résoudre votre problème:
Comment basculer rapidement entre un fichier et un tampon * scratch * ayant le même mode majeur?
La question et la réponse référencées ont toutes deux été publiées par moi. La réponse dans la fonction fait ce qui suit:
*scratch-X-mode*
s'il n'en existe pas déjà, et bascule vers ce nouveau tampon créé.*scratch-X-mode*
existe déjà, il passe simplement à ce tampon.la source
Il y a de bonnes réponses ici, mais je voulais ajouter une chose. Emacs a une tonne de fonctionnalités et il y a souvent plusieurs façons de faire quelque chose. Vous pouvez ajouter des balises en haut de n'importe quel fichier qui indiquent à emacs de quel type il s'agit, quelle que soit l'extension. Par exemple, en ajoutant ceci:
En haut d'un fichier, emacs saura qu'il s'agit d'un fichier Python même sans l'
.py
extension. Notez que le#
début de la ligne est un commentaire de style Python. Pour différents types de fichiers, vous pouvez utiliser différents commentaires. Par exemple, pour spécifier un fichier Lisp que vous utilisez;
pour démarrer une ligne de commentaire et définir le mode dans emacs comme ceci:Voir Spécification des variables de fichier et choix des modes de fichier .
la source
switch-buffer
) et le réglage automatique du mode sur autre chose quefundamental-mode
.