unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: 10085@debbugs.gnu.org
Subject: bug#10085: 24.0.91; completion-pcm--find-all-completions returns wrong remote file names
Date: Tue, 22 Nov 2011 14:05:42 -0500	[thread overview]
Message-ID: <jwvehx0t2qb.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <87ty5yu6or.fsf@gmx.de> (Michael Albinus's message of "Sun, 20 Nov 2011 16:58:28 +0100")

> Start "emacs -Q". Apply "C-x C-f /sudo:: TAB". This results in
> "/sudo:sudo:root@". A correct expansion would be "/sudo:root@".

> As far as I can see, Tramp's completion functions work properly.
> The problem seems to be `completion-pcm--find-all-completions'.

I think the patch below fixes it.  The problem is that PCM assumes that
a field separator cannot appear within a field.  In "/sudo::" the first
/ is a field separator, and the last ":" is also a field separator, but
the first ":" isn't.

Sadly the fix could have some detrimental impact on performance, and
I think that the overall problem is linked to an oddity of Tramp's
completion:

If you do "C-x C-f /sudo ?" you get "/sudo:" but if you
do "C-x C-f /sudo: ?" you get "sudo:root@".  So fundamentally, the : of
"/sudo:" acts a field separator, so (completion-boundaries "/sudo:") should
probably return (6 . 0) rather than (1 . 0), and then "C-x C-f /sudo: ?"
should list '("root@" ":") rather than '("sudo:root@").

Related inconsistency from a trace of C-x C-f /sud: TAB:
   1 -> completion-file-name-table: string="/sud:" pred=file-exists-p action=(boundaries . "")
   1 <- completion-file-name-table: (boundaries 5)
   [...]
   ======================================================================
   1 -> completion-file-name-table: string="/sudo:" pred=file-exists-p action=(boundaries . "")
   1 <- completion-file-name-table: (boundaries 1)


        Stefan


=== modified file 'lisp/minibuffer.el'
*** lisp/minibuffer.el	2011-11-19 09:18:31 +0000
--- lisp/minibuffer.el	2011-11-22 18:45:38 +0000
***************
*** 2458,2464 ****
                    (between nil))
                ;; Eliminate submatches that don't end with the separator.
                (dolist (submatch (prog1 suball (setq suball ())))
!                 (when (eq sep (aref submatch (1- (length submatch))))
                    (push submatch suball)))
                (when suball
                  ;; Update the boundaries and corresponding pattern.
--- 2458,2474 ----
                    (between nil))
                ;; Eliminate submatches that don't end with the separator.
                (dolist (submatch (prog1 suball (setq suball ())))
!                 (when (and (eq sep (aref submatch (1- (length submatch))))
! 			   ;; The `sep' check is an optimization, but we need
! 			   ;; to check that submatch really introduces
! 			   ;; a new field.  E.g. When completing "/sudo::",
! 			   ;; prefix="/sudo:" and submatch is "sudo:" which
! 			   ;; matches `sep' but is not sufficient (we'd need
! 			   ;; "sudo::" or "sudo:foo@bar:" to get back to the
! 			   ;; field that we're trying to complete).
! 			   (let ((match (concat subprefix submatch)))
! 			     (eq (length match)
! 				 (completion-boundaries match table pred ""))))
                    (push submatch suball)))
                (when suball
                  ;; Update the boundaries and corresponding pattern.






  parent reply	other threads:[~2011-11-22 19:05 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-20 15:58 bug#10085: 24.0.91; completion-pcm--find-all-completions returns wrong remote file names Michael Albinus
2011-11-22 17:04 ` Stefan Monnier
2011-11-22 22:13   ` Michael Albinus
2011-11-22 23:05     ` Stefan Monnier
2011-11-23  6:43       ` Michael Albinus
2011-11-23 14:04         ` Stefan Monnier
2011-11-23 20:28           ` Michael Albinus
2011-11-24  2:10             ` Stefan Monnier
2016-04-27 14:16             ` Stefan Monnier
2016-04-27 18:37               ` Michael Albinus
2016-04-27 19:16                 ` Stefan Monnier
2016-05-02  7:19                   ` Michael Albinus
2011-11-22 19:05 ` Stefan Monnier [this message]
2011-11-22 21:55   ` Michael Albinus
2012-03-30 18:28 ` Stefan Monnier
2012-03-31 12:36   ` Michael Albinus
2012-03-31 15:29     ` Stefan Monnier
2016-04-23 20:08 ` bug#10085: Tramp method completions Live System User
2016-04-24  8:22   ` Michael Albinus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvehx0t2qb.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=10085@debbugs.gnu.org \
    --cc=michael.albinus@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).