lsp-bridge -- 速度最快的语法补全插件

对比了下lsp-ivy,发现查询workspace-symbol 时,需要指定要查询的 symbol

比如 调用(lsp-bridge-call-file-api "workspace_symbol" "LspBridge"),能正常返回结果

image

再根据返回结果的类型加上face 和模糊查询 就很完美了hhh

gopls 这里也没有 symbol 返回

1 个赞

加了查询字符串的功能, 类型和模糊查询欢迎PR

2 个赞

pr提交啦,显示效果和lsp-ivy的一样

2 个赞

感谢大佬补丁,赞呀 :+1:

退格和kill-word时有办法禁止激活补全吗?

1 个赞

确实,在kill-word和退格的时候,按的太快就会卡

C-h k 键入 C-d 显示是delete-char

C-d runs the command delete-char (found in global-map), which is an
interactive built-in function in ‘C source code’.

It is bound to C-d.

(delete-char N &optional KILLFLAG)

(add-to-list 'lsp-bridge-completion-stop-commands 'delete-char) 还是会激活补全

用 “delete-char”

必须得是字符串才行

:joy: 感谢 紫薯布丁

我谢谢你才对,要不是你提。我都不知道还能这样解决。 不过最近lsp-bridge的性能很好了,用不用这个差别不大。

新问题来了。

(defun wk/acm-insert-common-or-complete-1 ()
  "Insert common prefix of menu.11"
  (interactive)
  (when (acm-frame-visible-p acm-frame)
    (let* ((common-string "")
           (items (mapcar (lambda (v) (plist-get v :label)) acm-menu-candidates))
           (item-min-length (cl-reduce #'min (mapcar #'string-width items)))
           (input-prefix (acm-get-input-prefix)))
      (dolist (index (number-sequence 0 (1- item-min-length)))
        (let* ((char-list (mapcar (lambda (i) (substring i index (1+ index))) items))
               (first-char (cl-first char-list)))
          (when (cl-every (lambda (x) (string-equal x first-char)) char-list)
            (setq common-string (concat common-string first-char)))))

      (if (and (> (length common-string) 0)
               (> (length common-string) (length input-prefix)))
          (insert (substring common-string (length (acm-get-input-prefix))))
;; 上面是拷贝过来的源码,不用看,主要是下面的修改
         ;; 注释掉下面这一行,改成了如果没有可用的前缀,就直接使用第一条补全
         ;; (message "No common string found")
;; 下面的progn时刚加的
        (progn
          (wk/acm-complete-1)
          (acm-hide))
        )
)))

新问题是我把这个 wk/acm-insert-common-or-complete-1绑定了快捷键并且加入了 acm-continue-commands,这时候怎么实现

  1. 有前缀补全了前缀时 不隐藏补全窗口
  2. 没有前缀使用了 列表第一项补全后 不显示补全窗口

现在上面的1 是可以的,2怎么实现呢,

建议重写一个命令,比如

(defun acm-insert-common-or-complete()
      "Insert common prefix of menu or complete."
      (interactive)
      (let ((inhibit-message t)
            (num (length (acm-get-input-prefix))))
        (acm-insert-common)
        (when (= num (length (acm-get-input-prefix)))
          (acm-complete))))
1 个赞

升级了下系统:macOS Ventura 13.0, icon 变成方块:

不影响使用,还是报告一下,同时请教大佬们,可能的排查方向。 (Emacs 和 Ruby 是 Full Disk Access. Emacs 是 29plus 安装带支持svg显示) 谢谢大家 ~

我这升级到 ventura 以后。29的svg tag 跟你一样有问题

28plus也有同样的问题,不过不影响使用

ventura出了不少bug。reddit上还有人反馈升到ventura以后,pdf-tools的pdf-view-mode下,鼠标点击pdf所在的窗口就会导致emacs崩溃

写代码的时候经常会进行 git checkout 操作, 然后执行 revert-buffer 操作重新加载文件内容。

今天发现在 revert-buffer 执行的过程中, lsp-bridge 依然会发送LSP请求, 导致 revert-buffer 后, buffer 的内容会乱掉。

We use `lsp-bridge-revert-buffer-flag' var avoid lsp-bridge send chan… · manateelazycat/lsp-bridge@86ca73a · GitHub 这个补丁修复了 lsp-bridge 这个问题。

eaf-git 的用户在界面执行 checkout 操作后, eaf-git-checkout-files 会自动查找 checkout file 对应的 buffer 做 revert-buffer 操作。

magit用户可以参考 eaf-git 的实现 eaf-git/eaf-git.el at 47551e4bcad8ed0dd47cf95ec882a0960c9342e7 · emacs-eaf/eaf-git · GitHub