Zarkli
21
对的,peek-goto-xref-defintion-func
可以自定义。要实现预览defintion功能可以分为下面几步:
- 有一个可以直接跳转到definition位置的函数,在例子里也就是
peek-goto-xref-defintion-func
。这个函数完全自定义,接受任意参数,并不需要返回任何值,唯一需要take care的就是在当前window里跳转到definition所在的buffer的point。
- 然后接入
peek-definition
,对应peek-xref-definition
。peek-definition的格式是 (peek-definition FUNC &optional ARGS)
,FUNC就是第一步的函数,ARGS
是传递给这个函数的参数的一个list。在例子里,我们传递给 peek-goto-xref-defintion-func
当前光标下的Symbol。
如果我没有理解错的话,你的函数接入peek可以这样写:
(defun peek-agda2-definition ()
"Peek definition of symbol at cursor point."
(interactive)
(peek-definition 'agda2-goto-definition-keyboard '()))
xuuexu
22
正解,用上了,感谢!有三点使用问题(可能并不普遍。。)
- 代码高亮:可能不是正则高亮的缘故(?),如果定义在另一个文件,那么peek的窗口显示是不高亮的(如果我用原来的跳转的话,是高亮好的)
- 没有禁止我的窗口跳转(这个我完全可以自己删掉跳转窗口的那一行来解决)
- 我注意到小窗口总是显示是在我cursor的上面几行,纯键盘的话没啥问题,用鼠标往上滚动起来有异常行为(不知道楼主用不用鼠标)
Zarkli
23
确实,还存在一些问题,开发测试不全,导致跨文件/buffer情况没测试
关于第一点:跨文件(并且是当前没有对应buffer的文件)之后确实没有高亮,但用M-n
或M-p
上下滚动peek view后可以高亮(一些可以,一些不可以)。
第二点:没看懂“窗口跳转”什么意思 XD, 是指跳转到另外一个窗口显示definition吗?peek-definition
接受的函数不应该跨窗口操作。
第三点: 可以通过peek-overlay-distance
来设置距离(README里忘说了
此外,貌似测出了跨文件/buffer的peek definition貌似不能跳转回来。 修bug去了 XD
编辑:
已修复:
- 不能跳转回来的问题
- 修复跨文件高亮问题
(完成)
2 个赞
xiaoC
24
查找定义固然重要,但像c++这种有虚函数和重载特性的语言,没有查找引用的话,使用体验上会难受很多。不知道什么时候emacs能把这块给补上,真的奇怪为什么VS的查引用这么好用,而emacs这块这么弱
3 个赞
Zarkli
25
个人感觉lsp + consult-xref
挺好用的(没试过c++ ):
2 个赞
我有一个大胆(或是无知)的想法不知当不当提,这个peek的思路能不能变出一个辞典来
查看变量定义~~查看单词释义?
Zarkli
27
哈哈想法都可以提啊 : ) 。这个feature通过peek-overlay-set-custom-content
(接受一个字符串参数,来设定peek view的内容)或者peek-definition
实现是完全可行的。然而需要面临一些问题:
- 对接什么查看词典的接口,比如
dictionary-search
- 这个词典接口返回的数据是否适合使用peek view(使得查出来的结果比较少),比如这是我的
dictionary-search
(给 dictd
配置了比较多的词典源),可以查到很多定义,我觉得并不适合用 peek
来查看:
(当然因为dictionary-search
的结果多少根据查的词和个人的dictd
配置而异,所以说不定适合 peek
)
还有一个需要考虑的地方:用 eldoc
来实现是否更加合适,因为 eldoc
更加普遍和通用,而且 peek
已经提供了显示 eldoc
的命令。不过用 eldoc
来实现容易与 major mode 的 eldoc 配置相冲突,所以可能并不是很好。
当然我觉得这个想法挺好的。 我可能会去实现一个dictionary-search
的peek
。<3
1 个赞
我不懂哈,只是建议
建议用这个词典《简明英汉增强版》
优点:离线词库全,有接口;实现结果可参考 T.vim 查词示例
1 个赞
Zarkli
29
我觉得你提供的这个词典可以看看是否能够接入dict
(debian - dict, dibian - dictd; archlinux - dictd)。自从 Emacs 28 以来,Emacs 提供了 dicrtionary.el
模块(dictionary-search
命令就是来自这个模块),方便与 dictd
交互。另建了一个仓库, 加入了 Peek 和 dictionary.el 的 交互。
https://git.sr.ht/~meow_king/peek-collection
Mastering Emacs 上有篇文章挺好地介绍了 dictionary.el 和 dict / dictd: Wordsmithing in Emacs - Mastering Emacs
非常感谢指点,花了半天的时间找到了一个简化版加入dict查询了,接一来再研究如何用你的新库
1 个赞