有看见这些
写了一个函数,绑定快捷键,用于控制 lsp-bridge-enable-candidate-doc-preview 的开关,
lsp-bridge-enable-candidate-doc-preview ;;; 设置这个变量只对 python 有效,但不会对 elisp 起作用
corfu-doc-toggle ;;; 执行这个命令只对 elisp 起作用,不会对 python 起作用
经过测试,实现了预期功能。
请大佬看一下,帮忙修正、精简!
;;; corfu-doc
(add-to-list 'load-path (expand-file-name "lisp/blove-extra/corfu-doc" user-emacs-directory))
(setq corfu-doc-mode t)
(setq lsp-bridge-enable-candidate-doc-preview nil)
;;;
;;; lsp-bridge/toggle-doc-preview
;;;
(defun lsp-bridge/toggle-doc-preview()
"turn on/off corfu-doc | lsp-bridge-enable-candidate-doc-preview"
(interactive)
(if lsp-bridge-enable-candidate-doc-preview
(progn
(setq lsp-bridge-enable-candidate-doc-preview nil)
;; (setq corfu-doc-mode nil)
(corfu-doc-toggle)
(message "corfu-doc | Candidate-Doc-Show ~ OFF")
)
(progn
(setq lsp-bridge-enable-candidate-doc-preview t)
;; (setq corfu-doc-mode t)
(corfu-doc-toggle)
(message "corfu-doc | Candidate-Doc-Show ~ ON")
)
)
)
(global-set-key (kbd "C-x p") 'lsp-bridge/toggle-doc-preview)
哇哦~太厉害啦!!!
我还以为你不做了呢,笑
期待全新的前端框架,这样可以直接把 Corfu 给替换了
新的补全框架相对于 company-mode 和 corfu 主要有几点不同:
- 完全对接 lsp-bridge 的异步架构设计,由 lsp-bridge 来控制什么时候显示还是隐藏,相对于从 capf 那边绕一下,更加稳定
- 更少闪烁,现在 company/corfu 的设计都是先插入候选词以后,再由 capf :exit-function 回调函数删除以后再展开,用户就会看到非常奇怪的字符闪烁,capf对于 lsp 协议非常不友好,正确的做法是前端按照 lsp-bridge 要求,一次插入或展开候选词就不会有闪烁
- 像素级别对齐,company/corfu 都用 all-the-icons 来绘制,所以会导致要不是菜单大了下面和右边有空隙,要不就是菜单小了,最后一个候选词看不到, 新的补全框架用 svg 来绘制图标,除开图标像素对齐,还会一并解决菜单大小计算不准确的问题
- 更高性能,补全菜单支持多个后端过滤,但是前端只绘制10条,保证不管有多少候选词,补全菜单的渲染性能最好的
- 更少代码,逃脱 capf 的束缚,前端直接和 lsp-bridge 函数对接,更少的代码也更容易维护
我看到你已经推送更新了。
现在已经可以使用了吗?
这样 posframe 这个依赖应该也可以去掉了吧?
还不能用,还有很多设计没有实现,可以用了我会和大家说的。
posframe 的依赖也是可以去掉的。
还是建议能复用的尽量复用,否则容易出现生态割裂,对同时使用corfu 与lsp-bridge中集成的UI的人,不太友好。 比如cape 中 补全文件名、补全symbol 的一些功能还是挺好用的,
如果能复用我肯定复用, lsp-bridge 的机制不适合 capf ,文件名和symbol的功能我会做。
如果还基于现在的逻辑做,只会bug越来越多,我的时间也有限,不是很难维护,我不会给自己找事的。
cape自带补全的Dabbrev还是很有用的,对于动态语言,很多时候类的属性是没办法靠lsp补全的,或者干脆就是字典里的键之类的,这种补全就得靠daabrev根据code的上下文来。
建议把补全的前端剥离出来,也方便大家给前端贡献各种各样的后端。毕竟只靠LSP的补全还是不够用。
那可以同时用吗?还是说company/corfu跟这个新框架只能同时开一个
不能同时用,因为每个前端都会监听 pre-command-hook 和 post-command-hook, 那会打架,只有不同 mode 可以用各自的前端。
新的前端框架出来后,我会照顾 elisp symbol、dabbrev和English word的需求的。
再说了,等大家真正体验了新的前端的速度和功能后,就不会怀恋 company/corfu 了。
一山不容二虎。 哈哈哈