[英]How to Call a Function in Emacs Mode Line Format
我想以 Emacs 模式行格式调用一些方法。 例如count-words
以查看选择了多少个字符或光标所在的类/方法名称是什么。
这是我当前的模式行格式,但是调用count-words
,结果显示*invalid*
并且我不确定它会在任何更改中被调用。
(setq-default mode-line-format
(list "---File:[%b%+] Line:[%l] Size:[%i] "
(count-words (point-min) (point-max))
))
我想在经常更新的模式行区域中调用一些自定义方法。 例如,我选择了多少个字符,谁更改了这一行(git blame),当前光标所在的类名是什么,等等。
您提出的问题的答案是:
(setq mode-line-format
(list "---File:[%b%+] Line:[%l] Size:[%i] %d"
(format "count: %d" (count-words (point-min) (point-max)))))
但我认为这不是您要问的问题,因为该值不会更新。 让我们解决这个问题。
我选择在你保存文件后更新它,因为如果你经常这样做,在缓冲区中的单词计数会在某些缓冲区大小上变慢。
(setq mode-line-format
(list "---File:[%b%+] Line:[%l] Size:[%i] %d"
'count-words-string))
(defun update-count-words-string-for-modeline ()
(interactive)
(setq count-words-string
(format "word count: %d" (count-words (point-min) (point-max))))
(force-mode-line-update))
(add-hook 'after-save-hook 'update-count-words-string-for-modeline)
(在保存后简单地调用带有字数的message
可能同样适合您的目的。)
‘(:eval FORM)’
A list whose first element is the symbol ‘:eval’ says to evaluate
FORM, and use the result as a string to display. Make sure this
evaluation cannot load any files, as doing so could cause infinite
recursion.
-- Ch i g (elisp)Mode Line Data
一般来说,如果不需要,请避免使用:eval
。 在许多情况下,在模式行中显示变量的值会更有效,并在其他地方安排该变量在必要时更新(这可能远低于模式行重新显示的频率)。
您在整个缓冲区上调用count-words
示例可能会导致大缓冲区中的性能问题。
例子:
(setq-default mode-line-format '(:eval (count-words--buffer-message)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.