1

我一直在尝试对 ido-mode 进行一些更改以使其更有用。我一直在尝试做的一件事是重新映射我在ido-find-file. 主要的是我想用它C-d来调用ido-enter-dired函数,而不是按C-f+C-d来做同样的事情。

到目前为止,这是我的 ido 设置:

(defun ali/ido ()
  "My configuration for ido-mode"
  (require 'ido)
  (setq ido-create-new-buffer 'always)

  ;; Making sure that ido works in M-x
  (global-set-key
      "\M-x"
      (lambda ()
      (interactive)
      (call-interactively
          (intern
          (ido-completing-read
          "M-x "
          (all-completions "" obarray 'commandp))))))

  ;; Ido keybindings
  (defun ido-keybindings ()
    (define-key ido-completion-map (kbd "C-d") 'ido-enter-dired))


  (add-hook 'ido-setup-hook 'ido-keybindings)

  (ido-everywhere t)
  (ido-mode 1))

但是,每当我尝试使用时C-dido-find-file总是会收到此错误:

Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer")
4

1 回答 1

1

在激活 minibuffer 的情况下调用时,您的命令使用递归 minibuffer 来读取使用ido-completing-read.

将其用作您的命令:

(lambda ()
  (interactive)
  (let ((enable-recursive-minibuffers  t)) ; <=====================
    (call-interactively
     (intern
      (ido-completing-read
       "M-x "
       (all-completions "" obarray 'commandp))))))

C-h v enable-recursive-minibuffers告诉我们:

enable-recursive-minibuffers是 中定义的变量C source code

它的值为nil

文档:

Non-nil表示在 minibuffer 中允许 minibuffer 命令

只要 minibuffer 窗口处于活动状态,此变量就会产生影响。另请参阅minibuffer-depth-indicate-mode,如果此变量不是 ,这可能会很方便nil

您可以自定义此变量。

于 2021-05-20T22:45:48.083 回答