Je souhaite personnaliser cc-mode
pour exécuter une fonction avant d'enregistrer. Une solution serait de modifier le cc-mode
keymap pour le lier C-x C-s
à une fonction qui effectue le travail dont j'ai besoin puis l'enregistre.
Ma question est de savoir s'il existe un crochet que je pourrais personnaliser pour cela? Les documents CC Hooks ne mentionnent pas before-save-hook
spécifiquement pour cc-mode
. Comment cela devrait-il être fait à l'aide d'un crochet?
Sinon, comment dois-je procéder defadvice
? En lisant le manuel, la seule façon que j'ai pu voir était d'activer les conseils avant d'enregistrer puis de les désactiver une fois le travail terminé. Cela semble lourd. Quelle serait la façon idiomatique d'utiliser advice
s?
before-save-hook
peut vérifier le mode principal actuel (par exemple(eq major-mode ...)
) et ne rien faire si elle ne correspond pas au mode que vous personnalisez.haskell-mode
a au moins un desafter/before-save
crochets et j'ai supposé que c'était la pratique standard pour les modes prog.after-save-hook
; vous pouvez utiliser le même type de procédure mais le remplacerbefore-save-hook
.Réponses:
Une façon assez courante de restreindre l'action d'un hook à un mode majeur particulier consiste à vérifier la valeur de
major-mode
.Par exemple, ce hook imprime un message avant d'enregistrer les tampons en utilisant
c++-mode
:En remarque: il peut parfois être utile de vérifier si un mode majeur est dérivé du mode CC; nous pouvons le faire en vérifiant si ce
c-buffer-is-cc-mode
n'est pas le casnil
:la source
Vous pouvez également utiliser un hook local:
Cela ajoute
MY-HOOK-FUNC
à la mémoire tampon localebefore-save-hook
de chaque tampon en mode C ++, ou à tout tampon dans un mode dérivé du mode C ++.Je trouve cela plus élégant que la vérification explicite
major-mode
, et cela a l'avantage que vous pouvez désactiverbefore-save-hook
localement pour chaque tamponM-: (remove-hook 'before-save-hook MY-HOOK-FUNC 'local)
sans affecter les autres tampons.la source
Une fois, j'avais besoin de quelque chose comme ça pour compiler automatiquement mes fichiers elisp lors de l'enregistrement, j'ai utilisé une approche comme celle-ci (converti l'approche en mode cc):
la source
c-mode-common-hook
? Deuxièmement, il semble que la fonction sera ajoutée labefore-save-hook
première fois que vous entrerez dans uneC
langue liée, mais cette fonction sera appelée juste avant chaque sauvegarde sur chaque tampon. Ce que l'OP doit faire est d'exécuter la fonction à condition que le tampon soit dans un mode spécifique (voir le commentaire de @ Constantine pour savoir comment).