2012-03-12 10 views
8

Io uso spesso l'ido per il completamento automatico e il tramp per accedere al server remoto tramite ssh. Il mio .emacs include le seguenti righe:Emacs: disabilita il completamento Ido in modalità Tramp

(require 'tramp) 
(setq tramp-default-method "ssh") 
(ido-mode 1) 
(setq ido-enable-flex-matching t) 
(setq ido-everywhere t) 

Voglio disattivare il completamento Ido, quando sto navigando contenuto del server remoto. Si noti che la variabile ido-enable-tramp-completion non ha nulla a che fare con il mio problema. Prendere in considerazione la riga /[email protected]#1234:/var/www/file.txt. Ho bisogno di Ido non per dedurre la parte dopo i due punti (percorso file remoto), non mi interessa la parte prima dei due punti. Io uso ssh e Ido fa in modo che Emacs resti in ritardo per qualche secondo ogni volta che corro ido-find-file e quando il timeout di ssh è finito, Tramp tenta di riconnettersi, mi chiede una password e così via. Questo comportamento non è desiderabile.

Emacs versione - 24.0.94.1

Edit (20.03.12): Dopo il contatto con Ido autore Ho provato a cambiare il ido-file-name-all-completions-1 al seguente:

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

Nessun successo. Ho quindi cambiato regex a

"\\`/[^/]+[:@]" 

e ha funzionato - Ido era disabilitato, quando minibuffer conteneva quella partita. Tuttavia, come Ido non poteva vedere i file su un server remoto, è iniziato a chiamare ido-make-merged-file-list per cercare i file in altre directory ogni volta che entro in qualcosa. Ciò ha reso ancora più difficile lavorare con Ido su server remoti.

Ho anche provato a impostare le variabili ido-slow-ftp-hosts e ido-slow-ftp-host-regexps a /[email protected]#1234, non ha aiutato.

risposta

8

Se si immette nuovamente C-x C-f, si disabilita temporaneamente l'ido-find e si torna al file di ricerca predefinito.

Per ulteriori informazioni C-h f ido-find-file RET

Per fare questo ogni volta ido trovato due punti, credo che si deve scrivere la propria funzione per questo.

+0

Se eseguo 'ido-find-file' due volte, questo errore viene generato in' * Backtrace * 'buffer -' Debugger inserito - Errore Lisp: (errore "Comando tentato di utilizzare il minibuffer mentre è in minibuffer") Debugger immesso - Errore Lisp: (errore "Il comando ha tentato di utilizzare il minibuffer mentre era in minibuffer") '. E dove dovrei scrivere questa funzione? –

+0

Non è possibile eseguire ido-find-file due volte. Il comando 'C-x C-f' non pranza il file di ricerca degli ido, ma si limita a trovare il file di ricerca. Non digitare di nuovo 'M-x ido-find-file RET'. Scrivi 'C-x C-f'. – mathk

+0

Vedo. Dove dovrei scrivere una funzione per vedere i due punti? –

Problemi correlati