sourcehut: peek: A emacs plugin that enables you to quick peek marked region or definition.
github: GitHub - Ziqi-Yang/peek: Create peek view below/above cursor point to show things. An Emacs Plugin.
仿照Citre的预览窗口写的,目前只支持overlay,后续想加入child frame支持。
屏幕截图
主要特性:
- 选中区域,之后可以显示在预览窗口中。
- buffer和window local的预览窗口。
- 预览窗口跟随鼠标,支持窗口内滑动(上下滑动)。
- 与
xref
和eldoc
联动。
- 实时更新
- 可以简单地结合自己的go to definition函数
5 个赞
mafty
2
使用了一下,发现和 demo 中第二张一样分割线 (形如 ------
的 text)有的时候会超过一行,请问这是有意设计的吗
都没注意到。确实有些时候会超出一行,通常是多一个字符。bug无疑
truncate-lines
始终为nil的情况下,elisp mode 下始终正常,rust mode 下结构体的peek刚开始会超过一行,经过几次测试后又恢复正常。大概不是truncate-lines
的问题。
这个问题可能需要深入探索,但我觉得目前还是先把字符数量 - 1 好了
1 个赞
Jerry
6
准备给lsp-bridge写一个的,已经写了600多行。
来论坛一看发现已经有大佬捷足先登了😂
2 个赞
能支持 overlay 就是最值得的 feature 了。 overlay 的实现要比 childframe hack 很多,很多作者都会倾向于用 childframe 来实现,因为 overlay 的 code 会很容易写的特别脏。
1 个赞
xuuexu
12
借楼问一个问题:
这种show/peek definition的小窗口是需要实现好怎样的功能?假设我的当前语言的major mode已经实现了一个goto-definition(跳转window)的函数,是不是很容易就可以接入这个peek的包呢?还是两者原理其实并不相同?
1 个赞
rua
13
对于 xref 像 citre 那样有路径的吗 a->b->c 这样
1 个赞
Zarkli
14
目前我觉得还比较麻烦。针对跳转到定义预览这个特点目前只对xref
提供了特殊支持,并且不是特别完善(存在bug:不支持具有多个definition位置的identifier)。如果要接入这个包需要较多地阅读源代码,然而这并不值得,因为我打算之后提供一个更加通用的跳转到文件定义的方法,比如接受一个函数或者一个marker(目前还没阅读这方面的info文档,不过我觉得可行 :3 )
Zarkli
15
并没有,也不知道怎么实现 。不过我觉得如果是文件路径倒是可以有。
感覺挺好的, 我自己是使用 quick-peek.
不知道跟 peek 有什麼區別?
1 个赞
Zarkli
17
我最开始查到的插件其实也是quick-peek
。主要是觉得这个库提供的功能并没有citre peek 那么的强大(比如说可以跟随光标,peek view内容可以上下滚动)。具体差别可以见 项目 readme 的 feature部分。
此外,促使我另写一个插件的原因还有: 两个border 只有在最后一行的时候height才为1,引起视觉不适(雾
2 个赞
Zarkli
19
现在已经支持简单地接入自定义goto definition函数了。这个函数需要实现跳转到definition功能(并不需要跳转回来):
(defun peek-goto-xref-defintion-func (identifier)
"Go to the definition of IDENTIFIER."
(xref-find-definitions identifier)
;; clear xref history
(pop (car (xref--get-history))))
(defun peek-xref-definition ()
"Peek xref definition."
(interactive)
(peek-definition
'peek-goto-xref-defintion-func
(list (thing-at-point 'symbol))))
xuuexu
20
高效率
如果我理解没错的话,peek-goto-xref-defintion-func 是用户可以自定义的函数?能不能稍微说明一下这种函数需要有什么类型/行为,目前看来是需要接受一个identifier然后进行跳转,需要返回什么吗 (position之类的)?换句话说想接入这个peek-definition需要满足什么条件?
我装了peek想接入我的这个函数(跟你提供的xref范例有些分别)
改了几处代码都没有成功。