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 又不报错。

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

我重构了一下, 现在consult-todo-dir 可以正常使用了.

1 个赞

添加了缓存机制, grep耗时过长时会第一次默认缓存下来, 第二次调用就可以舒适使用了.

1 个赞

感谢更新,非常好用!比org-sidebar和consult-agenda都舒服。sidebar跳转不方便,consult-agenda太慢。非org文档能实现这样的关键词管理方式真的是一大贡献。

请教todo-narrow怎么设置才能生效?下面的配置似乎不行:

重启了之后可以了。

(use-package consult-todo
	:config
	(defconst consult-todo--narrow
		'((?t . "TODO")
			(?n . "NEXT")
			(?f . "FIXME")
			(?b . "BUG")
			(?h . "HOLD")
			(?d . "DONE")
			)
		"Default mapping of narrow and keywords.")
	)

另外请问可否自定义使用ripgrep-all作为搜索引擎,它自带缓存,大文件搜索很快。 目前对于一个几万行的org文件搜索还是比较吃力。

目前使用的是自带的 rgrep, 底层是 grep 命令, 比较简单, 其实呢关键点在于你得自己去解析 grep的结果, 这个没有统一标准, 我可以抽象出接口, 但是解析方程还是需要你自己写. 这样的话, rg.el 其实都可以, 欢迎pr

1 个赞

请问下有没有办法让结果中的文件名短一些,在安卓手机上用的话,手机屏幕很小,文件名稍微长一点就看不到结果了。

emm… 还是建议您在电脑上使用吧, 我也没想到还有这种场景.