欢迎使用 Nox -- 轻量级 LSP 客户端

那我有空先自己研究一下。多谢了

我正在使用Nox解决我的c++的问题。 但是一直在猜我在用ccls,我其实在用clangd, 如何解决?

[nox] I guess you want to run `ccls', but I can't find `ccls' in PATH!
Enter program to execute (or <host>:<port>):

@manateelazycat

加上这条就可以了,默认是用ccls

                    (add-to-list 'nox-server-programs
                                 '((c++-mode c-mode) "clangd"))

感谢,连接上了,复制你的代码发现到我的emacs中 " 变成了 全角字符, - 也是变得很奇怪。

刚才是手机操作的,不好意思。已经更新了

thanks.

问个跑题的…用上nox之后ccls的彩虹高亮应该怎么调出来,默认用的貌似是正常高亮。

当_backend是nox的时候,找不到合适的identifier image

image

(cl-defgeneric xref-backend-identifier-at-point (_backend)
  "Return the relevant identifier at point.

The return value must be a string, or nil meaning no identifier
at point found.

If it's hard to determine the identifier precisely (e.g., because
it's a method call on unknown type), the implementation can
return a simple string (such as symbol at point) marked with a
special text property which e.g. `xref-backend-definitions' would
recognize and then delegate the work to an external process."
  (let ((thing (thing-at-point 'symbol)))
    (and thing (substring-no-properties thing))))

加了个这个,看看doom-emacs接不接受

doom emacs合并了nox和elpy的检测

现在可以了

最近的 haskell-ide-engine不怎么更新了,开发基本都转到了haskell-language-server
为了使用最新的ghc 8.10.2 只能转到新的lsp了。
经过测试,nox 只要添加下面的配置就能成功连接haskell-language-server

                    (add-to-list 'nox-server-programs
                                 '(haskell-mode . ("haskell-language-server-wrapper" "--lsp")))

最近给 nox 的 show-doc 做了一点小小的优化,包括在 TUI 下的可用性。

把 signature 和 document 分开怎么样,最近的使用中发现有些位置会没有办法正确的判断是应该显示哪种信息。

我自己在自己的 fork 里面实现了这个功能(两个命令都是手工调用的),但是不知道大家的意见。

我自己更倾向的方式是 signature 可以自动,而 document 手动触发。 目前还在实验怎么处理自动弹框比较合理。

nox比lsp快多了。能够支持rust-analyzer吗?

好像可以的。

不行啊。提示找不到rls。 简单地把rls改为rust-analyzer,则提示:[nox] (warning) Server tried to register unsupported capability `textDocument/didSave’

eglot也是提示这个的 nox是fork的eglot,,,但是这个警告不影响一般使用 只是有些功能不能用,,

想在nox里使用eclipse.jdt.补全java,但设置跟lsp-java不太一样,在nox.el里貌似没留有设置eclipse.jdt server的路径设置: 只在nox.el里看到有个函数


(defun nox--eclipse-jdt-contact (interactive)
  "Return a contact for connecting to eclipse.jdt.ls server, as a cons cell.
If INTERACTIVE, prompt user for details."

里面有

(let* ((classpath (or (getenv "CLASSPATH") ":"))
           (cp-jar (cl-find-if #'is-the-jar (split-string classpath ":")))
           (jar cp-jar)

是要把eclipse.jdt server 的路径设置成CLASSPATH变量才行吗? 看不太懂,设置了也不行,报错,用的是最新版0.9的jdt server

Error in post-command-hook ((closure ((--cl-maybe-connect-- closure #1 nil (progn (remove-hook 'post-command-hook --cl-maybe-connect-- nil) (let ((G12 buffer)) (if (buffer-live-p G12) (save-current-buffer (set-buffer G12) (if nox--managed-mode nil (apply #'nox--connect (nox--guess-contact)))))))) (buffer . #<buffer test2.java>) nox--managed-mode t) nil (progn (remove-hook 'post-command-hook --cl-maybe-connect-- nil) (let ((G12 buffer)) (if (buffer-live-p G12) (save-current-buffer (set-buffer G12) (if nox--managed-mode nil (apply #'nox--connect (nox--guess-contact))))))))): (error "Could not find eclipse.jdt.ls jar in CLASSPATH")

Nox我目前只在Python项目中用用,可以提一下issue,看看社区有没有人修复。

可以参考eglot,zamansky的博客提到过

defconst my-eclipse-jdt-home "/home/zamansky/.emacs.d/.cache/lsp/eclipse.jdt.ls/plugins/org.eclipse.equinox.launcher_1.5.800.v20200727-1323.jar")
(defun my-eglot-eclipse-jdt-contact (interactive)
  "Contact with the jdt server input INTERACTIVE."
  (let ((cp (getenv "CLASSPATH")))
    (setenv "CLASSPATH" (concat cp ":" my-eclipse-jdt-home))
    (unwind-protect (eglot--eclipse-jdt-contact nil)
      (setenv "CLASSPATH" cp))))
(setcdr (assq 'java-mode eglot-server-programs) #'my-eglot-eclipse-jdt-contact)
(add-hook 'java-mode-hook 'eglot-ensure)

印象中 nox 是不会处理 lsp 的语法检查的吧,但目前 java 比较好用的 checker 应该只有 lsp,所以会比较难用上。

谢谢,自己试着改了一下,无奈水平不够,没有成功