annotation 还需要处理一下,可以参考 eglot:
:annotation-function
(lambda (proxy)
(eglot--dbind ((CompletionItem) detail kind)
(get-text-property 0 'eglot--lsp-item proxy)
(let* ((detail (and (stringp detail)
(not (string= detail ""))
detail))
(annotation
(or detail
(cdr (assoc kind eglot--kind-names)))))
(when annotation
(concat " "
(propertize annotation
'face 'font-lock-function-name-face))))))
或者大佬你看怎么好看怎么来吧。现在还有点小问题会挤在一起
关闭 buffer 的时候 lsp-bridge 会有这个错,是进程已经被释放了吗?
现在是工程里面最后一个文件关闭后就退出 lsp server 进程,我嫌 lsp server 退太慢了,直接把他杀掉了, 哈哈哈哈。
@smallzhan 大佬,你这个好用,我直接集成到 lsp-bridge.el 里面,可以吗?
集成吧,没问题。 windows 下的 lsp-bridge 跑 pyright 好像有点问题, 好像是 initialize 之后就没回复了。
Cache action change_cursor, wait for file x:/WalkingPad/RPadDoctor/main.pyw to open it before executing.
--- Send request (1): initialize
{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"processId": 16996,
"rootPath": "X:/WalkingPad/RPadDoctor",
"clientInfo": {
"name": "emacs",
"version": "GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.17.6)\n of 2022-04-04"
},
"rootUri": "file:///X:/WalkingPad/RPadDoctor",
"capabilities": {},
"initializationOptions": {}
},
"id": 12452
}
--- Recv message: window/logMessage
{
"jsonrpc": "2.0",
"method": "window/logMessage",
"params": {
"type": 3,
"message": "Pyright language server 1.1.245 starting"
}
}
--- Recv message: window/logMessage
{
"jsonrpc": "2.0",
"method": "window/logMessage",
"params": {
"type": 3,
"message": "Server root directory: c:\\Users\\smallqiang\\AppData\\Roaming\\npm\\node_modules\\pyright/dist/"
}
}
之后就再也收不到消息了。send 倒是一直正常发。
(set-face-attribute 'corfu-default nil :height 200) 类似这样?没设过不太清楚
lsp-bridge-lang-server-list
可以支持多个 mode 对应一个服务吗,比如这样
((latex-mode Tex-latex-mode texmode context-mode texinfo-mode bibtex-mode) . "texlab")
而不用写成
(latex-mode . "texlab")
(Tex-latex-mode . "texlab")
...
可以呀,只要 lsp-bridge-get-lang-server 代码要写对同时不要太耗费性能就行了。
服务器 settings 参数一定要对,LSP 协议怪的很,参数不对,它不告诉你哪个参数有问题,反正就不理了。
开启了 orderless 和 corfu-history,现在 emacs 终于可以用完全不卡手的语义补全了,哈哈哈,感谢懒猫和大佬们。
注意, orderless flex match和 api 记忆功能,太赞了!
7 个赞
(custom-set-faces
'(corfu-default ((t (:height 1.3)))))
这样可以把字体调大一点,也不用改默认的颜色,我看 corfu 作者默认还做了深浅模式适配。
1 个赞
补全过程中 Lsp-bridge 经常崩溃
--- Recv message
ERROR:epc:ReturnError([Symbol('wrong-type-argument'), Symbol('char-or-string-p'), []])
--- Recv message
ERROR:epc:ReturnError([Symbol('args-out-of-range'), 0, 1])
还没发现问题在哪,改这两处可以改善但不能根治(所以就不交 pr 了)
另外 . 后面补全结果经常奇奇怪怪,感觉像是 items 还没更新过来
char-or-string-p 那个报错我在 windows 下见过,还挺频繁,好像是在 corfu–post-command 里面报的,但是没查到在哪。
Elisp端报错,导致 hook 挂了, Emacs 发现 hook 函数挂了就会自动从 hook 中移除函数,函数被移除以后,就没法向 lsp server 发送消息,最后就像没返回一样(虽然 python 进程还在)