Я змінюю код elisp з 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))
Мені вдалося виправити помилку, коли відступ було відмінено за допомогою зміни (count-lines (point-min) (point-max))
до (+ (count-lines (point-min) (point-max)) 1)
. Це було легко.
Але тепер я хочу змінити його так, щоб мінімальна ширина була 2, додавши if-умовно, якщо, (concat " %" (number-to-string w) "2d ")
якщо число рядків дорівнює <10.
Це повинно бути легко! Додайте один умовний і скопіюйте / вставте накладки. Шматок пирога, правда? Я маю на увазі, я знаю, що я повинен робити, але я рідко торкаюся елісп, і мені завжди спантеличено, коли мені доводиться щось змінювати за допомогою багатьох дужок.
"Правильний" стиль, наскільки я розумію, полягає в структурі коду на основі відступу та загортанні кінцевих дужок в кінці рядка, а не самостійно. Походячи з інших мов стилю "С", я борюся з читанням та написанням коду таким чином. Тож моє запитання: що я роблю неправильно? Як я повинен редагувати elisp і орієнтуватися навколо коду таким чином, що мені не доведеться сидіти там і рахувати всі дужки?
Коли я працюю з чимось глибоким глибиною, я повинен зачинити двері, натягнути жалюзі та почати розміщувати круглі дужки у стилі K&R, щоб я міг не тільки читати, але й змінювати чортову річ, не вигадуючи.
Очевидно, я роблю це все неправильно. Як я можу так торкнутися Елісп без страху?
Зауважте, що моє питання полягає в тому, як орієнтуватися та редагувати elisp не як питання про стиль. Я вже використовую таке керівництво як стиль: https://github.com/bbatsov/emacs-lisp-style-guide
Оновлення:
Як правильно відформатувати elisp перед тим, як посоромити себе на emacs.stackexchange:
Познач свій елісп і виконай M-x indent-region
.
Рішення проблеми:
Для тих, хто хоче знати, як виконати право-виправдання для підшивки з мінімальною шириною в два, ось таке рішення:
(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
тому що, як тільки ширина перекидається на 3 і більше символів, тоді вона переходить від привести право-виправдане до ліво-виправданого.
highlight-parentheses
,; rainbow-delimiters
; і т. д. Ось моя власна спрощена версія, highlight-parentheses
яка дозволяє прокручувати, не видаляючи дужки, які були остаточно забарвлені: stackoverflow.com/a/23998965/2112489 Надалі це одне запитання на кожного клієнта / нитку.