Zmieniam kod elisp z 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))
Byłem w stanie naprawić błąd, w którym wcięcie występowało osobno, zmieniając (count-lines (point-min) (point-max))
na (+ (count-lines (point-min) (point-max)) 1)
. To było łatwe.
Ale teraz chcę to zmodyfikować tak, aby minimalna szerokość (concat " %" (number-to-string w) "2d ")
wynosiła 2 poprzez dodanie warunkowego warunku, w którym jeśli liczba wierszy wynosi <10.
To powinno być łatwe! Dodaj jeden warunkowy i skopiuj / wklej konkat. Bułka z masłem, prawda? To znaczy, wiem, co powinienem zrobić, ale rzadko dotykam elisp i zawsze jestem zniechęcony, gdy muszę modyfikować cokolwiek z dużą ilością nawiasów.
Z tego, co rozumiem, „poprawny” styl polega na struktury kodu opartego na wcięciach i zawijaniu nawiasu końcowego na końcu linii, a nie samodzielnie. Pochodząc z innych języków w stylu „C”, mam problemy z czytaniem i pisaniem kodu w ten sposób. Więc moje pytanie brzmi: co robię źle? Jak mam edytować elisp i poruszać się po kodzie, aby nie musiałem tam siedzieć i liczyć każdego nawiasu?
Kiedy pracuję z czymś w elipsie, która robi się zbyt głęboka, muszę zamknąć drzwi, pociągnąć żaluzje i zacząć ustawiać nawiasy w stylu K & R, aby nie tylko móc czytać, ale modyfikować tę cholerną rzecz, nie wariując.
Oczywiście robię to wszystko źle. Jak mogę dotykać elisp w ten sposób bez strachu?
Pamiętaj, że moim pytaniem jest nawigacja i edycja elisp, a nie pytanie o styl. Używam już tego jako przewodnika po stylu: https://github.com/bbatsov/emacs-lisp-style-guide
Aktualizacje:
Jak poprawnie sformatować elisp przed zawstydzeniem się na emacs.stackexchange:
Oznacz swój elisp i wykonaj M-x indent-region
.
Rozwiązanie problemu:
Dla tych, którzy chcą wiedzieć, jak wykonać justowanie dla linum z minimalną szerokością dwóch, oto rozwiązanie:
(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
ponieważ gdy szerokość przewinie się do 3 lub więcej znaków, wówczas przesuwa się od wyrównania do prawej do wyrównania do lewej.
highlight-parentheses
.; rainbow-delimiters
; itp. Oto moja własna uproszczona wersja, highlight-parentheses
która umożliwia przewijanie bez usuwania nawiasów, które zostały ostatnio pokolorowane: stackoverflow.com/a/23998965/2112489 W przyszłości będzie jedno pytanie na klienta / wątek.