Ich ändere einen Elisp-Code aus 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))
Ich war in der Lage einen Fehler zu beheben , wo die Vertiefung war off-by-one durch Modifizierung (count-lines (point-min) (point-max))
zu (+ (count-lines (point-min) (point-max)) 1)
. Das war einfach.
Aber jetzt möchte ich es so ändern, dass die minimale Breite 2 ist, indem ich eine if-Bedingung hinzufüge, (concat " %" (number-to-string w) "2d ")
wenn die Zeilenzahl <10 ist.
Das sollte einfach sein! Fügen Sie eine Bedingung hinzu und kopieren Sie das Concat. Stück Kuchen, richtig? Ich weiß, was ich tun soll , aber ich berühre elisp selten und bin immer entmutigt, wenn ich irgendetwas in Klammern ändern muss.
Nach meinem Verständnis besteht der "richtige" Stil darin, den Code auf der Grundlage von Einrückungen zu strukturieren und die abschließenden Klammern am Ende einer Zeile und nicht allein zu setzen. Da ich aus anderen C-Sprachen komme, habe ich Probleme, Code auf diese Weise zu lesen und zu schreiben. Meine Frage lautet also: Was mache ich falsch? Wie soll ich elisp editieren und im Code navigieren, damit ich nicht alle Klammern aufzählen muss?
Wenn ich mit etwas arbeite, das zu tief wird, muss ich meine Tür schließen, die Jalousien ziehen und die Klammer K & R so positionieren, dass ich das verdammte Ding nicht nur lesen, sondern auch modifizieren kann, ohne auszuflippen.
Offensichtlich mache ich das alles falsch. Wie kann ich elisp so ohne Angst berühren?
Bitte beachte, dass meine Frage, wie man durch elisp navigiert und es bearbeitet, keine Frage zum Stil ist. Als Styleguide verwende ich bereits: https://github.com/bbatsov/emacs-lisp-style-guide
Aktualisierung:
So formatieren Sie elisp richtig, bevor Sie sich auf emacs.stackexchange in Verlegenheit bringen:
Markieren Sie Ihr Elisp und führen Sie durch M-x indent-region
.
Die Problemlösung:
Für diejenigen, die wissen möchten, wie man eine Rechtfertigung für Linum mit einer Mindestbreite von zwei ausführt, ist hier die Lösung:
(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
da die Breite von rechtsbündig nach linksbündig wechselt, sobald sie sich auf 3 oder mehr Zeichen bewegt.
highlight-parentheses
. rainbow-delimiters
; usw. Hier ist meine eigene vereinfachte Version highlight-parentheses
, die das Scrollen ermöglicht, ohne die Klammern zu entfernen, die zuletzt eingefärbt wurden: stackoverflow.com/a/23998965/2112489 In Zukunft ist es eine Frage pro Kunde / Thread.