伙计们,讨论eldoc-mouse到这里。

看了下这几个参数基本够用了,默认值可以参考下这个(不一定完全一致)

(defvar eldoc-box-frame-parameters
  '(;; make the childframe unseen when first created
    (left . -1)
    (top . -1)
    (width  . 0)
    (height  . 0)

    (no-accept-focus . t)
    (no-focus-on-map . t)
    (min-width  . 0)
    (min-height  . 0)
    (internal-border-width . 1)
    (vertical-scroll-bars . nil)
    (horizontal-scroll-bars . nil)
    (right-fringe . 8)
    (left-fringe . 8)
    (menu-bar-lines . 0)
    (tool-bar-lines . 0)
    (line-spacing . 0)
    (unsplittable . t)
    (undecorated . t)
    (visibility . nil)
    (mouse-wheel-frame . nil)
    (no-other-frame . t)
    (cursor-type . nil)
    (inhibit-double-buffering . t)
    (drag-internal-border . t)
    (no-special-glyphs . t)
    (desktop-dont-save . t)
    (tab-bar-lines . 0)
    (tab-bar-lines-keep-state . 1))
  "Frame parameters used to create the frame.")

还有个问题:为什么依赖是>=30.1?我的理解是跟随posframe即可(>=26.1)。是还有其他考虑吗?

嗯,用lsp-ui-doc的可能是个不错的选择。

I improve the appearance of the popup.

  1. add some space to between the border and the document content.
  2. break long lines by word instead of character.

I think it is much better now.

好消息。dev分支什么时候能合并到main分支呢?还有30.1的依赖能调整吗?

今天我已经合了,dev上的改动不止这 posframe buffer 现在隐藏了,另外最主要是提升了和eldoc 默认行为的兼容性,现在任何原先需要在eldoc-buffer 才能查看的信息,现在在弹出框上可以看了。比如,flymake, dape.

还有30.1的依赖能调整吗?

为啥要调整呢?我估计29是没问题的,主要是,最近几个版本eldoc修改比较多吧,另外29 eglot 才并入。

eldoc和eglot都上了GNU elpa,查了下posframe/edloc/posframe都支持26.3+。理论上跟它们保持一致就可以,除非你调用了特别的函数。我翻了下代码好像没看到。eldoc-box是支持27.1+,而且不依赖于posframe。

我现在明白你的意思了,eldoc, egot, posframe这几个包 在用低版本的emacs时可以从elpa 安装。你方便测试一下不嘛,看下27.1有没问题?

另外我用posframe 的原因是不想重造车轮,这也是我在创建eldoc-mouse 过程中的设计原则,包括尽量使用eldoc 已有功能,保持和其的兼容性,这样对于长期的维护更有利,看下我的代码量就明白了。

你的思路是对的,长期维护说起来简单,其实一点也不简单,比如我,5年前写代码都充满斗志,现在年纪大了,啥都不像动了,时间长了,许多细节忘记了,就更不像动了。。。 :rofl:

1 个赞

eldoc-mouse 只用了不到300行代码,实现了包括多eglot, elisp mode,任何支持eldoc 的功能的支持,而且还支持扩展。

posframe 很流行,我看很有一些package 依赖于posframe. 定位的handlers 太好用了!另外initialize 也很关键。我只有在对内容和边框之间加点空间的时候遇到点麻烦,最后也通过initialize 解决了

用posframe没有问题,我只是想说明这个依赖关系。我认为可以放开些,大不了加上compat包,使用的人会更多。有空我测测27或者28行不行。

1 个赞

README里 emacs-lisp-mode 写错了,报了个issue

Updated:建议再加一个eldoc-mouse-mode-map? 这样的话可以配置为

(use-package eldoc-mouse
  :bind (:map eldoc-mouse-mode-map
         ("C-h ." . eldoc-mouse-pop-doc-at-cursor))
  :hook (eglot-managed-mode emacs-lisp-mode))
1 个赞

改正了拼写错误。

确认一下,keymap 是不是先要在eldoc-mouse.el 里面定义为minor mode 定义一个keymap 呢?

这样就可以:

(defvar eldoc-mouse-mode-map (make-sparse-keymap))

;;;###autoload
(define-minor-mode eldoc-mouse-mode
  "Toggle the `eldoc-mouse-mode'."
  :lighter " eldoc-mouse"
  :keymap eldoc-mouse-mode-map
  (if eldoc-mouse-mode
      (eldoc-mouse-enable)
    (eldoc-mouse-disable)))

还不行的话开个权限我直接改了 :grinning_face:

你这代码都在这里了,肯定可以了。

把你加成maintainer没问题呀,只有你愿意,就发个账号来。

加了keymap, 谢谢建议!

1 个赞

试了下,可以和 eldoc-box 搭配使用

但鼠标移动到某个点上面时,会同时弹出 eldoc-box 和 eldoc-mouse 的框

如果只移动编辑器的光标,那么仅弹出 eldoc-box 的框

我认为移动光标时自动弹出,不是一个好的选择,mouse hover 可以认为是在用户想查看时才弹出,这是我做eldoc-mouse 的原因。

和我的想法一样, 但是我没有大佬的执行力和elisp水平 :joy: