2011-07-12 2 views
4

Contexte:afficher facilement les informations utiles dans la coutume emacs mode mineur - le mode en ligne malheurs

Je crée un mode mineur qui donne à l'utilisateur « conseils » à savoir si le tampon qu'ils visitent utilise des onglets ou des espaces pour l'indentation (simplement en examinant le premier caractère de chaque ligne dans le tampon). Certaines fonctionnalités que je prévois d'ajouter incluent un affichage d'information dans la ligne de mode et quelques fonctions pour basculer entre les onglets ou les espaces, la largeur de tabulation, etc.

Je ne suis pas vraiment préoccupé par l'utilité de ce mode mineur . En fait, je serais surpris s'il n'y a pas déjà quelque chose qui fasse la même chose. Il s'agit principalement d'un exercice d'écriture de modes mineurs.


Question:

Quelle serait un endroit propre, de façon non importune d'insérer/retirer le texte du mode en ligne lors de l'activation/désactivation de mon mode mineur? Je ne veux pas l'utilisateur d'avoir à modifier leur mode-line-format, je veux juste insérer de manière non destructive et supprimer le texte. En ce moment je suis en utilisant une fonction qui ressemble à quelque chose comme:

(defun update-indent-hints-mode-line (what-this-buffer-loves) 
    (let ((indent-hints-mode-line-text (concat " " "[" what-this-buffer-loves "-loving" "]")) 
     (my-mode-line-buffer-identification 
     (remq " [Tab-loving]" (remq " [Space-loving]" mode-line-buffer-identification)))) 
    (setq mode-line-buffer-identification 
      (add-to-list 'my-mode-line-buffer-identification 
         indent-hints-mode-line-text 
         t)) 
    (force-mode-line-update))) 

Il fonctionne bien, mais la recherche et la suppression « [Tab aimant] » et « [Espace épris] » semble assez hackish et laid .. Y a-t-il une façon plus propre de le faire?

Points Bonus: Tous les commentaires sur les humbles débuts de mon petit mode tout aussi humble: https://github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el Je suis évidemment un n00b elisp, mais je suis ici pour apprendre.

Répondre

5

Vérifiez la variable minor-mode-alist, qui associe des variables avec des chaînes dans la ligne de mode. Si vous modifiez votre code soit la variable tab-loving-t ou space-loving-t (et définissez l'autre variable à la nil), vous pouvez obtenir ce que vous voulez avec:

(setq minor-mode-alist (cons '(space-loving " [Space-loving]") 
          (cons '(tab-loving " [Tab-loving]") 
            minor-mode-alist))) 
+0

Vous, monsieur, êtes un gentleman et un savant. – mgalgs

Questions connexes