Je modifie du code elisp de linum.el:
(custom-set-variables '(linum-format 'dynamic))
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (concat " %" (number-to-string w) "d ")))
ad-do-it))
J'ai pu corriger un bogue où l'indentation était décalée en modifiant (count-lines (point-min) (point-max))
en (+ (count-lines (point-min) (point-max)) 1)
. C'était facile.
Mais maintenant, je veux le modifier pour que la largeur minimale soit de 2 en ajoutant un if-conditionnel où (concat " %" (number-to-string w) "2d ")
si le nombre de lignes est <10.
Cela devrait être facile! Ajoutez un conditionnel et copiez / collez le concat. Un morceau de gâteau, non? Je veux dire, je sais ce que je suis censé faire, mais je touche rarement elisp et je suis toujours intimidé quand je dois modifier quoi que ce soit avec beaucoup de parenthèses.
Le style «correct», d'après ce que je comprends, consiste à structurer le code en fonction de l'indentation et à envelopper la parenthèse de fin à la fin d'une ligne plutôt que seule. Venant d'autres langages de style «C», j'ai du mal à lire et à écrire du code de cette manière. Alors ma question est: qu'est-ce que je fais mal? Comment suis-je censé éditer elisp et naviguer dans le code de sorte que je n'ai pas à m'asseoir là et à compter toutes les parenthèses?
Lorsque je travaille avec quelque chose dans elisp qui devient trop profond, je dois fermer ma porte, tirer les stores et commencer à positionner la parenthèse de style K & R afin que je puisse non seulement lire, mais modifier le sacré truc sans paniquer.
Évidemment, je fais tout cela mal. Comment puis-je toucher des élisp comme ça sans crainte?
Veuillez noter que ma question est de savoir comment naviguer et modifier elisp pas comme une question de style. J'utilise déjà ce qui suit comme guide de style: https://github.com/bbatsov/emacs-lisp-style-guide
Mises à jour:
Comment formater correctement elisp avant de vous embarrasser sur emacs.stackexchange:
Marquez votre élisp et jouez M-x indent-region
.
La solution du problème:
Pour ceux qui veulent savoir comment effectuer une justification à droite pour un linum d'une largeur minimale de deux, voici la solution:
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (if (> w 1)
(concat " %" (number-to-string w) "d ")
" %2d ")))
ad-do-it))
%2d
parce qu'une fois que la largeur passe à 3 caractères ou plus, elle passe de justifié à droite à justifié à gauche.
highlight-parentheses
; rainbow-delimiters
; etc. Voici ma propre version simplifiée highlight-parentheses
qui permet de faire défiler sans supprimer les dernières parenthèses colorisées: stackoverflow.com/a/23998965/2112489 À l'avenir, c'est une question par client / thread.