日常编码或者阅读其他代码时经常会使用或看到TODO/FIXME等关键字,之前是使用hl-todo来进行高亮,hl-todo中还提供了很多其它功能,我基本上只使用了高亮关键字的功能。
James Cherti介绍了Emacs内置功能实现关键字高亮的方法,核心实现是使用 font-lock-add-keywords
来增加高亮关键字,使用 font-lock-remove-keywords
来删除高亮关键字,这样就可以不使用hl-todo包了,这里我根据自己的需要设置颜色样式,配置成编程模式启动高亮关键字。
(defvar +highlight-keywords
'(("\\<\\(TODO\\|FIXME\\|BUG\\)\\>" 1 'error prepend)
("\\<\\(NOTE\\|HACK\\|MAYBE\\)\\>" 1 'warning prepend)))
(define-minor-mode +highlight-keywords-mode
"Highlight keywords, like TODO, FIXME..."
:global nil
(if +highlight-keywords-mode
(font-lock-add-keywords nil +highlight-keywords)
(font-lock-remove-keywords nil +highlight-keywords))
;; Fontify the current buffer
(when (bound-and-true-p font-lock-mode)
(if (fboundp 'font-lock-flush)
(font-lock-flush)
(with-no-warnings (font-lock-fontify-buffer)))))
(add-hook 'prog-mode-hook #'+highlight-keywords-mode)