写了个函数再lsp补全激活时改变tab绑定的函数,但是不激活时候应该怎么还原tab的行为?

;; 补全时 tab插入公共前缀
(defun wk/lsp-bridge-tab()
  "ss"
  (interactive)
  (if (lsp-bridge-completion-ui-visible-p)
      (acm-insert-common)
    (indent-for-tab-command))
    )
(define-key global-map (kbd "<tab>") 'wk/lsp-bridge-tab)

在没有激活lsp时我让tab绑定这个(indent-for-tab-command),但是明显时不太对的,最起码我eshell里面的tab补全被干掉了,。,

绑定到 lsp-bridge-mode-map 就可以了

(define-key global-map (kbd "<tab>") 'indent-for-tab-command)
(define-key acm-mode-map (kbd "<tab>") 'acm-insert-common)

不需要写函数的

有时候绑定到acm-mode-map 也没用,这种情况下我是直接写个函数去 add-advice ,如果有lsp-bridge 弹窗就调用lsp-bridge的函数,否则就调用原来的函数

原来的函数是啥,我现在就是这个问题,在不同的majormode里绑定的不一样,所以我改了绑定之后不知道怎么调用原来绑定的东西。

不要用key binding,用 advice-add :around 可以拿到原来的函数。

C-h k TAB 可以查看原来的函数 下面是我的其中一处配置, 仅供参考

 (defun my/+org/return ()
    (when (and lsp-bridge-mode (or (acm-frame-visible-p acm-frame) (acm-frame-visible-p acm-doc-frame)))
      (acm-complete)
      t))

  (advice-add #'+org/return :before-until #'my/+org/return)