我测了 clangd 没问题,但是 pyright server 好像很快就不回复消息了。我再看看。
请教一下,capf 里面,如果返回类似 [(label, kind), (label, kind)] 的数据给 Emacs, lsp-bridge-completion-items 就不是纯粹的字符串列表了, corfu 怎么知道从里面找 label ?
提了一个 pr 解决图标,check 一下呢
原来是用的 text-property 来传递图标和备注呀。
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))))))
或者大佬你看怎么好看怎么来吧。现在还有点小问题会挤在一起
挤在一起好说呀,插入点空格, 哈哈哈哈。
现在是工程里面最后一个文件关闭后就退出 lsp server 进程,我嫌 lsp server 退太慢了,直接把他杀掉了, 哈哈哈哈。
你图标用的那个包呀?
坛里的这个。
集成吧,没问题。 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 代码要写对同时不要太耗费性能就行了。
没消息。我换了 pylsp (GitHub - python-lsp/python-lsp-server: Fork of the python-language-server project, maintained by the Spyder IDE team and the community) 是可以的,所以可能还是哪里选项的问题。
服务器 settings 参数一定要对,LSP 协议怪的很,参数不对,它不告诉你哪个参数有问题,反正就不理了。
开启了 orderless 和 corfu-history,现在 emacs 终于可以用完全不卡手的语义补全了,哈哈哈,感谢懒猫和大佬们。
注意, orderless flex match和 api 记忆功能,太赞了!
(custom-set-faces '(corfu-default ((t (:height 1.3)))))
这样可以把字体调大一点,也不用改默认的颜色,我看 corfu 作者默认还做了深浅模式适配。