Отключить режим ido для определенных команд?

Я использую ido-mode в течение нескольких месяцев, когда ido -where включен, и в целом доволен им. Есть одна вещь, которую я хотел бы изменить, хотя. Когда я набираю Cu Mx shell, чтобы создать новый буфер оболочки с определенным именем, ido предлагает мне список завершения всех моих открытых буферов. Если я выберу один, в этом буфере запускается новая оболочка, и она переводится в режим оболочки, независимо от того, что она содержит. Трудно представить полезный вариант использования для этого.

Есть ли способ отключить режим ido только для команды оболочки? (Конечно, как и любые другие подобные команды, с которыми я могу столкнуться в будущем).

1 ответ

Решение

Хех, оказывается, вы получите тот же выбор завершения, независимо от того, есть ли у вас ido-everywhere включен.

Там нет встроенного способа делать то, что вы хотите. ido-mode только предоставляет крючки для вас, чтобы иметь возможность переопределить независимо от того, find-file поведение переходит ido или нет. read-buffer в настоящее время всегда отменяется ido-everywhere,

К счастью, маленький Emacs-лисп может получить то, что вы хотите:

(put 'shell 'ido 'ignore)
(defadvice ido-read-buffer (around ido-read-buffer-possibly-ignore activate)
  "Check to see if use wanted to avoid using ido"
  (if (eq (get this-command 'ido) 'ignore)
      (let ((read-buffer-function nil))
        (run-hook-with-args 'ido-before-fallback-functions 'read-buffer)
        (setq ad-return-value (apply 'read-buffer (ad-get-args 0))))
    ad-do-it))

И для любой другой команды вы не хотите следовать ido-everywhere Выбор буфера можно настроить, просто добавив новое выражение в ваш.emacs:

(put 'other-command-i-want-untouched 'ido 'ignore)
Другие вопросы по тегам