manateelazycat / lsp-bridge

A blazingly fast LSP client for Emacs
GNU General Public License v3.0
1.43k stars 208 forks source link

[bug] acm-quick-access-modifier didn't recognize meta #497

Closed suliveevil closed 1 year ago

suliveevil commented 1 year ago

Warning M-3 is undefined, while other config is just fine.

(use-package lsp-bridge
  :after (yasnippet)
  ;; :bind
  :hook (prog-mode . lsp-bridge-mode)
  :config
  (keymap-set lsp-bridge-mode-map "H-;" 'lsp-bridge-toggle-sdcv-helper)
  (keymap-set lsp-bridge-mode-map "TAB" 'acm-select-next)
  (keymap-set lsp-bridge-mode-map "S-TAB" 'acm-select-prev)
  (keymap-set lsp-bridge-mode-map "<backtab>" 'acm-select-prev)
  (keymap-set lsp-bridge-mode-map "ESC" 'acm-hide )
  (setq acm-quick-access-modifier 'meta)
  (setq acm-enable-quick-access t)
  (setq lsp-bridge-enable-mode-line nil)
  (setq lsp-bridge-use-wenls-in-org-mode t)
  ;; (global-lsp-bridge-mode)
  (add-to-list 'lsp-bridge-org-babel-lang-list "emacs-lisp")
  (add-to-list 'lsp-bridge-org-babel-lang-list "shell")
  )
M-3
suliveevil commented 1 year ago

It also breaks M-x and RET.

suliveevil commented 1 year ago

lsp-bridge-mode-map should be temporary(disappear when acm hide), but it is not.

  (keymap-set lsp-bridge-mode-map "H-;" 'lsp-bridge-toggle-sdcv-helper)
  (keymap-set lsp-bridge-mode-map "TAB" 'acm-select-next)
  (keymap-set lsp-bridge-mode-map "<backtab>" 'acm-select-prev)
  (keymap-set lsp-bridge-mode-map "SPC" 'acm-insert-common)
  (keymap-set lsp-bridge-mode-map "RET" 'acm-complete)
  (keymap-set lsp-bridge-mode-map "ESC" 'acm-hide )

This will break normal TAB SPC RET after acm-hide.

suliveevil commented 1 year ago

When I setup this

(use-package lsp-bridge
  :after (yasnippet)
  :hook (prog-mode . lsp-bridge-mode)
  :config
  (setq acm-enable-quick-access t)
  (setq lsp-bridge-enable-mode-line nil)
  (setq lsp-bridge-use-wenls-in-org-mode t)
  (add-to-list 'lsp-bridge-org-babel-lang-list "emacs-lisp")
  (add-to-list 'lsp-bridge-org-babel-lang-list "shell")
  )

M-3 is misfunctioned to C-u 3.

M-number
manateelazycat commented 1 year ago

第一, 我这边测试 M-3 没有问题 第二, 你要看看 macOS 的 meta 是 Alt 键吗? 第三, 请用 emacs -Q 来反馈问题, keymap-set 这些大概率是你自己插件或配置的问题, 请自己排查, 我只接受 emacs -Q 能够重现的 bug

suliveevil commented 1 year ago

抱歉,是我反馈不严谨了。

没有用 emacs -Q,不知道 /Applications/Emacs.app/Contents/MacOS/emacs --init-directory="~/.config/debug" 能不能等同于 emacs -Q

用最小配置测试了几十遍,还是不能确定问题的根源,不知道是不是 native compilation 的问题。

测试过程:

  1. 使用 Alfred 运行脚本 emacs --init-directory="~/.config/debug"
  2. 打开 Emacs,在欢迎界面 C-x C-q 取消只读状态
  3. M-x emacs-lisp-mode
  4. 输入(require
  5. 使用 C-n C-p TAB SPC RET 分别测试有候选框和无候选框下的功能。

最终只能确定设置 acm 有关 keymap 任意一项都会导致在无候选框时按键常规功能失效。

能力有限,我就先放弃改键了。

;; (keymap-set lsp-bridge-mode-map "TAB" 'acm-select-next)
;; (keymap-set lsp-bridge-mode-map "<backtab>" 'acm-select-prev)
;; (keymap-set lsp-bridge-mode-map "SPC" 'acm-insert-common) ; 导致无法输入空格
;; (keymap-set lsp-bridge-mode-map "RET" 'acm-complete) ;; 导致无法输入换行符
;; (keymap-set lsp-bridge-mode-map "ESC" 'acm-hide )
;; (setq acm-enable-quick-access t)      ;; 导致无法使用 Meta 组合键
;; (setq acm-quick-access-modifier 'meta) ;; 导致无法使用 Meta 组合键

最小配置

early-init.el 是空的,所有配置都在 init.el 里

(package-initialize)

(setq mac-option-modifier 'meta
      mac-right-command-modifier 'hyper
      )

( add-to-list 'load-path "~/.config/debug/lib/lsp-bridge/")
(require 'yasnippet)
(yas-global-mode 1)
(require 'lsp-bridge)
(global-lsp-bridge-mode)

(setq lsp-bridge-enable-mode-line nil)

(keymap-set lsp-bridge-mode-map "H-;" 'lsp-bridge-toggle-sdcv-helper)
(keymap-set lsp-bridge-mode-map "TAB" 'acm-select-next)
(keymap-set lsp-bridge-mode-map "<backtab>" 'acm-select-prev)
(keymap-set lsp-bridge-mode-map "ESC" 'acm-hide )
;; (keymap-set lsp-bridge-mode-map "SPC" 'acm-insert-common) ; 导致无法输入空格
;; (keymap-set lsp-bridge-mode-map "RET" 'acm-complete) ;; 导致无法输入换行符
;; (setq acm-enable-quick-access t)      ;; 导致无法使用 Meta 组合键
;; (setq acm-quick-access-modifier 'meta) ;; 导致无法使用 Meta 组合键

~/.config/debug

tree
.
├── auto-save-list
├── divide
│   └── init.el
├── early-init.el
├── eln-cache
│   └── 30_0_50-eddc38b6
│       ├── auth-source-49df7eef-5f9f1f33.eln
│       ├── byte-opt-9c5f25f5-e9c39fdd.eln
│       ├── bytecomp-12882072-18e0ca75.eln
│       ├── cl-lib-8b938900-091ba014.eln
│       ├── cl-macs-7ae82f81-1698466d.eln
│       ├── cl-seq-f464c4e2-5f2e2b69.eln
│       ├── eieio-0db8d1d4-eee3eae9.eln
│       ├── eieio-core-63c05904-7d08efc3.eln
│       ├── generate-lisp-file-20e31f41-8ca1f9d3.eln
│       ├── gv-e0cf7478-2848f41e.eln
│       ├── help-mode-d4dbae3d-8359eb28.eln
│       ├── json-a90a1eab-a324d5a3.eln
│       ├── mailcap-a1205653-830d5d57.eln
│       ├── map-5d7b616a-a49695ac.eln
│       ├── password-cache-187e4eec-01cf807d.eln
│       ├── subr--trampoline-72656e616d652d66696c65_rename_file_0.eln
│       ├── subr-x-02dfef32-1fdbddc8.eln
│       ├── url-38944b26-fc3efcbc44E6Ws.eln.tmp
│       ├── url-cookie-02b28750-43a16a0b.eln
│       ├── url-domsuf-beabcbfe-f27bd1b2.eln
│       ├── url-expand-cf7ffc4e-d906363b.eln
│       ├── url-handlers-8b35c993-e36982de.eln
│       ├── url-history-a9b2f6e8-3212054d.eln
│       ├── url-methods-08bf763a-6102fe8b.eln
│       ├── url-parse-ee297c9b-4da42516.eln
│       ├── url-privacy-7df6b777-dc416da4.eln
│       ├── url-proxy-fc0751f0-599d5d23.eln
│       ├── url-util-28122a93-0af885fe.eln
│       └── url-vars-04b97511-6665993a.eln
├── elpa
│   ├── archives
│   │   ├── gnu
│   │   │   └── archive-contents
│   │   └── nongnu
│   │       └── archive-contents
│   ├── markdown-mode-20230102.9
│   │   ├── markdown-mode-autoloads.el
│   │   ├── markdown-mode-pkg.el
│   │   ├── markdown-mode.el
│   │   └── markdown-mode.elc
│   ├── posframe-20221220.544
│   │   ├── posframe-autoloads.el
│   │   ├── posframe-benchmark.el
│   │   ├── posframe-benchmark.elc
│   │   ├── posframe-pkg.el
│   │   ├── posframe.el
│   │   └── posframe.elc
│   └── yasnippet-20200604.246
│       ├── yasnippet-autoloads.el
│       ├── yasnippet-pkg.el
│       ├── yasnippet.el
│       └── yasnippet.elc
├── init.el
├── lib
│   └── lsp-bridge
│       ├── CODE_OF_CONDUCT.md
│       ├── LICENSE
│       ├── README.md
│       ├── README.zh-CN.md
│       ├── acm
│       │   ├── acm-backend-citre.el
│       │   ├── acm-backend-elisp.el
│       │   ├── acm-backend-lsp.el
│       │   ├── acm-backend-path.el
│       │   ├── acm-backend-search-file-words.el
│       │   ├── acm-backend-search-sdcv-words.el
│       │   ├── acm-backend-tabnine.el
│       │   ├── acm-backend-tailwind.el
│       │   ├── acm-backend-telega.el
│       │   ├── acm-backend-tempel.el
│       │   ├── acm-backend-yas.el
│       │   ├── acm-frame.el
│       │   ├── acm-icon.el
│       │   ├── acm-quick-access.el
│       │   ├── acm.el
│       │   └── icons
│       │       ├── material_account-key.svg
│       │       ├── material_all-inclusive.svg
│       │       ├── material_alpha-c-circle-outline.svg
│       │       ├── material_alpha-m-circle.svg
│       │       ├── material_alpha-t-box-outline.svg
│       │       ├── material_alpha-u-box-outline.svg
│       │       ├── material_apple-keyboard-option.svg
│       │       ├── material_application-variable.svg
│       │       ├── material_arrow-split-horizontal.svg
│       │       ├── material_arrow-split-vertical.svg
│       │       ├── material_at.svg
│       │       ├── material_bell.svg
│       │       ├── material_blinds-open.svg
│       │       ├── material_bookmark-box-multiple-outline.svg
│       │       ├── material_bookmark-box-multiple.svg
│       │       ├── material_cellphone-key.svg
│       │       ├── material_chart-timeline-variant.svg
│       │       ├── material_city-variant-outline.svg
│       │       ├── material_code-array.svg
│       │       ├── material_code-string.svg
│       │       ├── material_contain.svg
│       │       ├── material_creation.svg
│       │       ├── material_cube.svg
│       │       ├── material_currency-sign.svg
│       │       ├── material_database.svg
│       │       ├── material_expand-all-outline.svg
│       │       ├── material_feature-search.svg
│       │       ├── material_file-document-multiple.svg
│       │       ├── material_file-find-outline.svg
│       │       ├── material_file-outline.svg
│       │       ├── material_filter-outline.svg
│       │       ├── material_filter.svg
│       │       ├── material_folder.svg
│       │       ├── material_format-align-center.svg
│       │       ├── material_format-align-right.svg
│       │       ├── material_format-list-bulleted-type.svg
│       │       ├── material_format-text.svg
│       │       ├── material_function-variant.svg
│       │       ├── material_function.svg
│       │       ├── material_google-circles-extended.svg
│       │       ├── material_guitar-pick.svg
│       │       ├── material_label-outline.svg
│       │       ├── material_null.svg
│       │       ├── material_numeric-1.svg
│       │       ├── material_package.svg
│       │       ├── material_palette-swatch.svg
│       │       ├── material_palette.svg
│       │       ├── material_pan.svg
│       │       ├── material_plus-circle-multiple-outline.svg
│       │       ├── material_plus-circle-outline.svg
│       │       ├── material_shape-square-plus.svg
│       │       ├── material_shape-square-rounded-plus.svg
│       │       ├── material_share.svg
│       │       ├── material_sim-outline.svg
│       │       ├── material_star-check.svg
│       │       ├── material_steering.svg
│       │       ├── material_tag.svg
│       │       ├── material_text-recognition.svg
│       │       ├── material_tools.svg
│       │       ├── material_translate.svg
│       │       ├── material_variable.svg
│       │       ├── material_vector-square-plus.svg
│       │       ├── material_view-module.svg
│       │       └── material_wrench.svg
│       ├── core
│       │   ├── __pycache__
│       │   │   ├── fileaction.cpython-310.pyc
│       │   │   ├── lspserver.cpython-310.pyc
│       │   │   ├── mergedeep.cpython-310.pyc
│       │   │   ├── pystardict.cpython-310.pyc
│       │   │   ├── search_file_words.cpython-310.pyc
│       │   │   ├── search_list.cpython-310.pyc
│       │   │   ├── search_sdcv_words.cpython-310.pyc
│       │   │   ├── search_tailwindcss_keywords.cpython-310.pyc
│       │   │   ├── tabnine.cpython-310.pyc
│       │   │   └── utils.cpython-310.pyc
│       │   ├── fileaction.py
│       │   ├── handler
│       │   │   ├── __init__.py
│       │   │   ├── __pycache__
│       │   │   │   ├── __init__.cpython-310.pyc
│       │   │   │   ├── call_hierarchy.cpython-310.pyc
│       │   │   │   ├── code_action.cpython-310.pyc
│       │   │   │   ├── completion.cpython-310.pyc
│       │   │   │   ├── completion_item.cpython-310.pyc
│       │   │   │   ├── deno_uri_resolver.cpython-310.pyc
│       │   │   │   ├── execute_command.cpython-310.pyc
│       │   │   │   ├── find_define.cpython-310.pyc
│       │   │   │   ├── find_implementation.cpython-310.pyc
│       │   │   │   ├── find_references.cpython-310.pyc
│       │   │   │   ├── formatting.cpython-310.pyc
│       │   │   │   ├── hover.cpython-310.pyc
│       │   │   │   ├── jdt_uri_resolver.cpython-310.pyc
│       │   │   │   ├── prepare_rename.cpython-310.pyc
│       │   │   │   ├── rename.cpython-310.pyc
│       │   │   │   ├── signature_help.cpython-310.pyc
│       │   │   │   └── workspace_symbol.cpython-310.pyc
│       │   │   ├── call_hierarchy.py
│       │   │   ├── code_action.py
│       │   │   ├── completion.py
│       │   │   ├── completion_item.py
│       │   │   ├── deno_uri_resolver.py
│       │   │   ├── execute_command.py
│       │   │   ├── find_define.py
│       │   │   ├── find_implementation.py
│       │   │   ├── find_references.py
│       │   │   ├── formatting.py
│       │   │   ├── hover.py
│       │   │   ├── jdt_uri_resolver.py
│       │   │   ├── prepare_rename.py
│       │   │   ├── rename.py
│       │   │   ├── signature_help.py
│       │   │   └── workspace_symbol.py
│       │   ├── lspserver.py
│       │   ├── mergedeep.py
│       │   ├── pystardict.py
│       │   ├── search_file_words.py
│       │   ├── search_list.py
│       │   ├── search_sdcv_words.py
│       │   ├── search_tailwindcss_keywords.py
│       │   ├── tabnine.py
│       │   ├── tailwind_css_keyword.txt
│       │   └── utils.py
│       ├── framework.png
│       ├── langserver
│       │   ├── ansible-language-server.json
│       │   ├── bash-language-server.json
│       │   ├── ccls.json
│       │   ├── clangd.json
│       │   ├── clojure-lsp.json
│       │   ├── cmake-language-server.json
│       │   ├── dart-analysis-server.json
│       │   ├── deno.json
│       │   ├── digestif.json
│       │   ├── docker-langserver.json
│       │   ├── elixirLS.json
│       │   ├── elixirLS_windows.json
│       │   ├── elm-language-server.json
│       │   ├── emmet-ls-css.json
│       │   ├── emmet-ls.json
│       │   ├── erlang-ls.json
│       │   ├── fortls.json
│       │   ├── gopls.json
│       │   ├── graphql-lsp.json
│       │   ├── groovy-language-server.json
│       │   ├── hls.json
│       │   ├── intelephense.json
│       │   ├── javascript.json
│       │   ├── jdtls.json
│       │   ├── jedi.json
│       │   ├── metals.json
│       │   ├── ocamllsp.json
│       │   ├── omnisharp-dotnet.json
│       │   ├── omnisharp-dotnet_windows.json
│       │   ├── omnisharp-mono.json
│       │   ├── omnisharp-mono_windows.json
│       │   ├── phpactor.json
│       │   ├── pylsp.json
│       │   ├── pyright-background-analysis.json
│       │   ├── pyright.json
│       │   ├── python-ms.json
│       │   ├── rlanguageserver.json
│       │   ├── rnix-lsp.json
│       │   ├── rust-analyzer.json
│       │   ├── serve-d.json
│       │   ├── solargraph.json
│       │   ├── sumneko.json
│       │   ├── swift-sourcekit.json
│       │   ├── texlab.json
│       │   ├── typescript.json
│       │   ├── typescriptreact.json
│       │   ├── volar.json
│       │   ├── volar_darwin.json
│       │   ├── volar_windows.json
│       │   ├── vscode-css-language-server.json
│       │   ├── vscode-eslint-language-server.json
│       │   ├── vscode-html-language-server.json
│       │   ├── vscode-json-language-server.json
│       │   ├── wen.json
│       │   ├── wxml-language-server.json
│       │   ├── yaml-language-server.json
│       │   └── zls.json
│       ├── lsp-bridge-call-hierarchy.el
│       ├── lsp-bridge-code-action.el
│       ├── lsp-bridge-diagnostic.el
│       ├── lsp-bridge-epc.el
│       ├── lsp-bridge-jdtls.el
│       ├── lsp-bridge-lsp-installer.el
│       ├── lsp-bridge-ref.el
│       ├── lsp-bridge.el
│       ├── lsp_bridge.py
│       ├── multiserver
│       │   ├── css_emmet.json
│       │   ├── html_emmet.json
│       │   └── volar_emmet.json
│       ├── resources
│       │   ├── kdic-ec-11w.dict.dz
│       │   ├── kdic-ec-11w.idx
│       │   ├── kdic-ec-11w.ifo
│       │   ├── pinyin.dict.dz
│       │   ├── pinyin.idx
│       │   └── pinyin.ifo
│       ├── screenshot.png
│       └── test
│           ├── __init__.py
│           ├── common.py
│           ├── lsp-bridge-test.el
│           ├── test.py
│           ├── test_completion.py
│           └── test_find_define.py
└── snippets

25 directories, 269 files
suliveevil commented 1 year ago

定位到问题所在了,(keymap-set acm-mode-map "ESC" 'acm-hide) 会导致以下配置失效。

(require 'yasnippet)
(yas-global-mode 1)
(require 'lsp-bridge)
(setq lsp-bridge-enable-mode-line nil)
(setq lsp-bridge-use-ds-pinyin-in-org-mode t)
;; (setq lsp-bridge-use-wenls-in-org-mode t)
(setq acm-enable-quick-access t)
(setq acm-quick-access-modifier 'meta)

(keymap-unset acm-mode-map "RET")
(keymap-unset acm-mode-map "SPC")
(keymap-unset acm-mode-map "TAB")
(keymap-unset acm-mode-map "<tab>")
(keymap-set acm-mode-map "SPC"       'acm-complete)
(keymap-set acm-mode-map "TAB"       'acm-select-next)
(keymap-set acm-mode-map "<tab>"     'acm-select-next)

(keymap-set acm-mode-map "<backtab>" 'acm-select-prev)
(keymap-set acm-mode-map "C-j"       'acm-insert-common)

(keymap-set acm-mode-map "H-j"       'acm-select-next)
(keymap-set acm-mode-map "H-k"       'acm-select-prev)

(global-lsp-bridge-mode)