New package : consult-todo

hl-todo-swoop{,-all} 查找当前(或所有) buffer 的 TODO:

  (defun hl-todo-swoop ()
    "Use `helm-swoop' to find all TODO or similar keywords in current buffer."
    (interactive)
    (unless (require 'helm-swoop nil t)
      (error "`helm-swoop' is not installed"))
    (let ((regexp (replace-regexp-in-string "\\\\[<>()]" "" (hl-todo--regexp))))
      (helm-swoop :query regexp)))

  (defun hl-todo-swoop-all ()
    "Use `helm-swoop' to find all TODO or similar keywords in all buffers."
    (interactive)
    (unless (require 'helm-swoop nil t)
      (error "`helm-swoop' is not installed"))
    (let ((regexp (replace-regexp-in-string "\\\\[<>()]" "" (hl-todo--regexp))))
      (helm-multi-swoop-all regexp)))

不好意思才看见哈,我也重现这个 bug 了。

只要运行 consult-todo-dir 相关命令,如果列表项为空或者取消跳转就会出现。好像是因为涉及到 async 导致的 sentinel 错误。这个我还不懂,所以暂时没法解决。 本身我调用 rgrep 就是偷懒的做法,直接把命令加进了 compilation-finish-functions 这个 hook 里面,所以后续的debug我也完全一头雾水了。

最好的方法还是类似 magit-todos-list 那样,运行异步搜索命令然后 callback 再进行结果解析。 结果解析我没问题,看哪位大佬把前面那部分抽出来吧, magit-todos-list 我看着有点头疼。

我现在就将就着用。。反正错误只是提示一句 message 又不报错。

将来估计要彻底重写,到时候再考虑这些细节吧。。