12
votes

emacs: est-ce une variable locale?

Comment puis-je comprendre cela?

J'ai ajouté Supprimer-whitespace-whitespace au avant-enregistrez-crochet dans mon C-Mode-Crochet commun , mais il On dirait que Supprimer-traction-whitespace est appelé pour chaque fichier, pas seulement des tampons utilisant le mode C et les dérivés.

Puis-je créer le avant-sauvegarde-crochet tampon local?


2 commentaires

Il y a aussi ws-garn , lequel est ce que j'utilise: FTP.LYSATOR.LIU.SE/PUB/EMACS/WS-TRIM.EL


Si un crochet est tampon-local ou non est la mauvaise question: tous les crochets sont. La question est de savoir si la fonction que vous avez ajoutée a été ajoutée à la partie tampon-local ou à la partie globale (qui dépend de l'argument que vous avez transmis à ajout ) .


5 Réponses :


2
votes

Jamais voulu le faire avant, mais cela devrait fonctionner: xxx

dans le général CH V sera invitée à un nom de variable et affichera une description vous indiquant si le Var est tampon-local.

Avant-sauve-crochet est une variable définie dans `Files.el '. Sa valeur est nul

Cette variable est potentiellement risquée Lorsqu'il est utilisé comme variable locale de fichier.

Documentation: Crochet normal qui est exécuté avant qu'un tampon soit enregistré dans son fichier.

Vous pouvez personnaliser cette variable.

vs.

La fonction d'erreur suivante est une variable défini dans `simple.el '. Sa valeur est nil

devient automatiquement tampon-local quand réglé de n'importe quelle mode. Ce La variable est potentiellement risquée lorsque utilisé comme variable locale de fichier.

Documentation: fonction à utiliser pour trouver l'erreur suivante dans le tampon actuel. La fonction est appelée avec 2 Paramètres:

[...]


2 commentaires

Je ne sais pas si cela était correct à l'époque où il a été écrit, mais la documentation actuelle indique "N'utilisez pas make-local-variable pour créer un tampon variable de crochet-local. Utilisez plutôt < Code> Ajout-crochet et spécifier t pour l'argument local. "


La dépréciation de make-local-variable pour les hameçons remonte à EMACS-21.



21
votes

Ajoutez-le à Contenu en écriture-Contenu-Fonctions Code> à la place:

(add-hook 'c-mode-common-hook
  (lambda()
    (add-hook 'write-contents-functions
      (lambda()
        (save-excursion
          (delete-trailing-whitespace)))
      nil t)))


2 commentaires

Merci; J'ai corrigé le bogue correspondant sur Emacswiki et a souligné ici pour le crédit.


(Presque) Tous les crochets sont à la fois locaux et globaux. Il suffit d'utiliser l'argument local de add-hameçon 'pour indiquer si vous souhaitez ajouter votre fonction globalement ou tampon-localement. Local-Write-File-Hagles est obsolète depuis EMACS-22.1, comme l'est Ecrire-File-Hooks (remplacé par Fonctions de fichier écriture-write-file ) , vous pouvez donc vouloir mettre à jour votre manuel de référence.



0
votes

Utilisez Contenu en écriture-Contenu-Fonction Code> à la place:

write-contents-functions is a variable defined in `files.el'.
Its value is nil

  Automatically becomes buffer-local when set in any fashion.

Documentation:
List of functions to be called before writing out a buffer to a file.
If one of them returns non-nil, the file is considered already written
and the rest are not called and neither are the functions in
`write-file-functions'.

This variable is meant to be used for hooks that pertain to the
buffer's contents, not to the particular visited file; thus,
`set-visited-file-name' does not clear this variable; but changing the
major mode does clear it.

For hooks that _do_ pertain to the particular visited file, use
`write-file-functions'.  Both this variable and
`write-file-functions' relate to how a buffer is saved to file.
To perform various checks or updates before the buffer is saved,
use `before-save-hook'.


1 commentaires

Pourquoi utiliser une utilisation en écriture-contenties-fonctions au lieu de crochets de fichiers locaux-écriture?



20
votes

Non, la variable avant-sauvegarde-crochet code> n'est pas naturellement tampon local. La documentation de la variable ne dit pas qu'il est local de la mémoire tampon ou que cela deviendra automatiquement une liste de tampon locale lorsqu'il est défini.

Si vous souhaitez ajouter un crochet local tampon, la bonne façon de le faire est d'utiliser le paramètre local optionnel. DU STANDARD ADD-HOOK CODE> Fonction: P>

(add-hook 'before-save-hook 'foo nil t)


0 commentaires

0
votes

Oui Créez un .Dir-locals.el fichier dans votre répertoire racine de projet avec ce contenu: xxx

Ceci ajoutera ce crochet uniquement à C-MODE TAmps tampons sous ce répertoire.

Mais si vous voulez seulement un fichier spécifique et non un répertoire entier, vous devriez pouvoir ajouter ceci au haut du fichier à l'aide de fichiers variables locales: xxx

ou bas de fichier comme ceci: xxx


0 commentaires