新Emacs插件: Peek

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支持。

屏幕截图

主要特性:

  1. 选中区域,之后可以显示在预览窗口中。
  2. buffer和window local的预览窗口。
  3. 预览窗口跟随鼠标,支持窗口内滑动(上下滑动)。
  4. xrefeldoc联动。
  5. 实时更新
  6. 可以简单地结合自己的go to definition函数
5 个赞

使用了一下,发现和 demo 中第二张一样分割线 (形如 ------ 的 text)有的时候会超过一行,请问这是有意设计的吗

我没用。但我猜大概长这样:shorter rule when truncate-lines is nil · Issue #38 · purcell/page-break-lines · GitHub

都没注意到。确实有些时候会超出一行,通常是多一个字符。bug无疑 :space_invader:

truncate-lines始终为nil的情况下,elisp mode 下始终正常,rust mode 下结构体的peek刚开始会超过一行,经过几次测试后又恢复正常。大概不是truncate-lines的问题。
这个问题可能需要深入探索,但我觉得目前还是先把字符数量 - 1 好了 :sweat_smile:

1 个赞

准备给lsp-bridge写一个的,已经写了600多行。

来论坛一看发现已经有大佬捷足先登了😂

2 个赞

啊这 :pray:。前几天闲着突然想写一个插件(

欢迎贡献(

是不是有点类似这个插件 eldoc-box

确实。看样子这个插件非常的nice

能支持 overlay 就是最值得的 feature 了。 overlay 的实现要比 childframe hack 很多,很多作者都会倾向于用 childframe 来实现,因为 overlay 的 code 会很容易写的特别脏。

1 个赞

推进进elpa吧

1 个赞

借楼问一个问题:

这种show/peek definition的小窗口是需要实现好怎样的功能?假设我的当前语言的major mode已经实现了一个goto-definition(跳转window)的函数,是不是很容易就可以接入这个peek的包呢?还是两者原理其实并不相同?

1 个赞

对于 xref 像 citre 那样有路径的吗 a->b->c 这样

1 个赞

目前我觉得还比较麻烦。针对跳转到定义预览这个特点目前只对xref提供了特殊支持,并且不是特别完善(存在bug:不支持具有多个definition位置的identifier)。如果要接入这个包需要较多地阅读源代码,然而这并不值得,因为我打算之后提供一个更加通用的跳转到文件定义的方法,比如接受一个函数或者一个marker(目前还没阅读这方面的info文档,不过我觉得可行 :3 )

并没有,也不知道怎么实现 :dizzy_face:。不过我觉得如果是文件路径倒是可以有。

感覺挺好的, 我自己是使用 quick-peek.

不知道跟 peek 有什麼區別? :thinking:

1 个赞

我最开始查到的插件其实也是quick-peek。主要是觉得这个库提供的功能并没有citre peek 那么的强大(比如说可以跟随光标,peek view内容可以上下滚动)。具体差别可以见 项目 readme 的 feature部分。

此外,促使我另写一个插件的原因还有: 两个border 只有在最后一行的时候height才为1,引起视觉不适(雾

2 个赞

阿 了解了! 謝謝解釋! :heart:

1 个赞

现在已经支持简单地接入自定义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))))

高效率 :+1:

如果我理解没错的话,peek-goto-xref-defintion-func 是用户可以自定义的函数?能不能稍微说明一下这种函数需要有什么类型/行为,目前看来是需要接受一个identifier然后进行跳转,需要返回什么吗 (position之类的)?换句话说想接入这个peek-definition需要满足什么条件?

我装了peek想接入我的这个函数(跟你提供的xref范例有些分别)

改了几处代码都没有成功。