Sto modificando un po 'di codice elisp da 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))
Sono stato in grado di correggere un bug in cui il rientro era uno alla volta modificando (count-lines (point-min) (point-max))
in (+ (count-lines (point-min) (point-max)) 1)
. È stato facile.
Ma ora voglio modificarlo in modo che la larghezza minima sia 2 aggiungendo un if-condizionale dove (concat " %" (number-to-string w) "2d ")
se il conteggio del numero di riga è <10.
Questo dovrebbe essere facile! Aggiungi un condizionale e copia / incolla il concat. Pezzo di torta, vero? Voglio dire, so cosa dovrei fare, ma tocco raramente elisp e sono sempre scoraggiato quando devo modificare qualsiasi cosa con molta parentesi.
Lo stile "corretto", da quello che ho capito, è strutturare il codice in base al rientro e racchiudere la parentesi finale alla fine di una riga anziché da sola. Provenendo da altri linguaggi in stile 'C', faccio fatica a leggere e scrivere codice in questo modo. Quindi la mia domanda è: cosa sto facendo di sbagliato? Come posso modificare elisp e navigare nel codice in modo da non dover sedere lì e contare ogni parentesi?
Quando lavoro con qualcosa in elis che diventa troppo profondo, devo chiudere la porta, tirare le persiane e iniziare a posizionare la parentesi in stile K & R in modo che non solo possa leggere ma modificare il maledetto senza impazzire.
Ovviamente sto sbagliando tutto. Come posso toccare elisp in questo modo senza paura?
Si prega di notare che la mia domanda è come navigare e modificare elisp non come una domanda di stile. Sto già usando quanto segue come guida di stile: https://github.com/bbatsov/emacs-lisp-style-guide
aggiornamenti:
Come formattare correttamente elisp prima di metterti in imbarazzo su emacs.stackexchange:
Segna il tuo elisp ed esibisciti M-x indent-region
.
La soluzione del problema:
Per coloro che vogliono sapere come eseguire un giustificato a destra per linum con una larghezza minima di due, ecco la soluzione:
(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
perché una volta che la larghezza passa a 3 o più caratteri, passa da giustificato a destra a giustificato a sinistra.
highlight-parentheses
; rainbow-delimiters
; ecc. Ecco la mia versione semplificata di highlight-parentheses
ciò che consente lo scorrimento senza rimuovere le parentesi che sono state colorate l'ultima volta: stackoverflow.com/a/23998965/2112489 In futuro, è una domanda per cliente / thread.