Reuben Thomas writes: Hi Reuben, > I installed this patch by first installing tramp 2.8.0.1 in Emacs 30.1 > from ELPA, then applying the patch, then starting Emacs and > recompiling tramp.sh and tramp-sh.el, then restarting Emacs. > > This did not quite have the expected effect. > > The error from vertico was gone, but when I type a single slash at the > find-file prompt, I now get prompted to log in to an SSH host. This > sounds as though two lists have gotten out of sync: one with the empty > entry, and one without. Do let me know if I can do further > investigation. Same here with vertico. This now seems a vertico error. The backtrace is as follows: --8<---------------cut here---------------start------------->8--- backtrace() tramp-error((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) file-error #("Tramp failed to connect. If this happens repeatedly, try\n ‘M-x tramp-cleanup-this-connection’" 63 96 (font-lock-face help-key-binding face help-key-binding))) apply(tramp-error (tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) file-error #("Tramp failed to connect. If this happens repeatedly, try\n ‘M-x tramp-cleanup-this-connection’" 63 96 (font-lock-face help-key-binding face help-key-binding)) nil) tramp-process-actions(# (tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) 1 ((tramp-login-prompt-regexp tramp-action-login) (tramp-password-prompt-regexp tramp-action-password) (tramp-otp-password-prompt-regexp tramp-action-otp-password) (tramp-fingerprint-prompt-regexp tramp-action-fingerprint) (tramp-wrong-passwd-regexp tramp-action-permission-denied) (shell-prompt-pattern tramp-action-succeed) (tramp-shell-prompt-pattern tramp-action-succeed) (tramp-yesno-prompt-regexp tramp-action-yesno) (tramp-yn-prompt-regexp tramp-action-yn) (tramp-terminal-prompt-regexp tramp-action-terminal) (tramp-antispoof-regexp tramp-action-confirm-message) (tramp-security-key-confirm-regexp tramp-action-show-and-confirm-message) (tramp-security-key-pin-regexp tramp-action-otp-password) (tramp-process-alive-regexp tramp-action-process-alive)) 60) tramp-maybe-open-connection((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil)) tramp-send-command((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "echo ~ 2>/dev/null; echo tramp_exit_status $?") tramp-send-command-and-check((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "echo ~") tramp-sh-handle-get-home-directory((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "") tramp-sh-file-name-handler(tramp-get-home-directory (tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "") apply(tramp-sh-file-name-handler tramp-get-home-directory ((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "")) tramp-file-name-handler(tramp-get-home-directory (tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "") tramp-get-home-directory((tramp-file-name #("scp" 0 3 (tramp-default t)) nil nil "infempbln01.int.infinit-services.com" nil "" nil) "") tramp-sh-handle-expand-file-name("/infempbln01.int.infinit-services.com:" nil) tramp-sh-file-name-handler(expand-file-name "/infempbln01.int.infinit-services.com:" nil) apply(tramp-sh-file-name-handler expand-file-name ("/infempbln01.int.infinit-services.com:" nil)) tramp-file-name-handler(expand-file-name "/infempbln01.int.infinit-services.com:" nil) file-name-all-completions("" "/infempbln01.int.infinit-services.com:") completion-file-name-table("/infempbln01.int.infinit-services.com:" file-exists-p t) completion-pcm--all-completions("/infempbln01.int.infinit-services.com:" nil completion-file-name-table file-exists-p) completion-pcm--find-all-completions("/i-:" completion-file-name-table file-exists-p 4) completion-pcm-all-completions("/i-:" completion-file-name-table file-exists-p 4) #f(compiled-function (style) #)(partial-completion) #f(compiled-function (elt) #)(partial-completion) mapc(#f(compiled-function (elt) #) (basic partial-completion emacs22)) seq-do(#f(compiled-function (elt) #) (basic partial-completion emacs22)) seq-some(#f(compiled-function (style) #) (basic partial-completion emacs22)) completion--nth-completion(2 "~/src/emacs-30//i-:" read-file-name-internal file-exists-p 19 (metadata (category . file) (completion--unquote-requote . t))) completion-all-completions("~/src/emacs-30//i-:" read-file-name-internal file-exists-p 19 (metadata (category . file) (completion--unquote-requote . t))) vertico--filter-completions("~/src/emacs-30//i-:" read-file-name-internal file-exists-p 19 (metadata (category . file) (completion--unquote-requote . t))) vertico--recompute(19 "~/src/emacs-30//i-:") vertico--update(interruptible) #() #f(compiled-function () #)() handler-bind-1(#f(compiled-function () #) (error) vertico--debug) vertico--protect(#) vertico--exhibit() #("Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs-30/" file-name-history "~/src/emacs-30/" nil) apply((# "Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs-30/" file-name-history "~/src/emacs-30/" nil)) vertico--advice(# "Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs-30/" file-name-history "~/src/emacs-30/" nil) apply(vertico--advice # ("Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs-30/" file-name-history "~/src/emacs-30/" nil)) completing-read-default("Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs-30/" file-name-history "~/src/emacs-30/" nil) read-file-name-default("Find file: " nil "~/src/emacs-30/" confirm-after-completion nil nil) read-file-name("Find file: " nil "~/src/emacs-30/" confirm-after-completion) find-file-read-args("Find file: " confirm-after-completion) byte-code("\300\301\302 \"\207" [find-file-read-args "Find file: " confirm-nonexistent-file-or-buffer] 3) command-execute(find-file) --8<---------------cut here---------------end--------------->8--- As we see, there is --8<---------------cut here---------------start------------->8--- completion-pcm--all-completions("/infempbln01.int.infinit-services.com:" nil completion-file-name-table file-exists-p) completion-pcm--find-all-completions("/i-:" completion-file-name-table file-exists-p 4) completion-pcm-all-completions("/i-:" completion-file-name-table file-exists-p 4) ... vertico--filter-completions("~/src/emacs-30//i-:" read-file-name-internal file-exists-p 19 (metadata (category . file) (completion--unquote-requote . t))) --8<---------------cut here---------------end--------------->8--- This is OK, "infempbln01.int.infinit-services.com" is a valid completion for "/i-:". However, vertico must not trigger to open that host. This can be achieved by let-binding minibuffer-completing-file-name, for example by the following patch in vertico.el: