Я часто использую ido для автозаполнения и tramp для доступа к удаленному серверу через ssh. Мой .emacs
включает следующие строки:
(require 'tramp)
(setq tramp-default-method "ssh")
(ido-mode 1)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
Я хочу отключить завершение Ido, когда просматриваю содержимое удаленного сервера. Обратите внимание, что переменная ido-enable-tramp-completion
не имеет ничего общего с моей проблемой. Рассмотрим строку /[email protected]#1234:/var/www/file.txt
. Мне нужен Ido не, чтобы вычесть часть после двоеточия (путь удаленного файла), меня не волнует часть до двоеточия. Я использую ssh, и Ido заставляет Emacs задерживаться на несколько секунд каждый раз, когда я запускаю ido-find-file
, а когда время ожидания ssh истекло, Tramp пытается повторно подключиться, запрашивает у меня пароль и так далее. Такое поведение нежелательно.
Версия Emacs - 24.0.94.1
Изменить (20.03.12): после контакта с автором Идо я попытался изменить ido-file-name-all-completions-1
на следующее:
(defun ido-file-name-all-completions-1 (dir)
(cond
((ido-nonreadable-directory-p dir) '())
;; do not check (ido-directory-too-big-p dir) here.
;; Caller must have done that if necessary.
((and ido-enable-tramp-completion
(or (fboundp 'tramp-completion-mode-p)
(require 'tramp nil t))
(string-match "\\`/[^/]+[:@]\\'" dir))
;; TRAMP RELATED CODE DELETED
nil)
(t
(file-name-all-completions "" dir))))
Безуспешно. Затем я изменил регулярное выражение на
"\\`/[^/]+[:@]"
и это сработало - Идо был отключен, когда минибуфер содержал это совпадение. Однако, поскольку Ido не мог видеть файлы на удаленном сервере, он начал вызывать ido-make-merged-file-list
для поиска файлов в других каталогах каждый раз, когда я что-то ввожу. Это сделало работу с Ido на удаленных серверах еще более сложной.
Я также пробовал настроить переменные ido-slow-ftp-hosts
и ido-slow-ftp-host-regexps
на /[email protected]#1234
, не помогло.