2008-12-11 16 views
3

En m'appuyant sur Getting Emacs to untabify when saving certain file types (and only those file types), j'aimerais lancer un crochet pour décompresser mes fichiers C++ lorsque je commence à modifier le tampon. J'ai essayé d'ajouter des hooks pour décommander le buffer en charge, mais ensuite il ne minimise pas tous mes fichiers inscriptibles qui sont chargés automatiquement quand emacs démarre.Comment exécuter un hook Emacs lorsqu'un tampon est modifié?

(Pour ceux qui se demandent pourquoi je fais cela, c'est parce que mon travail impose l'utilisation des onglets dans les fichiers, ce que je suis content de respecter .Le problème est que je balisais mes fichiers pour me le dire lorsque les lignes sont trop longues, mais que l'expression rationnelle correspond au nombre de caractères de la ligne, et non à l'espace occupé par la ligne, 4 onglets dans une ligne peuvent pousser la limite de 132 caractères, mais la ligne ne sera pas marquée . appropriée Ainsi, il me faut un moyen de tabify et untabify automatiquement)

+0

Il semble qu'une meilleure expression rationnelle résoudrait votre problème. –

Répondre

1

Voici ce que j'ai ajouté à mon dossier emacs untabify de la charge:.

(defun untabify-buffer() 
    "Untabify current buffer" 
    (interactive) 
    (untabify (point-min) (point-max))) 

(defun untabify-hook() 
    (untabify-buffer)) 

; Add the untabify hook to any modes you want untabified on load 
(add-hook 'nxml-mode-hook 'untabify-hook) 
+0

Comme je l'ai dit dans la question, je ne veux pas quelque chose comme ça parce que j'ai souvent des douzaines de fichiers chargés au démarrage d'emacs, et ça les traverse et les déstabilise même si je n'en ai pas besoin. Quand je ferme les emacs, tous les tampons sont sales et j'ai besoin de les sauvegarder. Merci quand même. – user45425

3

Prenez un lo ok à la variable "before-change-functions".

Peut-être quelque chose le long de cette ligne (avertissement: le code non testé):

(add-hook 'before-change-functions 
      (lambda (&rest args) 
      (if (not (buffer-modified-p)) 
       (untabify (point-min) (point-max))))) 
0

Cette réponse est tangente, mais peut être utile.

Le package wide-column.el link text modifie la couleur du curseur lorsque le curseur dépasse une colonne donnée. En réalité, les couleurs du curseur peuvent varier en fonction des paramètres. Cela semble une solution moins intrusive que votre code d'expression habituel, mais cela peut ne pas convenir à vos besoins.

+0

Merci, c'est une solution intéressante. Je pense que je préférerais marquer les faces du fichier afin que je puisse voir quand les lignes sont longues sans avoir à positionner mon curseur, cependant. Pourtant, c'est plutôt gentil. Je peux l'utiliser pour d'autres choses. :) – user45425

0

Et une réponse différente, tangentielle.

Vous avez mentionné que votre expression rationnelle n'était pas assez bonne pour savoir quand la limite de 132 caractères a été atteinte. Peut-être une meilleure expression rationnelle ...

Cette expression rationnelle correspondra une ligne quand il a plus de 132 caractères, en supposant une largeur de pattes est 4. (je pense que je suis le calcul à droite)

"^\\(?: \\|[^ \n]\\{4\\}\\)\\{33\\}\\(.+\\)$" 

Le dernier expression entre parenthèses est l'ensemble des caractères qui dépassent la limite. La première expression entre parenthèses est shy.