我正在从linum.el修改一些elisp代码:
(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)
。那很简单。
但是现在我想修改它,以便通过(concat " %" (number-to-string w) "2d ")
在行数计数<10 的情况下添加if条件来最小宽度为2 。
这应该很容易!添加一个条件并复制/粘贴concat。小菜一碟吧?我的意思是,我知道我应该做的,但我很少过问elisp的,当我需要修改,有很多括号的任何东西我总是吓倒。
据我所知,“正确”的样式是基于缩进来构造代码,并在行的末尾而不是单独地将尾括号括起来。来自其他“ C”风格的语言,我很难以这种方式读写代码。所以我的问题是:我在做什么错?我应该如何编辑elisp并浏览代码,而不必坐在那里计算每个括号?
当我在elisp中处理过深的东西时,我必须关上门,拉开百叶窗,然后开始放置括号中的K&R样式,这样我不仅可以阅读而且可以修改令人毛骨悚然的东西而不会感到惊讶。
显然我做错了。我如何能这样无惧地触摸elisp?
请注意,我的问题是如何导航和编辑elisp而不是样式问题。我已经使用以下内容作为样式指南:https : //github.com/bbatsov/emacs-lisp-style-guide
更新:
在emacs.stackexchange上尴尬之前,如何正确格式化elisp:
标记您的elisp并执行M-x indent-region
。
问题解决方案:
对于那些想知道如何对最小宽度为2的linum执行右对齐的解决方案:
(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 将来,这是每个客户/线程的一个问题。