Отключить режим ido для определенных команд? - PullRequest
7 голосов
/ 21 июля 2011

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

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

1 Ответ

5 голосов
/ 21 июля 2011

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

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

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

(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)
...