* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
@ 2016-03-14 2:01 Dmitry Gutov
2016-03-14 2:22 ` Stefan Monnier
` (3 more replies)
0 siblings, 4 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-14 2:01 UTC (permalink / raw)
To: 23006
As mentioned in a recent discussion:
1. M-x eshell
2. type 'cd /'
3. M-: (require 'tramp) ;; New step!
4. M-x pcomplete
I'm getting the error 'tramp-file-name-handler: Host name must not match
method "adb"'.
In GNU Emacs 25.0.92.2 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.7)
of 2016-03-11 built on axl
Repository revision: facb5e20ce186e47506860bde982e35020fedce5
Windowing system distributor 'The X.Org Foundation', version 11.0.11702000
System Description: Ubuntu 15.10
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 2:01 bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode Dmitry Gutov
@ 2016-03-14 2:22 ` Stefan Monnier
2016-03-14 7:34 ` Michael Albinus
` (2 subsequent siblings)
3 siblings, 0 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-14 2:22 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: 23006
> As mentioned in a recent discussion:
> 1. M-x eshell
> 2. type 'cd /'
> 3. M-: (require 'tramp) ;; New step!
> 4. M-x pcomplete
> I'm getting the error 'tramp-file-name-handler: Host name must not match
> method "adb"'.
I can reproduce it this time (also in 24.5), yes, thank you.
But I can't get a backtrace. Even debug-on-signal doesn't give me
one :-(
Hard to know where to fix the problem, because it surely needs to be
somewhere along that backtrace.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 2:01 bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode Dmitry Gutov
2016-03-14 2:22 ` Stefan Monnier
@ 2016-03-14 7:34 ` Michael Albinus
2016-03-15 3:31 ` Stefan Monnier
2016-03-17 0:50 ` Stefan Monnier
2017-03-09 18:52 ` Michael Albinus
2017-03-15 12:42 ` Michael Albinus
3 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-14 7:34 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> As mentioned in a recent discussion:
>> 1. M-x eshell
>> 2. type 'cd /'
>> 3. M-: (require 'tramp) ;; New step!
>> 4. M-x pcomplete
>
>> I'm getting the error 'tramp-file-name-handler: Host name must not match
>> method "adb"'.
>
> I can reproduce it this time (also in 24.5), yes, thank you.
> But I can't get a backtrace. Even debug-on-signal doesn't give me
> one :-(
Set a breakpoint in `tramp-check-proper-method-and-host'. Then you see
(if (edebug-after (edebug-before 32) 57 (and (edebug-after (edebug-before 33) 35 (equal (edebug-after 0 34 tramp-syntax) (quote ftp))) (ede$
(let ((method (edebug-after (edebug-before 1) 3 (tramp-file-name-method (edebug-after 0 2 vec)))) (user (edebug-after (edebug-before 4) 6 ($
tramp-check-proper-method-and-host([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil])
tramp-maybe-open-connection([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil])
tramp-send-command([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil] "cd ~ && pwd")
tramp-sh-handle-expand-file-name("/davs:" nil)
apply(tramp-sh-handle-expand-file-name ("/davs:" nil))
tramp-sh-file-name-handler(expand-file-name "/davs:" nil)
apply(tramp-sh-file-name-handler expand-file-name ("/davs:" nil))
tramp-file-name-handler(expand-file-name "/davs:" nil)
expand-file-name("/davs:" nil)
apply(expand-file-name ("/davs:" nil))
tramp-completion-run-real-handler(expand-file-name ("/davs:" nil))
tramp-completion-file-name-handler(expand-file-name "/davs:" nil)
file-name-all-completions("" "/davs:")
completion-file-name-table("/davs:" #[257 "\302\203\n^@\302^A!\205^\^@\301\203^T^@\301^A!\205^\^@\300?\206^\^@\300^A!\207" [file-executable$
comint-completion-file-name-table("/davs:" #[257 "\302\203\n^@\302^A!\205^\^@\301\203^T^@\301^A!\205^\^@\300?\206^\^@\300^A!\207" [file-exe$
complete-with-action(t comint-completion-file-name-table "/davs:" #[257 "\302\203\n^@\302^A!\205^\^@\301\203^T^@\301^A!\205^\^@\300?\206^\^$
completion-table-with-predicate(comint-completion-file-name-table #[257 "\302\203\n^@\302^A!\205^\^@\301\203^T^@\301^A!\205^\^@\300?\206^\^$
#[771 "\211\305=\203^W^@ \203^W^@\305\306\307B\310^E^E^E#ABB\207\311\n^[^\\312\313\300\314^F^F^F^F^F^F&^F*\207" [#[257 "\302\203\n^@\3$
complete-with-action(t #[771 "\211\305=\203^W^@ \203^W^@\305\306\307B\310^E^E^E#ABB\207\311\n^[^\\312\313\300\314^F^F^F^F^F^F&^F*\207$
#[771 "\302^CG\303 ^F^F\"\203)^@^D\304\305\224O^BB\262^B\306\307\310^F^G\"!^BB\262^B^D\305\225\302O\262^E\202^C^@^A\203:^@^B\311=\204O^@$
all-completions("/davs:" #[771 "\302^CG\303 ^F^F\"\203)^@^D\304\305\224O^BB\262^B\306\307\310^F^G\"!^BB\262^B^D\305\225\302O\262^E\202^C^$
pcomplete-stub("/davs:" #[771 "\302^CG\303 ^F^F\"\203)^@^D\304\305\224O^BB\262^B\306\307\310^F^G\"!^BB\262^B^D\305\225\302O\262^E\202^C^$
pcomplete-do-complete("/davs:" #[771 "\302^CG\303 ^F^F\"\203)^@^D\304\305\224O^BB\262^B\306\307\310^F^G\"!^BB\262^B^D\305\225\302O\262^$
pcomplete(1)
funcall-interactively(pcomplete 1)
call-interactively(pcomplete record nil)
command-execute(pcomplete record)
execute-extended-command(nil "pcomplete" nil)
funcall-interactively(execute-extended-command nil "pcomplete" nil)
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
> Hard to know where to fix the problem, because it surely needs to be
> somewhere along that backtrace.
>
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 7:34 ` Michael Albinus
@ 2016-03-15 3:31 ` Stefan Monnier
2016-03-15 8:43 ` Michael Albinus
2016-03-17 0:50 ` Stefan Monnier
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-15 3:31 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> pcomplete-do-complete("/davs:" #[771 "\302^CG\303
> pcomplete(1)
Hmm... how did we get from "/" to "/davs:"?
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-15 3:31 ` Stefan Monnier
@ 2016-03-15 8:43 ` Michael Albinus
2016-03-15 11:09 ` Dmitry Gutov
2016-03-17 0:42 ` Stefan Monnier
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-15 8:43 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> pcomplete-do-complete("/davs:" #[771 "\302^CG\303
>> pcomplete(1)
>
> Hmm... how did we get from "/" to "/davs:"?
Forgot to say: Prior to calling pcomplete, I have typed /davs: in the
eshell buffer.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-15 8:43 ` Michael Albinus
@ 2016-03-15 11:09 ` Dmitry Gutov
2016-03-17 0:42 ` Stefan Monnier
1 sibling, 0 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-15 11:09 UTC (permalink / raw)
To: Michael Albinus, Stefan Monnier; +Cc: 23006
On 03/15/2016 10:43 AM, Michael Albinus wrote:
>> Hmm... how did we get from "/" to "/davs:"?
>
> Forgot to say: Prior to calling pcomplete, I have typed /davs: in the
> eshell buffer.
I didn't. But I'm getting the same error anyway.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-15 8:43 ` Michael Albinus
2016-03-15 11:09 ` Dmitry Gutov
@ 2016-03-17 0:42 ` Stefan Monnier
2016-03-17 19:43 ` Michael Albinus
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-17 0:42 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>> pcomplete-do-complete("/davs:" #[771 "\302^CG\303
>>> pcomplete(1)
>> Hmm... how did we get from "/" to "/davs:"?
> Forgot to say: Prior to calling pcomplete, I have typed /davs: in the
> eshell buffer.
Hmm... looking back at it I'm kind of lost.
I thought this was about adding `non-essential' somewhere, but in the
recipe, I don't see much opportunity for that. So, I think the question
is really for Micheal:
Why does "cd / M-x pcomplete RET" signal an error like
tramp-file-name-handler: Host name must not match method "adb"
?
That seems like a bug right there, which doesn't have much to do with
non-essential.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 7:34 ` Michael Albinus
2016-03-15 3:31 ` Stefan Monnier
@ 2016-03-17 0:50 ` Stefan Monnier
2016-03-17 19:49 ` Michael Albinus
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-17 0:50 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>> I'm getting the error 'tramp-file-name-handler: Host name must not match
>>> method "adb"'.
[...]
> tramp-check-proper-method-and-host([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil])
> tramp-maybe-open-connection([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil])
> tramp-send-command([#("scp" 0 3 (tramp-default t)) nil "davs" "" nil] "cd ~ && pwd")
> tramp-sh-handle-expand-file-name("/davs:" nil)
> apply(tramp-sh-handle-expand-file-name ("/davs:" nil))
> tramp-sh-file-name-handler(expand-file-name "/davs:" nil)
> apply(tramp-sh-file-name-handler expand-file-name ("/davs:" nil))
> tramp-file-name-handler(expand-file-name "/davs:" nil)
> expand-file-name("/davs:" nil)
> apply(expand-file-name ("/davs:" nil))
> tramp-completion-run-real-handler(expand-file-name ("/davs:" nil))
> tramp-completion-file-name-handler(expand-file-name "/davs:" nil)
> file-name-all-completions("" "/davs:")
> completion-file-name-table("/davs:" #[257
completion-file-name-table calls (file-name-all-completions "" "/davs:")
because (file-name-directory "/davs:") returns "/davs:" which seems
wrong if "/davs:" is not a valid directory name.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 0:42 ` Stefan Monnier
@ 2016-03-17 19:43 ` Michael Albinus
2016-03-17 19:44 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-17 19:43 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>>> pcomplete-do-complete("/davs:" #[771 "\302^CG\303
>>>> pcomplete(1)
>>> Hmm... how did we get from "/" to "/davs:"?
>> Forgot to say: Prior to calling pcomplete, I have typed /davs: in the
>> eshell buffer.
>
> Hmm... looking back at it I'm kind of lost.
> I thought this was about adding `non-essential' somewhere, but in the
> recipe, I don't see much opportunity for that. So, I think the question
> is really for Micheal:
>
> Why does "cd / M-x pcomplete RET" signal an error like
>
> tramp-file-name-handler: Host name must not match method "adb"
>
> ?
>
> That seems like a bug right there, which doesn't have much to do with
> non-essential.
I couldn't provoke the bug with the recipe you ought to use:
emacs -Q
M-x eshell
cd /
M-x pcomplete
So I cannot answer that question. Or do you use another recipe?
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 19:43 ` Michael Albinus
@ 2016-03-17 19:44 ` Dmitry Gutov
2016-03-17 19:54 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-17 19:44 UTC (permalink / raw)
To: Michael Albinus, Stefan Monnier; +Cc: 23006
On 03/17/2016 09:43 PM, Michael Albinus wrote:
> I couldn't provoke the bug with the recipe you ought to use:
>
> emacs -Q
> M-x eshell
> cd /
> M-x pcomplete
>
> So I cannot answer that question. Or do you use another recipe?
Like I've described in this bug report, you also need to load Tramp.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 0:50 ` Stefan Monnier
@ 2016-03-17 19:49 ` Michael Albinus
2016-03-18 16:06 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-17 19:49 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>>> I'm getting the error 'tramp-file-name-handler: Host name must not match
>>>> method "adb"'.
> [...]
>> tramp-check-proper-method-and-host([#("scp" 0 3 (tramp-default t))
>> nil "davs" "" nil])
>> tramp-maybe-open-connection([#("scp" 0 3 (tramp-default t)) nil
>> "davs" "" nil])
>> tramp-send-command([#("scp" 0 3 (tramp-default t)) nil "davs" ""
>> nil] "cd ~ && pwd")
>> tramp-sh-handle-expand-file-name("/davs:" nil)
>> apply(tramp-sh-handle-expand-file-name ("/davs:" nil))
>> tramp-sh-file-name-handler(expand-file-name "/davs:" nil)
>> apply(tramp-sh-file-name-handler expand-file-name ("/davs:" nil))
>> tramp-file-name-handler(expand-file-name "/davs:" nil)
>> expand-file-name("/davs:" nil)
>> apply(expand-file-name ("/davs:" nil))
>> tramp-completion-run-real-handler(expand-file-name ("/davs:" nil))
>> tramp-completion-file-name-handler(expand-file-name "/davs:" nil)
>> file-name-all-completions("" "/davs:")
>> completion-file-name-table("/davs:" #[257
>
> completion-file-name-table calls (file-name-all-completions "" "/davs:")
> because (file-name-directory "/davs:") returns "/davs:" which seems
> wrong if "/davs:" is not a valid directory name.
What do you expect (file-name-directory "/davs:") to return else?
`file-name-directory' is not expected to check, whether a given argument
is a valid file name. The docstring says "Given a Unix syntax file name,
returns a string ending in slash.".
And yes, in this case no trailing slash is added. Hmm, maybe it shall
return "/davs:./". Would this be better?
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 19:44 ` Dmitry Gutov
@ 2016-03-17 19:54 ` Michael Albinus
2016-03-17 22:55 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-17 19:54 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/17/2016 09:43 PM, Michael Albinus wrote:
>
>> I couldn't provoke the bug with the recipe you ought to use:
>>
>> emacs -Q
>> M-x eshell
>> cd /
>> M-x pcomplete
>>
>> So I cannot answer that question. Or do you use another recipe?
>
> Like I've described in this bug report, you also need to load Tramp.
emacs -Q
M-x load-library tramp
M-x eshell
cd /
M-x pcomplete
Still no error. Tests performed in the emacs-25 branch.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 19:54 ` Michael Albinus
@ 2016-03-17 22:55 ` Dmitry Gutov
2016-03-18 8:27 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-17 22:55 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/17/2016 09:54 PM, Michael Albinus wrote:
> emacs -Q
> M-x load-library tramp
> M-x eshell
> cd /
> M-x pcomplete
>
> Still no error. Tests performed in the emacs-25 branch.
I do get an error. Or rather, a failure message, like described
previously. On emacs-25, with -Q, just 'make bootstrap'-ed the latest
commit to triple-check, and the problem is consistent.
Do you get any completions in the end?
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 22:55 ` Dmitry Gutov
@ 2016-03-18 8:27 ` Michael Albinus
2016-03-18 16:13 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-18 8:27 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/17/2016 09:54 PM, Michael Albinus wrote:
>
>> emacs -Q
>> M-x load-library tramp
>> M-x eshell
>> cd /
>> M-x pcomplete
>>
>> Still no error. Tests performed in the emacs-25 branch.
>
> I do get an error. Or rather, a failure message, like described
> previously. On emacs-25, with -Q, just 'make bootstrap'-ed the latest
> commit to triple-check, and the problem is consistent.
>
> Do you get any completions in the end?
Yes. But this aren't the files under "/", but rather all programs I
could start on my Ubuntu machine.
If I do *not* enter RET after "cd /", and call "M-x pcomplete" then, I
get the same error message. OK, that's clear.
Now the backtrace in this scenario:
--8<---------------cut here---------------start------------->8---
(member (edebug-after 0 54 host) (edebug-after 0 55 methods))
(and (edebug-after (edebug-before 33) 35 (equal (edebug-after 0 34 tramp-syntax) (quote ftp))) (edebug-after 0 36 host) (edebug-after (edebug-before 37) 44 (or (edebug-after (edebug-before 38) 40 (null (edebug-after 0 39 method))) (edebug-after (edebug-before 41) 43 (get-text-property 0 (quote tramp-default) (edebug-after 0 42 method))))) (edebug-after (edebug-before 45) 52 (or (edebug-after (edebug-before 46) 48 (null (edebug-after 0 47 user))) (edebug-after (edebug-before 49) 51 (get-text-property 0 (quote tramp-default) (edebug-after 0 50 user))))) (edebug-after (edebug-before 53) 56 (member (edebug-after 0 54 host) (edebug-after 0 55 methods))))
(if (edebug-after (edebug-before 32) 57 (and (edebug-after (edebug-before 33) 35 (equal (edebug-after 0 34 tramp-syntax) (quote ftp))) (edebug-after 0 36 host) (edebug-after (edebug-before 37) 44 (or (edebug-after (edebug-before 38) 40 (null (edebug-after 0 39 method))) (edebug-after (edebug-before 41) 43 (get-text-property 0 (quote tramp-default) (edebug-after 0 42 method))))) (edebug-after (edebug-before 45) 52 (or (edebug-after (edebug-before 46) 48 (null (edebug-after 0 47 user))) (edebug-after (edebug-before 49) 51 (get-text-property 0 (quote tramp-default) (edebug-after 0 50 user))))) (edebug-after (edebug-before 53) 56 (member (edebug-after 0 54 host) (edebug-after 0 55 methods))))) (progn (edebug-after (edebug-before 58) 60 (tramp-cleanup-connection (edebug-after 0 59 vec))) (edebug-after (edebug-before 61) 64 (tramp-user-error (edebug-after 0 62 vec) "Host name must not match method \"%s\"" (edebug-after 0 63 host)))))
(let ((method (edebug-after (edebug-before 1) 3 (tramp-file-name-method (edebug-after 0 2 vec)))) (user (edebug-after (edebug-before 4) 6 (tramp-file-name-user (edebug-after 0 5 vec)))) (host (edebug-after (edebug-before 7) 9 (tramp-file-name-host (edebug-after 0 8 vec)))) (methods (edebug-after (edebug-before 10) 12 (mapcar (quote car) (edebug-after 0 11 tramp-methods))))) (edebug-after (edebug-before 13) 30 (if (edebug-after (edebug-before 14) 22 (and (edebug-after 0 15 method) (edebug-after (edebug-before 16) 21 (not (edebug-after ... 20 ...))))) (progn (edebug-after (edebug-before 23) 25 (tramp-cleanup-connection (edebug-after 0 24 vec))) (edebug-after (edebug-before 26) 29 (tramp-user-error (edebug-after 0 27 vec) "Unknown method \"%s\"" (edebug-after 0 28 method)))))) (edebug-after (edebug-before 31) 65 (if (edebug-after (edebug-before 32) 57 (and (edebug-after (edebug-before 33) 35 (equal (edebug-after 0 34 tramp-syntax) (quote ftp))) (edebug-after 0 36 host) (edebug-after (edebug-before 37) 44 (or (edebug-after ... 40 ...) (edebug-after ... 43 ...))) (edebug-after (edebug-before 45) 52 (or (edebug-after ... 48 ...) (edebug-after ... 51 ...))) (edebug-after (edebug-before 53) 56 (member (edebug-after 0 54 host) (edebug-after 0 55 methods))))) (progn (edebug-after (edebug-before 58) 60 (tramp-cleanup-connection (edebug-after 0 59 vec))) (edebug-after (edebug-before 61) 64 (tramp-user-error (edebug-after 0 62 vec) "Host name must not match method \"%s\"" (edebug-after 0 63 host)))))))
tramp-check-proper-method-and-host([#("scp" 0 3 (tramp-default t)) nil "adb" "" nil])
tramp-maybe-open-connection([#("scp" 0 3 (tramp-default t)) nil "adb" "" nil])
tramp-send-command([#("scp" 0 3 (tramp-default t)) nil "adb" "" nil] "cd ~ && pwd")
tramp-sh-handle-expand-file-name("/adb:" "/")
apply(tramp-sh-handle-expand-file-name ("/adb:" "/"))
tramp-sh-file-name-handler(expand-file-name "/adb:" "/")
apply(tramp-sh-file-name-handler expand-file-name ("/adb:" "/"))
tramp-file-name-handler(expand-file-name "/adb:" "/")
expand-file-name("adb:" "/")
apply(expand-file-name ("adb:" "/"))
tramp-completion-run-real-handler(expand-file-name ("adb:" "/"))
tramp-completion-file-name-handler(expand-file-name "adb:" "/")
file-directory-p("adb:")
#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"]("adb:")
completion-file-name-table("/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] t)
comint-completion-file-name-table("/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] t)
complete-with-action(t comint-completion-file-name-table "/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"])
completion-table-with-predicate(comint-completion-file-name-table #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] strict "/" nil t)
#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"]("/" nil t)
complete-with-action(t #[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] "/" nil)
#[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"]("/" nil t)
all-completions("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete-stub("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete-do-complete("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete(1)
funcall-interactively(pcomplete 1)
call-interactively(pcomplete record nil)
command-execute(pcomplete record)
execute-extended-command(nil "pcomplete" "pcomplete")
funcall-interactively(execute-extended-command nil "pcomplete" "pcomplete")
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
--8<---------------cut here---------------end--------------->8---
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-17 19:49 ` Michael Albinus
@ 2016-03-18 16:06 ` Stefan Monnier
0 siblings, 0 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-18 16:06 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> What do you expect (file-name-directory "/davs:") to return else?
IIUC "/davs:hello.c" is parsed as a reference to a file on the host
"davs" and we nowadays signal an error in that case telling the user to
use an explicit "/ssh:davs:hello.c" instead.
At least that's how I interpret the
tramp-file-name-handler: Host name must not match method "davs"
(replace "davs" with "adb" and friends depending on your particular
case) we get in the recipe.
So, assuming this interpretation is correct, I think "/davs:" should not
be considered a valid "directory" name.
So I see two options:
- (file-name-directory "/davs:") returns "/"
- (file-name-directory "/davs:") returns "/davs:" and Tramp accepts
(file-name-all-completions "" "/davs:") without signaling an error.
> And yes, in this case no trailing slash is added. Hmm, maybe it shall
> return "/davs:./". Would this be better?
I don't know what are the tradeoffs in this regard, so I have no
preference in this regard. But what (file-name-directory "/davs:")
returns should be a directory name that file-name-all-completions can
use and to the extent that "/davs:" is the prefix of valid file names,
file-name-all-completions should not signal an error (it's acceptable if
it doesn't actually lists all those valid file names, OTOH).
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 8:27 ` Michael Albinus
@ 2016-03-18 16:13 ` Stefan Monnier
2016-03-18 17:01 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-18 16:13 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> tramp-send-command([#("scp" 0 3 (tramp-default t)) nil "adb" "" nil] "cd ~ && pwd")
> tramp-sh-handle-expand-file-name("/adb:" "/")
> apply(tramp-sh-handle-expand-file-name ("/adb:" "/"))
> tramp-sh-file-name-handler(expand-file-name "/adb:" "/")
> apply(tramp-sh-file-name-handler expand-file-name ("/adb:" "/"))
> tramp-file-name-handler(expand-file-name "/adb:" "/")
> expand-file-name("adb:" "/")
> apply(expand-file-name ("adb:" "/"))
> tramp-completion-run-real-handler(expand-file-name ("adb:" "/"))
> tramp-completion-file-name-handler(expand-file-name "adb:" "/")
> file-directory-p("adb:")
And I think here we have another related problem: (file-directory-p
"/adb:") should not try to connect to the "adb" host, because this name
is ambiguous.
A big part of the problem here is our support for the
"/<host>:" syntax. I wonder if we could demote this syntax. One option
is of course to drop it altogether (I'm biased: I never use it).
But maybe another is to only support it in substitute-in-file-name,
where it'd get expanded to its more verbose equivalent.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 16:13 ` Stefan Monnier
@ 2016-03-18 17:01 ` Michael Albinus
2016-03-18 17:53 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-18 17:01 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
Hi Stefan,
> A big part of the problem here is our support for the
> "/<host>:" syntax. I wonder if we could demote this syntax. One option
> is of course to drop it altogether (I'm biased: I never use it).
> But maybe another is to only support it in substitute-in-file-name,
> where it'd get expanded to its more verbose equivalent.
I fully agree with you, I haven't been ever in favor of the
"/mehod:host:" syntax, and its abbreviation "/host:". Unfortunately,
this was decided before I've entered Tramp maintenance (2002 or so).
However, before we start with such radical changes, why do you oppose to
use non-essential in pcomplete? According to my tests, this solves the problem.
I know that you've planned to use non-essential for several use
cases. But according to the status quo in the sources, until now it is
used only for indication of file name completion being in progress.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 17:01 ` Michael Albinus
@ 2016-03-18 17:53 ` Stefan Monnier
2016-03-18 20:21 ` Michael Albinus
2016-03-18 22:51 ` Dmitry Gutov
0 siblings, 2 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-18 17:53 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> However, before we start with such radical changes, why do you oppose
> to use non-essential in pcomplete? According to my tests, this solves
> the problem.
non-essential means that what we're doing is a skippable/secondary (aka
non-essential) side-effect of the main operation. When the user hits
TAB, performing completion is not a skippable side-effect of some other
main operation. It *is* the main operation.
When the user types "cd /ssh:myhost:src/ema TAB" she *wants* Tramp to
prompt her for a password to then give her the valid completions.
It'd be correct for company-mode to bind non-essential around the code
which computes the completion data in response to the user's normal
editing of the buffer (in order to decide whether the
auto-popup a completion menu), because the completion is not the main
operation.
Similarly it's correct for icomplete to bind non-essential while
computing the completion list, since it's done "in the background" in
response to other editing commands and shouldn't get in the way of those
editing commands.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 17:53 ` Stefan Monnier
@ 2016-03-18 20:21 ` Michael Albinus
2016-03-18 22:41 ` Stefan Monnier
2016-03-18 22:51 ` Dmitry Gutov
1 sibling, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-18 20:21 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> However, before we start with such radical changes, why do you oppose
>> to use non-essential in pcomplete? According to my tests, this solves
>> the problem.
>
> non-essential means that what we're doing is a skippable/secondary (aka
> non-essential) side-effect of the main operation. When the user hits
> TAB, performing completion is not a skippable side-effect of some other
> main operation. It *is* the main operation.
>
> When the user types "cd /ssh:myhost:src/ema TAB" she *wants* Tramp to
> prompt her for a password to then give her the valid completions.
non-essential is essential for Tramp only until the completion of method
and host is finished. As soon as the filename contains two colons, or a
slash, it completes. No problem with your example, therefore. You'll get
"/ssh:myhost:src/emacs/" after hitting TAB, even if non-essential is
bound to t.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 20:21 ` Michael Albinus
@ 2016-03-18 22:41 ` Stefan Monnier
2016-03-19 8:28 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-18 22:41 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> non-essential is essential for Tramp only until the completion of method
> and host is finished. As soon as the filename contains two colons, or a
> slash, it completes. No problem with your example, therefore. You'll get
> "/ssh:myhost:src/emacs/" after hitting TAB, even if non-essential is
> bound to t.
If the connection was not yet established, I think it'd be risky for
Tramp to provide the completion when non-essential is non-nil, because
establishing a connection risks being too intrusive for a non-essential
operation (it's probably OK to reuse an existing connection, OTOH).
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 17:53 ` Stefan Monnier
2016-03-18 20:21 ` Michael Albinus
@ 2016-03-18 22:51 ` Dmitry Gutov
1 sibling, 0 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-18 22:51 UTC (permalink / raw)
To: Stefan Monnier, Michael Albinus; +Cc: 23006
On 03/18/2016 07:53 PM, Stefan Monnier wrote:
> It'd be correct for company-mode to bind non-essential around the code
> which computes the completion data in response to the user's normal
> editing of the buffer (in order to decide whether the
> auto-popup a completion menu), because the completion is not the main
> operation.
Makes sense. Applied in the upstream.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-18 22:41 ` Stefan Monnier
@ 2016-03-19 8:28 ` Michael Albinus
2016-03-19 12:35 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-19 8:28 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> non-essential is essential for Tramp only until the completion of method
>> and host is finished. As soon as the filename contains two colons, or a
>> slash, it completes. No problem with your example, therefore. You'll get
>> "/ssh:myhost:src/emacs/" after hitting TAB, even if non-essential is
>> bound to t.
>
> If the connection was not yet established, I think it'd be risky for
> Tramp to provide the completion when non-essential is non-nil, because
> establishing a connection risks being too intrusive for a non-essential
> operation (it's probably OK to reuse an existing connection, OTOH).
When we have "/ssh:myhost:src/em" to complete, and the user indicates
she wants completion (pressing TAB or so), she expresses her wish to
open a connection to myhost. No reason to deny this.
non-essential comes in play only when hostname completion hasn't been
finished.
This is how Tramp behaves for years. I haven't heard complaints about
(except the cases non-essential isn't let-bound, like the one we're
discussing here).
Again, I still don't understand why it hurts to bind non-essential in
pcomplete.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-19 8:28 ` Michael Albinus
@ 2016-03-19 12:35 ` Stefan Monnier
2016-03-19 15:28 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-19 12:35 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> non-essential comes in play only when hostname completion hasn't been
> finished.
Could you expand on this?
Do you mean when completing things like "/ssh:toto" ?
In that case I agree that Tramp shouldn't open a connection, but I think
this should be regardless of non-essential.
But do you also mean that completing "/ssh:host:tmp/ema" will open a new
connection regardless of non-essential? If so, as mentioned I think
that would be a mistake.
> This is how Tramp behaves for years. I haven't heard complaints about
> (except the cases non-essential isn't let-bound, like the one we're
> discussing here).
Sounds like we agree, then: this should not be affected by non-essential.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-19 12:35 ` Stefan Monnier
@ 2016-03-19 15:28 ` Michael Albinus
2016-03-19 20:04 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-19 15:28 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> non-essential comes in play only when hostname completion hasn't been
>> finished.
>
> Could you expand on this?
>
> Do you mean when completing things like "/ssh:toto" ?
> In that case I agree that Tramp shouldn't open a connection, but I think
> this should be regardless of non-essential.
I'm not speaking about opening a connection. This is controlled
independent of non-essential settings.
I'm speaking about this error, that Tramp reports "/adb:" not being a
valid hostname. This does not happen if non-essential is bound to
non-nil, indicating to Tramp that the given filename is not complete yet.
> But do you also mean that completing "/ssh:host:tmp/ema" will open a new
> connection regardless of non-essential? If so, as mentioned I think
> that would be a mistake.
I don't believe it is a mistake. The presence of a slash indicates to
Tramp, that the (Emacs) user has provided everything what's needed to
say about method, (remote) user, and hostname to Tramp. So it is safe to
open the connection. Otherwise, you would never be able to complete
local pathnames for remote hosts, if the connection hasn't been
established yet. Inconvenient.
It is my daily scenario to type
C-x C-f / / / s s h : h o s <TAB> / u s <TAB>
The leading slashes are needed because I work usually on other remote
machines in parallel. It's my typing style to start with three
consecutive slashes :-)
The first <TAB> completes to "/ssh:host:" The second <TAB> completes to
"/ssh:host:/usr". And so on.
I also perform very often "ediff" over machine boundaries. Usually, the
first filename is on the machine I'm working on, and the second filename
on another machine on a similar location. Once I have started ediff, I
want to complete the (slightliy) different pathname of the second file
while being asked from ediff for that filename. If I would need to open
a connection to the second host in advance, this workflow would be
impossible.
>> This is how Tramp behaves for years. I haven't heard complaints about
>> (except the cases non-essential isn't let-bound, like the one we're
>> discussing here).
>
> Sounds like we agree, then: this should not be affected by non-essential.
Yes, here we agree. Opening a new connection is not related to non-essential.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-19 15:28 ` Michael Albinus
@ 2016-03-19 20:04 ` Stefan Monnier
2016-03-20 15:08 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-19 20:04 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
Hi Michael,
It seems we have a very fundamental misunderstanding about what
"essential" means in this context.
Can you explain *your* understanding of `non-essential', then?
What does this var mean, for you?
And how do you relate that to its documented meaning in its docstring?
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-19 20:04 ` Stefan Monnier
@ 2016-03-20 15:08 ` Michael Albinus
2016-03-20 15:23 ` Stefan Monnier
2016-03-20 15:38 ` Drew Adams
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 15:08 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> Hi Michael,
Hi Stefan,
> It seems we have a very fundamental misunderstanding about what
> "essential" means in this context.
Yes. It is not the first time we discuss this, see for example
<http://thread.gmane.org/gmane.emacs.diffs/121948> or
<http://thread.gmane.org/gmane.emacs.diffs/114769>.
> Can you explain *your* understanding of `non-essential', then?
> What does this var mean, for you?
For Tramp, it is an indication that file name completion is in
progress.
> And how do you relate that to its documented meaning in its docstring?
"... it can be used to prevent Tramp from prompting the
user for a password when we are simply scanning a set of files in the
background or displaying possible completions before the user even asked
for it."
If the user has typed "/ssh:host:tmp/ema", and she requests for
completion by typing TAB, the existence of the slash in the local file
name part is an indication that "the user even asked for it" (completion
on "host").
Without the slash in the local file name, Tramp does not perform
completion on "host" when there is no connection yet. In a previous
message I was wrong about this, saying that completion happens already
when there are two colons.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:08 ` Michael Albinus
@ 2016-03-20 15:23 ` Stefan Monnier
2016-03-20 15:46 ` Michael Albinus
2016-03-20 15:38 ` Drew Adams
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-20 15:23 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>> Can you explain *your* understanding of `non-essential', then?
>> What does this var mean, for you?
> For Tramp, it is an indication that file name completion is in
> progress.
Huh? Why would it need such a variable for that, instead of getting
this info from the fact that you're replying to
`file-name-all-completions' (or `file-name-completion') rather than to
some other request?
And why would it be called `non-essential' instead of `in-completion'?
>> And how do you relate that to its documented meaning in its docstring?
> "... it can be used to prevent Tramp from prompting the
> user for a password
That's an example.
> when we are simply scanning a set of files in the background or
> displaying possible completions before the user even asked for it."
That's the particular justification for not prompting the user.
> If the user has typed "/ssh:host:tmp/ema", and she requests for
> completion by typing TAB, the existence of the slash in the local file
> name part is an indication that "the user even asked for it" (completion
> on "host").
The fact that she hit TAB is enough indication. But in icomplete and
company, we request completion data even though the user hasn't hit
anything like TAB.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:08 ` Michael Albinus
2016-03-20 15:23 ` Stefan Monnier
@ 2016-03-20 15:38 ` Drew Adams
2016-03-20 15:54 ` Michael Albinus
1 sibling, 1 reply; 82+ messages in thread
From: Drew Adams @ 2016-03-20 15:38 UTC (permalink / raw)
To: Michael Albinus, Stefan Monnier; +Cc: 23006, Dmitry Gutov
> "... it can be used to prevent Tramp from prompting the
> user for a password when we are simply scanning a set of files in the
> background or displaying possible completions before the user even asked
> for it."
Those are two examples. More generally, it can be used to prevent
Tramp from prompting _for any reason_ and _in any context_ where a
file name is read (any context where Tramp is invoked - e.g. by a
file handler).
> If the user has typed "/ssh:host:tmp/ema", and she requests for
> completion by typing TAB, the existence of the slash in the local file
> name part is an indication that "the user even asked for it" (completion
> on "host").
>
> Without the slash in the local file name, Tramp does not perform
> completion on "host" when there is no connection yet. In a previous
> message I was wrong about this, saying that completion happens already
> when there are two colons.
Those are explanations of why someone using vanilla Emacs might
want to inhibit Tramp from prompting. They might be sufficient
reasons for Tramp not to prompt, in that vanilla context.
But they are not _necessary_ conditions to inhibit prompting.
Phrases such as "by typing TAB" and "slash in the local file name
part" are inappropriate considerations here. They do not belong
in a Tramp consideration of what it means for `non-essential' to
be non-nil.
Tramp should simply honor `non-essential' without question. It
is not Tramp's business what the reasons might be for inhibiting
its prompting. It should not make any assumptions about the kind
of completion being used or the mechanism of completion - or even
whether any completion is currently being done. It should not
care why it is being inhibited from prompting - no second-guessing.
It should not even look at the input string if `non-essential'
is non-nil. If it is non-nil then Tramp should not consider
perhaps prompting if the input string is this or that or contains
this or that. If non-nil then hands-off, please - no questions
asked.
It is typically the file-name reading code that binds/sets
`non-essential', and it is up to whatever code that does that
to decide whether Tramp should be able to prompt for connection
info (password etc.).
Tramp needs to keep its hands off if `non-essential' is non-nil,
and not second-guess _why_ it is non-nil and what that might
really mean to the code that made it non-nil.
Of course, it's possible I'm missing something big here, in
which case I apologize. But my impression from what I've seen
so far is that you are now digging into the weeds in territory
where Tramp does not really belong.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:23 ` Stefan Monnier
@ 2016-03-20 15:46 ` Michael Albinus
2016-03-20 16:10 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 15:46 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>> Can you explain *your* understanding of `non-essential', then?
>>> What does this var mean, for you?
>> For Tramp, it is an indication that file name completion is in
>> progress.
>
> Huh? Why would it need such a variable for that, instead of getting
> this info from the fact that you're replying to
> `file-name-all-completions' (or `file-name-completion') rather than to
> some other request?
Because these aren't the only file name operations being called. You
have seen it in the backtraces I've shown earlier.
> And why would it be called `non-essential' instead of `in-completion'?
I wanted to introduce `completion-only'. You have said, that it would be
too specific, and I shall use `non-essential' instead.
<http://thread.gmane.org/gmane.emacs.bugs/35968/focus=36234>
As I understand the codebase of Emacs 25, no other use of
`non-essential' has appeared since then. Six years later.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:38 ` Drew Adams
@ 2016-03-20 15:54 ` Michael Albinus
2016-03-20 15:59 ` Dmitry Gutov
2016-03-20 16:38 ` Drew Adams
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 15:54 UTC (permalink / raw)
To: Drew Adams; +Cc: Stefan Monnier, 23006, Dmitry Gutov
Drew Adams <drew.adams@oracle.com> writes:
> Of course, it's possible I'm missing something big here, in
> which case I apologize. But my impression from what I've seen
> so far is that you are now digging into the weeds in territory
> where Tramp does not really belong.
Maybe you are right, and I'll happily discuss this. But think about the
difference of "a connection has already been established to a host", and
"no connection has been established to a host". Tramp shall support file
name completion at least in the first case. I don't know whether
completion packages want to go into the business of deciding this
question. Therefore, there must be a trade-off between completion
packages and Tramp in order to decide whether to complete.
Anyway, the purpose of *this* bug report is that non-essential hasn't
been bound, and nobody could explain to me why it is wrong to bind it in
pcomplete. I would like to fix *this* problem in the bug report, and
discuss proper usage of non-essential somewhere else, in emacs-devel or
another bug report. Otherwise, we loose focus.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:54 ` Michael Albinus
@ 2016-03-20 15:59 ` Dmitry Gutov
2016-03-20 20:31 ` Michael Albinus
2016-03-20 16:38 ` Drew Adams
1 sibling, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-20 15:59 UTC (permalink / raw)
To: Michael Albinus, Drew Adams; +Cc: Stefan Monnier, 23006
On 03/20/2016 05:54 PM, Michael Albinus wrote:
> Anyway, the purpose of *this* bug report is that non-essential hasn't
> been bound, and nobody could explain to me why it is wrong to bind it in
> pcomplete.
Probably because, if I have typed a valid remote file name for which
there's no connection, and I explicitly invoke pcomplete, I *want* you
to prompt me for login and password.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:46 ` Michael Albinus
@ 2016-03-20 16:10 ` Stefan Monnier
2016-03-20 20:40 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-20 16:10 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>>> Can you explain *your* understanding of `non-essential', then?
>>>> What does this var mean, for you?
>>> For Tramp, it is an indication that file name completion is in
>>> progress.
>> Huh? Why would it need such a variable for that, instead of getting
>> this info from the fact that you're replying to
>> `file-name-all-completions' (or `file-name-completion') rather than to
>> some other request?
> Because these aren't the only file name operations being called. You
> have seen it in the backtraces I've shown earlier.
But in that backtrace, it's OK for Tramp to open a new connection, since
the user hit TAB.
>> And why would it be called `non-essential' instead of `in-completion'?
> I wanted to introduce `completion-only'.
The crucial distinction to be made is not between "performing
completion" and "not performing completion", but between "any normal
operation, including completion in response to TAB" and "side-operations
like on-the-fly completion à la icomplete or company or background data
collection (like semantic might perform)".
> As I understand the codebase of Emacs 25, no other use of
> `non-essential' has appeared since then. Six years later.
It should be bound in desktop.el when reloading a desktop, but instead
desktop.el opted to use ad-hoc file-remote-p tests, IIUC.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:54 ` Michael Albinus
2016-03-20 15:59 ` Dmitry Gutov
@ 2016-03-20 16:38 ` Drew Adams
2016-03-20 19:48 ` Drew Adams
1 sibling, 1 reply; 82+ messages in thread
From: Drew Adams @ 2016-03-20 16:38 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006, Dmitry Gutov
> > Of course, it's possible I'm missing something big here, in
> > which case I apologize. But my impression from what I've seen
> > so far is that you are now digging into the weeds in territory
> > where Tramp does not really belong.
>
> Maybe you are right, and I'll happily discuss this. But think about the
> difference of "a connection has already been established to a host", and
> "no connection has been established to a host". Tramp shall support file
> name completion at least in the first case.
Yes, but I don't see how that contradicts what I said. Tramp should
(I think) always interpret non-nil `non-essential' as an inhibition
to prompt. If there is already a connection then presumably
(hopefully) Tramp would not prompt anyway, regardless of the value
of `non-essential'.
> I don't know whether completion packages want to go into the business
> of deciding this question.
They are not _required_ to decide it. But if they set/bind
`non-essential' to non-nil then I think Tramp should consider
that they _have_ decided it - they've decided that Tramp should
not prompt.
> Therefore, there must be a trade-off between completion
> packages and Tramp in order to decide whether to complete.
I think the trade-off is here: When `non-essential' is nil
then Tramp gets to decide (e.g., depending on whether there
is already a connection - or the phase of the moon, for that
matter). When `non-essential' is non-nil, Tramp does not
get to decide - the decision has been made that Tramp must
not prompt.
Again, though, I'm no expert on any of this. Maybe there
are legitimate reasons why Tramp should sometimes prompt
even when `non-essential' is non-nil. But if there are
then they are beyond my (current) understanding.
> Anyway, the purpose of *this* bug report is that non-essential hasn't
> been bound, and nobody could explain to me why it is wrong to bind it in
> pcomplete.
I see. Sorry for intruding here then. I have nothing to
say about whether pcomplete should bind `non-essential'
to non-nil. That's apparently a question about pcomplete
behavior and not about Tramp behavior in the face of non-nil
`non-essential'.
> I would like to fix *this* problem in the bug report, and
> discuss proper usage of non-essential somewhere else,
> in emacs-devel or another bug report. Otherwise, we loose focus.
Agreed. Sorry if my messages here were not helpful.
I would like to know, though, whether you agree generally
that non-nil `non-essential' should inhibit prompting by
Tramp.
If you don't then maybe we can discuss it off line or in
emacs-devel. I'd like to understand that better, as (I
think) I need to know how to control such prompting in
my code. I thought that it was sufficient to bind
`non-essential' to non-nil to prevent prompting.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 16:38 ` Drew Adams
@ 2016-03-20 19:48 ` Drew Adams
2016-03-20 20:42 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Drew Adams @ 2016-03-20 19:48 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006, Dmitry Gutov
Sorry, but please forget all that I said. In general, whatever the
current behavior of Tramp is for `non-essential' I've found to be
reasonable. I wouldn't want to suggest any change, being mostly
ignorant of this area.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 15:59 ` Dmitry Gutov
@ 2016-03-20 20:31 ` Michael Albinus
2016-03-20 20:44 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 20:31 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/20/2016 05:54 PM, Michael Albinus wrote:
>
>> Anyway, the purpose of *this* bug report is that non-essential hasn't
>> been bound, and nobody could explain to me why it is wrong to bind it in
>> pcomplete.
>
> Probably because, if I have typed a valid remote file name for which
> there's no connection, and I explicitly invoke pcomplete, I *want* you
> to prompt me for login and password.
I'll do, once you have typed the first slash. This doesn't depend on
settings of non-essential.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 16:10 ` Stefan Monnier
@ 2016-03-20 20:40 ` Michael Albinus
2016-03-20 22:17 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 20:40 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>>>> Can you explain *your* understanding of `non-essential', then?
>>>>> What does this var mean, for you?
>>>> For Tramp, it is an indication that file name completion is in
>>>> progress.
>>> Huh? Why would it need such a variable for that, instead of getting
>>> this info from the fact that you're replying to
>>> `file-name-all-completions' (or `file-name-completion') rather than to
>>> some other request?
>> Because these aren't the only file name operations being called. You
>> have seen it in the backtraces I've shown earlier.
>
> But in that backtrace, it's OK for Tramp to open a new connection, since
> the user hit TAB.
Tramp does not know that the user hit TAB. It checks for `non-essential'.
>>> And why would it be called `non-essential' instead of `in-completion'?
>> I wanted to introduce `completion-only'.
>
> The crucial distinction to be made is not between "performing
> completion" and "not performing completion", but between "any normal
> operation, including completion in response to TAB" and "side-operations
> like on-the-fly completion à la icomplete or company or background data
> collection (like semantic might perform)".
I don't understand. Tramp doe not know where it has been called
from. It operates stateless. `non-essential' provides some context,
that's all.
>> As I understand the codebase of Emacs 25, no other use of
>> `non-essential' has appeared since then. Six years later.
>
> It should be bound in desktop.el when reloading a desktop, but instead
> desktop.el opted to use ad-hoc file-remote-p tests, IIUC.
I do not care desktop.el just now, it is the case we were discussing 6
years ago. As of today, there is no other use case for `non-essential'
in the codebase but the Tramp case.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 19:48 ` Drew Adams
@ 2016-03-20 20:42 ` Michael Albinus
0 siblings, 0 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 20:42 UTC (permalink / raw)
To: Drew Adams; +Cc: Stefan Monnier, 23006, Dmitry Gutov
Drew Adams <drew.adams@oracle.com> writes:
> Sorry, but please forget all that I said.
Done :-)
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 20:31 ` Michael Albinus
@ 2016-03-20 20:44 ` Dmitry Gutov
2016-03-20 20:53 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-20 20:44 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/20/2016 10:31 PM, Michael Albinus wrote:
> I'll do, once you have typed the first slash. This doesn't depend on
> settings of non-essential.
That sounds wrong.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 20:44 ` Dmitry Gutov
@ 2016-03-20 20:53 ` Michael Albinus
2016-03-20 21:05 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-20 20:53 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/20/2016 10:31 PM, Michael Albinus wrote:
>
>> I'll do, once you have typed the first slash. This doesn't depend on
>> settings of non-essential.
>
> That sounds wrong.
No. `non-essential' doesn't dictate what Tramp shall do, for example
whether it could open a new connection. It tells Tramp something about
the context ("Be careful, we are in file name completion!"). Tramp
decides then, whether it could perform an operation, or not.
Seeing a slash in the local file name part, as when you type
"/ssh:host:tmp/em TAB", gives Tramp the confidence that it is safe to
open a connection to "host".
I was too sloppy with my statement above. The first slash I've meant is
NOT the slash in "/ssh".
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 20:53 ` Michael Albinus
@ 2016-03-20 21:05 ` Dmitry Gutov
2016-03-20 22:19 ` Stefan Monnier
2016-03-21 15:46 ` Michael Albinus
0 siblings, 2 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-20 21:05 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/20/2016 10:53 PM, Michael Albinus wrote:
> No. `non-essential' doesn't dictate what Tramp shall do, for example
> whether it could open a new connection. It tells Tramp something about
> the context ("Be careful, we are in file name completion!"). Tramp
> decides then, whether it could perform an operation, or not.
According to the docstring, it only tells Tramp not to ask for the
credentials (when non-essential is non-nil). Whether Tramp is allowed to
open a connection it already knows credentials for, is not specified
(though I probably wouldn't).
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 20:40 ` Michael Albinus
@ 2016-03-20 22:17 ` Stefan Monnier
2016-03-20 22:28 ` Dmitry Gutov
2016-03-21 15:57 ` Michael Albinus
0 siblings, 2 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-20 22:17 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>> But in that backtrace, it's OK for Tramp to open a new connection, since
>> the user hit TAB.
> Tramp does not know that the user hit TAB. It checks for `non-essential'.
Exactly: pcomplete tells Tramp that it's OK to prompt for a password by
*not* setting non-essential. That's how Tramp can know.
>>>> And why would it be called `non-essential' instead of `in-completion'?
>>> I wanted to introduce `completion-only'.
>> The crucial distinction to be made is not between "performing
>> completion" and "not performing completion", but between "any normal
>> operation, including completion in response to TAB" and "side-operations
>> like on-the-fly completion à la icomplete or company or background data
>> collection (like semantic might perform)".
> I don't understand. Tramp does not know where it has been called
> from. It operates stateless. `non-essential' provides some context,
> that's all.
That's right. What I'm pointing out is that the context that Tramp
needs is not "are we performing some kind of completion", but "are we
allowed to prompt the user for a password" (admittedly, `non-essential'
is not limited to "passwords" but more generally means that we should
stay discrete. E.g. it also means we shouldn't block Emacs for too
long).
> I do not care desktop.el just now, it is the case we were discussing 6
> years ago. As of today, there is no other use case for `non-essential'
> in the codebase but the Tramp case.
Admittedly, the fact that the two sides (let-binder and var-reader)
don't agree on what that variable means, reduces its
usefulness significantly.
In my view, Tramp should never prompt the user for a password (nor
signal an error, tho emitting some warning message might be OK in some
cases) when non-essential is non-nil.
BTW, to clarify:
- Someone reported a bug about company's interaction with Tramp
(presumably via pcomplete). I suspect this should be fixed by having
company bind non-essential and IIUC Dmitry did just that (don't know
if it does/did fix the problem).
- As part of that company bug, this bug#23006 was filed, which has
nothing to do with non-essential since it's about a user interaction
which is "essential". I've pointed out a few issues that have to do
with the interaction between file-name-all-completions and
file-name-directory which might lead to fixing this bug, but AFAIK
this part of the discussion has not been followed yet.
Could we get back to the interaction between file-name-all-completions
and file-name-directory?
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 21:05 ` Dmitry Gutov
@ 2016-03-20 22:19 ` Stefan Monnier
2016-03-21 15:49 ` Michael Albinus
2016-03-21 15:46 ` Michael Albinus
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-20 22:19 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Michael Albinus, 23006
> According to the docstring, it only tells Tramp not to ask for the
> credentials (when non-essential is non-nil). Whether Tramp is allowed to
> open a connection it already knows credentials for, is not specified (though
> I probably wouldn't).
Indeed, the issue is "don't interfere with the main operation", so
prompting is a clear no-no. Opening a new connection might be
acceptable (as long as it doesn't block Emacs for too long, for
example).
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 22:17 ` Stefan Monnier
@ 2016-03-20 22:28 ` Dmitry Gutov
2016-03-21 15:57 ` Michael Albinus
1 sibling, 0 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-20 22:28 UTC (permalink / raw)
To: Stefan Monnier, Michael Albinus; +Cc: 23006
On 03/21/2016 12:17 AM, Stefan Monnier wrote:
> BTW, to clarify:
> - Someone reported a bug about company's interaction with Tramp
> (presumably via pcomplete).
Via pcomplete-completions-at-point.
> I suspect this should be fixed by having
> company bind non-essential and IIUC Dmitry did just that (don't know
> if it does/did fix the problem).
Not really fixed, no. That bug wasn't limited to idle completion, which
is the only case when I'm binding `non-essential' to t, like you suggested.
And even that bug wasn't about being prompted for credentials. The
difference in scenarios between that one and this one is very small:
https://github.com/company-mode/company-mode/pull/487
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 21:05 ` Dmitry Gutov
2016-03-20 22:19 ` Stefan Monnier
@ 2016-03-21 15:46 ` Michael Albinus
2016-03-21 15:49 ` Dmitry Gutov
1 sibling, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 15:46 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/20/2016 10:53 PM, Michael Albinus wrote:
>
>> No. `non-essential' doesn't dictate what Tramp shall do, for example
>> whether it could open a new connection. It tells Tramp something about
>> the context ("Be careful, we are in file name completion!"). Tramp
>> decides then, whether it could perform an operation, or not.
>
> According to the docstring, it only tells Tramp not to ask for the
> credentials (when non-essential is non-nil). Whether Tramp is allowed
> to open a connection it already knows credentials for, is not
> specified (though I probably wouldn't).
Tramp doesn't know in advance whether it has sufficient credentials for
a given connection. Therefore, it is only about whether Tramp shall open
a new connection. Asking for the credentials is the user visible part of
opening a new connection.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 15:46 ` Michael Albinus
@ 2016-03-21 15:49 ` Dmitry Gutov
2016-03-21 16:03 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-21 15:49 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/21/2016 05:46 PM, Michael Albinus wrote:
> Tramp doesn't know in advance whether it has sufficient credentials for
> a given connection. Therefore, it is only about whether Tramp shall open
> a new connection. Asking for the credentials is the user visible part of
> opening a new connection.
Then it shouldn't open a new connection, I guess. Or somehow abort as
soon as it finds out that it doesn't have the sufficient credentials.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 22:19 ` Stefan Monnier
@ 2016-03-21 15:49 ` Michael Albinus
2016-03-21 19:26 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 15:49 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> According to the docstring, it only tells Tramp not to ask for the
>> credentials (when non-essential is non-nil). Whether Tramp is allowed to
>> open a connection it already knows credentials for, is not specified (though
>> I probably wouldn't).
>
> Indeed, the issue is "don't interfere with the main operation", so
> prompting is a clear no-no. Opening a new connection might be
> acceptable (as long as it doesn't block Emacs for too long, for
> example).
Again, Tramp has no chance to determine this in advance. Whether new
credentials are required interactively, or not, is decided only after
Tramp has started to open a new connection.
Therefore, Tramp maps this decision to "shall I open a new connection,
or not". It does not make sense to start with the ping-pong of opening a
new connection, and to stop half the way due to missing credentials.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-20 22:17 ` Stefan Monnier
2016-03-20 22:28 ` Dmitry Gutov
@ 2016-03-21 15:57 ` Michael Albinus
1 sibling, 0 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 15:57 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>> But in that backtrace, it's OK for Tramp to open a new connection, since
>>> the user hit TAB.
>> Tramp does not know that the user hit TAB. It checks for `non-essential'.
>
> Exactly: pcomplete tells Tramp that it's OK to prompt for a password by
> *not* setting non-essential. That's how Tramp can know.
But that's not the case in *this* bug. Opening a new connection is not
the only decision Tramp takes depending on the setting of
non-essential. The other decision is, whether a remote file name like
"/adb:" is intended by the user as complete file name, or whether the
completion machinery is still working, and Tramp could expext also a
hostname after the method "adb". That's the problem in this bug; Tramp
has not been informed that we are still in completion mode, and it takes
"/adb:" serious (allowed to perform essential operations).
>>>>> And why would it be called `non-essential' instead of `in-completion'?
>>>> I wanted to introduce `completion-only'.
>>> The crucial distinction to be made is not between "performing
>>> completion" and "not performing completion", but between "any normal
>>> operation, including completion in response to TAB" and "side-operations
>>> like on-the-fly completion à la icomplete or company or background data
>>> collection (like semantic might perform)".
>> I don't understand. Tramp does not know where it has been called
>> from. It operates stateless. `non-essential' provides some context,
>> that's all.
>
> That's right. What I'm pointing out is that the context that Tramp
> needs is not "are we performing some kind of completion", but "are we
> allowed to prompt the user for a password" (admittedly, `non-essential'
> is not limited to "passwords" but more generally means that we should
> stay discrete. E.g. it also means we shouldn't block Emacs for too
> long).
As said the other email, this decision doesn't make sense to Tramp. It
can only decide "are we allowed to open a new connection".
>> I do not care desktop.el just now, it is the case we were discussing 6
>> years ago. As of today, there is no other use case for `non-essential'
>> in the codebase but the Tramp case.
>
> Admittedly, the fact that the two sides (let-binder and var-reader)
> don't agree on what that variable means, reduces its
> usefulness significantly.
>
> In my view, Tramp should never prompt the user for a password (nor
> signal an error, tho emitting some warning message might be OK in some
> cases) when non-essential is non-nil.
Again, pls speak about opening a new connection. And also again, this
bug is *not* about Tramp prompting a password when it is not
ecxpected. This bug is about Tramp taking "/adb:" as the final remote file
name a user wants to be treated, because it wasn't informed that we are
still in file name completion.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 15:49 ` Dmitry Gutov
@ 2016-03-21 16:03 ` Michael Albinus
2016-03-21 16:13 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 16:03 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/21/2016 05:46 PM, Michael Albinus wrote:
>
>> Tramp doesn't know in advance whether it has sufficient credentials for
>> a given connection. Therefore, it is only about whether Tramp shall open
>> a new connection. Asking for the credentials is the user visible part of
>> opening a new connection.
>
> Then it shouldn't open a new connection, I guess. Or somehow abort as
> soon as it finds out that it doesn't have the sufficient credentials.
The latter does not make sense. Starting with "ssh -l user host" and
then aborting due to a missing password is nonsense. More serious, it
could be regarded as attack by the server we try to connect. After
several such attempts (every time you are in file name completion and
must abort due to the missing credentials), the server shall blacklist us.
The first case makes more sense. Once non-essential is non-nil, Tramp
does not open a new connection until it is obvious that the user wants
this. The indication is a slash in the local file name part.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:03 ` Michael Albinus
@ 2016-03-21 16:13 ` Dmitry Gutov
2016-03-21 16:25 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-21 16:13 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/21/2016 06:03 PM, Michael Albinus wrote:
> The latter does not make sense. Starting with "ssh -l user host" and
> then aborting due to a missing password is nonsense. More serious, it
> could be regarded as attack by the server we try to connect. After
> several such attempts (every time you are in file name completion and
> must abort due to the missing credentials), the server shall blacklist us.
OK.
> The first case makes more sense. Once non-essential is non-nil, Tramp
> does not open a new connection until it is obvious that the user wants
> this. The indication is a slash in the local file name part.
That seems undesirable, and against non-essential's purpose.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:13 ` Dmitry Gutov
@ 2016-03-21 16:25 ` Michael Albinus
2016-03-21 16:45 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 16:25 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
>> The first case makes more sense. Once non-essential is non-nil, Tramp
>> does not open a new connection until it is obvious that the user wants
>> this. The indication is a slash in the local file name part.
>
> That seems undesirable, and against non-essential's purpose.
Whatever `non-essential's purpose is. *I* have asked for an indication
that file name completion is ongoing. Stefan wanted to use it in a more
general way. I haven't seen the other use cases yet.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:25 ` Michael Albinus
@ 2016-03-21 16:45 ` Dmitry Gutov
2016-03-21 16:55 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-21 16:45 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/21/2016 06:25 PM, Michael Albinus wrote:
> *I* have asked for an indication
> that file name completion is ongoing.
Do that in Tramp's file-name-all-completions handler?
> Stefan wanted to use it in a more
> general way. I haven't seen the other use cases yet.
Why do you need other cases? This *is* the more general way, and it
makes more sense to me, as an author of a completion UI.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:45 ` Dmitry Gutov
@ 2016-03-21 16:55 ` Michael Albinus
2016-03-21 18:10 ` Dmitry Gutov
2016-03-21 19:23 ` Stefan Monnier
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 16:55 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/21/2016 06:25 PM, Michael Albinus wrote:
>
>> *I* have asked for an indication
>> that file name completion is ongoing.
>
> Do that in Tramp's file-name-all-completions handler?
It's not only file-name-all-completions. Other file name operations are
involved also.
>> Stefan wanted to use it in a more
>> general way. I haven't seen the other use cases yet.
>
> Why do you need other cases? This *is* the more general way, and it
> makes more sense to me, as an author of a completion UI.
I don't need the other cases, and I've never asked for. The hypethetical
existence of such a more general meaning is the argument, that
non-essential does not simply indicate that file name completion is on
the way.
And I don't understand why Tramp shall refuse to provide file name
completion once the user has asked for this explicitely. Typing
"/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
user wants a new connection to "host", and she wants also to get
completion for "tmp/ema" on that host. I cannot see why Tramp shall be
forbidden to do this.
But again, *this* bug report is not about what Tramp does when
non-essential is bound to non-nil. *This* bug report is about, that
non-essential is nil, although file name completion is
undergoing. Remember, we are in eshell, the user has typed "cd /", and
afterwards she has called pcomplete.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:55 ` Michael Albinus
@ 2016-03-21 18:10 ` Dmitry Gutov
2016-03-21 18:36 ` Michael Albinus
2016-03-21 19:23 ` Stefan Monnier
1 sibling, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-21 18:10 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/21/2016 06:55 PM, Michael Albinus wrote:
> And I don't understand why Tramp shall refuse to provide file name
> completion once the user has asked for this explicitely. Typing
> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
> user wants a new connection to "host", and she wants also to get
> completion for "tmp/ema" on that host. I cannot see why Tramp shall be
> forbidden to do this.
You don't know that the user has pressed TAB. There are contexts where
the user hasn't pressed TAB, but we still call
file-name-all-completions, e.g. in an idle timer callback, to show what
*would* happen *if* they press tab.
> But again, *this* bug report is not about what Tramp does when
> non-essential is bound to non-nil. *This* bug report is about, that
> non-essential is nil, although file name completion is
> undergoing. Remember, we are in eshell, the user has typed "cd /", and
> afterwards she has called pcomplete.
Sure. I'm the author of this report. Still, it would be nice to have
`non-essential' have the intended effect.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 18:10 ` Dmitry Gutov
@ 2016-03-21 18:36 ` Michael Albinus
2016-03-21 21:26 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-21 18:36 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 03/21/2016 06:55 PM, Michael Albinus wrote:
>
>> And I don't understand why Tramp shall refuse to provide file name
>> completion once the user has asked for this explicitely. Typing
>> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
>> user wants a new connection to "host", and she wants also to get
>> completion for "tmp/ema" on that host. I cannot see why Tramp shall be
>> forbidden to do this.
>
> You don't know that the user has pressed TAB. There are contexts where
> the user hasn't pressed TAB, but we still call
> file-name-all-completions, e.g. in an idle timer callback, to show
> what *would* happen *if* they press tab.
Yes, that would be a legitimate scenario to ask Tramp not to open a new
connection. It's the first time somebody explained this, as far as I'm
aware of, thanks!
So maybe we need two different flags for Tramp: One to suppress opening a
new connection under any circumstances, and one flag to tell Tramp that
we are in the file name completion business, and it shall open a new
connection only it is safe (like seeing a slash in the local file name
part). Remember my scenario about ediff'ing remote files; I *want* file
name completion for the second file, even if there's no established
connection yet.
>> But again, *this* bug report is not about what Tramp does when
>> non-essential is bound to non-nil. *This* bug report is about, that
>> non-essential is nil, although file name completion is
>> undergoing. Remember, we are in eshell, the user has typed "cd /", and
>> afterwards she has called pcomplete.
>
> Sure. I'm the author of this report. Still, it would be nice to have
> `non-essential' have the intended effect.
Still, it would be nice to have let-bound non-essential in order to get
an effect.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 16:55 ` Michael Albinus
2016-03-21 18:10 ` Dmitry Gutov
@ 2016-03-21 19:23 ` Stefan Monnier
2016-03-22 9:25 ` Michael Albinus
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-21 19:23 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> And I don't understand why Tramp shall refuse to provide file name
> completion once the user has asked for this explicitely. Typing
> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
> user wants a new connection to "host",
We all agree. And in that case, non-essential will be nil, so Tramp
can open a connection. It can even do that without the second slash.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 15:49 ` Michael Albinus
@ 2016-03-21 19:26 ` Stefan Monnier
2016-03-22 9:27 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-21 19:26 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>> Indeed, the issue is "don't interfere with the main operation", so
>> prompting is a clear no-no. Opening a new connection might be
>> acceptable (as long as it doesn't block Emacs for too long, for
>> example).
> Again, Tramp has no chance to determine this in advance. Whether new
> credentials are required interactively, or not, is decided only after
> Tramp has started to open a new connection.
That's OK. I'm only talking about the intended meaning of
non-essential, independently of any particular use such as in Tramp.
If there's a risk of problems and non-essential is non-nil, then don't
open a new connection. If there's always such a risk, then never open
a new connection (when non-essential is non-nil).
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 18:36 ` Michael Albinus
@ 2016-03-21 21:26 ` Dmitry Gutov
2016-03-22 9:47 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-21 21:26 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/21/2016 08:36 PM, Michael Albinus wrote:
> Yes, that would be a legitimate scenario to ask Tramp not to open a new
> connection. It's the first time somebody explained this, as far as I'm
> aware of, thanks!
My pleasure.
> So maybe we need two different flags for Tramp: One to suppress opening a
> new connection under any circumstances, and one flag to tell Tramp that
> we are in the file name completion business, and it shall open a new
> connection only it is safe (like seeing a slash in the local file name
> part). Remember my scenario about ediff'ing remote files; I *want* file
> name completion for the second file, even if there's no established
> connection yet.
Do you have any reason to expect that `non-essential' would be set to
non-nil in that context?
From your description, I see the reason for the connection to be
established. It does not describe the slash-related caveats, and what
would make you avoid establishing a connection, e.g. in the case of ediff.
>> Sure. I'm the author of this report. Still, it would be nice to have
>> `non-essential' have the intended effect.
>
> Still, it would be nice to have let-bound non-essential in order to get
> an effect.
It's not that simple. First of all, I came to this bug from a report by
a company-mode user. And apparently we're getting the same error,
through pcomplete-completion-at-point, from two different user
interactions: one that should set `non-essential' (like Stefan
suggested), that would be the "idle completion", and one that shouldn't
set `non-essential', that would be manually initiated completion.
So setting `non-essential' in pcomplete-completion-at-point, or one of
its callees, looks like a wrong solution to me.
But getting back to this bug report:
I've just typed `M-x pcomplete', which should be a good indicator that I
probably want to be prompted for credentials, if required.
`non-essential' should be nil in this scenario. And yet, I shouldn't see
that error.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 19:23 ` Stefan Monnier
@ 2016-03-22 9:25 ` Michael Albinus
2016-03-22 12:02 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 9:25 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> And I don't understand why Tramp shall refuse to provide file name
>> completion once the user has asked for this explicitely. Typing
>> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
>> user wants a new connection to "host",
>
> We all agree. And in that case, non-essential will be nil, so Tramp
> can open a connection. It can even do that without the second slash.
As Dmitry has shown, there might be cases Tramp shall not open a new
connection even in this case (called from an idle timer). So we need a
distinction between "it is always blocked to open a new connection" and
"We recommend Tramp to open a new connection only when it is safe for
Tramp". One single value of non-essential doesn't fit this bill.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 19:26 ` Stefan Monnier
@ 2016-03-22 9:27 ` Michael Albinus
2016-03-22 12:02 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 9:27 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>> Indeed, the issue is "don't interfere with the main operation", so
>>> prompting is a clear no-no. Opening a new connection might be
>>> acceptable (as long as it doesn't block Emacs for too long, for
>>> example).
>> Again, Tramp has no chance to determine this in advance. Whether new
>> credentials are required interactively, or not, is decided only after
>> Tramp has started to open a new connection.
>
> That's OK. I'm only talking about the intended meaning of
> non-essential, independently of any particular use such as in Tramp.
> If there's a risk of problems and non-essential is non-nil, then don't
> open a new connection. If there's always such a risk, then never open
> a new connection (when non-essential is non-nil).
Unless we are running into the scenario given by Dmitry ...
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-21 21:26 ` Dmitry Gutov
@ 2016-03-22 9:47 ` Michael Albinus
2016-03-22 12:05 ` Stefan Monnier
2016-03-24 1:00 ` Dmitry Gutov
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 9:47 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
>> So maybe we need two different flags for Tramp: One to suppress opening a
>> new connection under any circumstances, and one flag to tell Tramp that
>> we are in the file name completion business, and it shall open a new
>> connection only it is safe (like seeing a slash in the local file name
>> part). Remember my scenario about ediff'ing remote files; I *want* file
>> name completion for the second file, even if there's no established
>> connection yet.
>
> Do you have any reason to expect that `non-essential' would be set to
> non-nil in that context?
Yes. The reason is that it has been always my understanding of
non-essential. See the discussion between Stefan and me six years ago,
when non-essential was born.
Tramp needs an indication that file name completion is in
progress. Otherwise, it would regard remote file names like "/adb:" safe
to be handled, and it would report an error then. Again, we are speaking
about arbitray file name operations but file-name-all-completions and
file-name-completion. Every completion package is free to call any magic
file name operation while file name completion is in progress, it isn't
forbidden anywhere.
> From your description, I see the reason for the connection to be
> established. It does not describe the slash-related caveats, and what
> would make you avoid establishing a connection, e.g. in the case of
> ediff.
I start to believe that we need two different indications. Let's assume
non-essential provides two different non-nil values, `strict' and
`best-effort'. (I don't insist in these names, I even don't insist it
must be indicated by non-essential. Any other variable would do).
In the `strict' case, Tramp must not open a new connection under any
circumstances. That's your idle timer case. There might be also other
cases, but it shall be used with care, because it restricts Tramp's
convenience.
In the `best-effort' case, Tramp is said that file name completion is in
progress, and it shouldn't open a new connection even if the file name
to be completed looks like a valid remote file name, like "/adb:". Tramp
opens a new connection only when it is safe, for example when it has
detected a slash in the local file name part of the file name to be
completed. That's the case when the user has hit TAB, for example. File
name completion packages, which bind non-essential to true these days,
shall change this to a binding of `best-effort'.
>> Still, it would be nice to have let-bound non-essential in order to get
>> an effect.
>
> It's not that simple. First of all, I came to this bug from a report
> by a company-mode user. And apparently we're getting the same error,
> through pcomplete-completion-at-point, from two different user
> interactions: one that should set `non-essential' (like Stefan
> suggested), that would be the "idle completion", and one that
> shouldn't set `non-essential', that would be manually initiated
> completion.
>
> So setting `non-essential' in pcomplete-completion-at-point, or one of
> its callees, looks like a wrong solution to me.
>
> But getting back to this bug report:
>
> I've just typed `M-x pcomplete', which should be a good indicator that
> I probably want to be prompted for credentials, if
> required. `non-essential' should be nil in this scenario. And yet, I
> shouldn't see that error.
`strict' is superior to `best-effort'. Coming back to this bug report, I
would expect that non-essential is bound to `best-effort' somewhere in
pcomplete or the involved completion package(s). When one of these
packages determine, that they run in an idle timer (or something
comparable dangerous), they should overwrite this binding of non-essential
with `strict'.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 9:25 ` Michael Albinus
@ 2016-03-22 12:02 ` Stefan Monnier
2016-03-22 12:08 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 12:02 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>> And I don't understand why Tramp shall refuse to provide file name
>>> completion once the user has asked for this explicitely. Typing
>>> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
>>> user wants a new connection to "host",
>> We all agree. And in that case, non-essential will be nil, so Tramp
>> can open a connection. It can even do that without the second slash.
> As Dmitry has shown, there might be cases Tramp shall not open a new
> connection even in this case (called from an idle timer).
In the idle timer case, non-essential will be non-nil, so Tramp should
never open a connection.
> So we need a distinction between "it is always blocked to open a new
> connection" and "We recommend Tramp to open a new connection only when
> it is safe for Tramp". One single value of non-essential doesn't fit
> this bill.
I must have missed something. Can you repeat which are the three
different cases you have in mind?
[ In this message, I only see two cases, and I'm not sure what the
third would be. ]
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 9:27 ` Michael Albinus
@ 2016-03-22 12:02 ` Stefan Monnier
2016-03-22 12:05 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 12:02 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> Unless we are running into the scenario given by Dmitry ...
Which scenario is that?
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 9:47 ` Michael Albinus
@ 2016-03-22 12:05 ` Stefan Monnier
2016-03-22 12:20 ` Michael Albinus
2016-03-24 1:00 ` Dmitry Gutov
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 12:05 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> Tramp needs an indication that file name completion is in progress.
That's where we disagree.
> Otherwise, it would regard remote file names like "/adb:" safe
> to be handled, and it would report an error then.
This bug report is not about "cd /adb: TAB signals an error" but about
"cd / TAB signals an error". The "/adb:" part comes from Tramp because
of a problem in Tramp's implementation of file-name-directory, AFAICT.
It has nothing to do with file name completion.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:02 ` Stefan Monnier
@ 2016-03-22 12:05 ` Michael Albinus
2016-03-22 13:19 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 12:05 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Unless we are running into the scenario given by Dmitry ...
>
> Which scenario is that?
Idle timer.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:02 ` Stefan Monnier
@ 2016-03-22 12:08 ` Michael Albinus
2016-03-22 13:18 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 12:08 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>>> And I don't understand why Tramp shall refuse to provide file name
>>>> completion once the user has asked for this explicitely. Typing
>>>> "/ssh:host:tmp/em TAB" is a very convincing argument to me, that the
>>>> user wants a new connection to "host",
>>> We all agree. And in that case, non-essential will be nil, so Tramp
>>> can open a connection. It can even do that without the second slash.
>> As Dmitry has shown, there might be cases Tramp shall not open a new
>> connection even in this case (called from an idle timer).
>
> In the idle timer case, non-essential will be non-nil, so Tramp should
> never open a connection.
>
>> So we need a distinction between "it is always blocked to open a new
>> connection" and "We recommend Tramp to open a new connection only when
>> it is safe for Tramp". One single value of non-essential doesn't fit
>> this bill.
>
> I must have missed something. Can you repeat which are the three
> different cases you have in mind?
> [ In this message, I only see two cases, and I'm not sure what the
> third would be. ]
I'm speaking only about two different cases. File name completion
started by user activity, like hitting TAB. And file name completion
started in the background, for example via idle timers.
If I have said "three" somewhere else, it was a mistake.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:05 ` Stefan Monnier
@ 2016-03-22 12:20 ` Michael Albinus
2016-03-22 13:37 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 12:20 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Tramp needs an indication that file name completion is in progress.
>
> That's where we disagree.
>
>> Otherwise, it would regard remote file names like "/adb:" safe
>> to be handled, and it would report an error then.
>
> This bug report is not about "cd /adb: TAB signals an error" but about
> "cd / TAB signals an error". The "/adb:" part comes from Tramp because
> of a problem in Tramp's implementation of file-name-directory, AFAICT.
> It has nothing to do with file name completion.
cd / TAB calls file-name-all-completions. This returns several
candidates, like "/adb:". That's OK.
Afterwards, (file-directory-p "adb:") is called from completion-file-name-table:
...
expand-file-name("adb:" "/")
apply(expand-file-name ("adb:" "/"))
(let* ((inhibit-file-name-handlers (cons (quote tramp-completion-file-name-handler) (cons (quote cygwin-mount-name-hook-function) (cons (quote cygwin-mount-map-drive-hook-function) (and (eq inhibit-file-name-operation operation) inhibit-file-name-handlers))))) (inhibit-file-name-operation operation)) (apply operation args))
tramp-completion-run-real-handler(expand-file-name ("adb:" "/"))
(if (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (let ((save-match-data-internal (match-data))) (unwind-protect (progn (apply (cdr fn) args)) (set-match-data save-match-data-internal (quote evaporate)))) (tramp-completion-run-real-handler operation args))
(let ((fn (assoc operation tramp-completion-file-name-handler-alist))) (if (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (let ((save-match-data-internal (match-data))) (unwind-protect (progn (apply (cdr fn) args)) (set-match-data save-match-data-internal (quote evaporate)))) (tramp-completion-run-real-handler operation args)))
tramp-completion-file-name-handler(expand-file-name "adb:" "/")
file-directory-p("adb:")
#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"]("adb:")
completion-file-name-table("/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] t)
comint-completion-file-name-table("/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] t)
complete-with-action(t comint-completion-file-name-table "/" #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"])
completion-table-with-predicate(comint-completion-file-name-table #[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] strict "/" nil t)
#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"]("/" nil t)
complete-with-action(t #[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] "/" nil)
#[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"]("/" nil t)
all-completions("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete-stub("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete-do-complete("/" #[771 "\302G\303 \x06\"\203)\x04\304\305\224OB\262\306\307\310\a\"!B\262\x04\305\225\302O\262\202\0\203:\x02\311=\204O\x02\242\312=\204O\313\314\x06B\237\315#\316\300\x06\b$\262\202\307\317\320\321\322\"\"\313\314\aB\237\315#\323\300\b\b\243\206k\315$\211@Y\203\223\x05\311=\203\204\316\x06\300\x06\n$\202\305\312@\x04GZ\\ABB\202\305\x05\311=\203\272\316\x06\300\x06\n$\x02@Z\321\324\325\326\327\330\x06!\331\"\332\333%\"\266\202\202\305\312\x05GZ\\ABB\266\203\207" [#[771 "\211\305=\203\0 \203\0\305\306\307B\310\x05#ABB\207\311\n\x1c\312\313\300\314\x06\x06\x06&*\207" [#[257 "\302\203\n\302!\205\0\301\203\0\301!\205\0\300?\206\0\300!\207" [file-directory-p #[257 "\211GSH\302=\203\0\301\205\0\303\301\"\202\0\300\205\0\303\300\"?\207" ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"] nil] 3 "\n\n(fn F)"] pcomplete-compare-entry-function pcomplete-ignore-case completion-ignore-case completion-ignored-extensions metadata cycle-sort-function #[257 "\301\b\"\207" [pcomplete-compare-entry-function sort] 4 "\n\n(fn COMPS)"] completion-file-name-table nil completion-table-with-predicate comint-completion-file-name-table strict] 10 "\n\n(fn S P A)"] pcomplete--env-regexp nil string-match 0 1 getenv match-string 2 t boundaries mapconcat identity "" complete-with-action apply + mapcar length completion-boundaries make-byte-code 257 "\211\300\301O\207" vconcat vector [nil] 4 "\n\n(fn S)"] 17 "\n\n(fn STRING PRED ACTION)"])
pcomplete(1)
funcall-interactively(pcomplete 1)
call-interactively(pcomplete record nil)
command-execute(pcomplete record)
execute-extended-command(nil "pcomplete" "pcomplete")
funcall-interactively(execute-extended-command nil "pcomplete" "pcomplete")
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
Tramp has no information, that file-name-completion is still in
progress, and does its job. It tries to connect to the remote host
"/adb:" in order to check.
If Tramp would have been said, that file name completion is still in
progress, it would behave correctly.
And it isn't only about file-directory-p, that's just an example. *Any*
file name operation could be called while file name completion is in
progress. That's why Tramp needs this information.
And yes, this is our basic disagreement. I'm not able to implement
proper Tramp operation without this information. Why do you refuse to
tell this to Tramp?
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:08 ` Michael Albinus
@ 2016-03-22 13:18 ` Stefan Monnier
2016-03-22 13:35 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 13:18 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> I'm speaking only about two different cases. File name completion
> started by user activity, like hitting TAB. And file name completion
> started in the background, for example via idle timers.
Also known as: the case where non-essential is nil and the case where
it's non-nil.
> If I have said "three" somewhere else, it was a mistake.
You said:
One single value of non-essential doesn't fit this bill.
-- Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:05 ` Michael Albinus
@ 2016-03-22 13:19 ` Stefan Monnier
0 siblings, 0 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 13:19 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>> Unless we are running into the scenario given by Dmitry ...
>> Which scenario is that?
> Idle timer.
That's the scenario where non-essential is non-nil.
IOW, the same scenario as icomplete.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:18 ` Stefan Monnier
@ 2016-03-22 13:35 ` Michael Albinus
2016-03-22 13:38 ` Stefan Monnier
2016-03-24 0:54 ` Dmitry Gutov
0 siblings, 2 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 13:35 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> I'm speaking only about two different cases. File name completion
>> started by user activity, like hitting TAB. And file name completion
>> started in the background, for example via idle timers.
>
> Also known as: the case where non-essential is nil and the case where
> it's non-nil.
Stefan, just a simple question: do you agree that Tramp shall be
informed that file name completion is in progress? I do not insist
that's via non-essential, any way this information bit is given will be
appreciated.
And in case you refuse this: why?
> -- Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 12:20 ` Michael Albinus
@ 2016-03-22 13:37 ` Stefan Monnier
2016-03-22 13:50 ` Michael Albinus
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 13:37 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> cd / TAB calls file-name-all-completions. This returns several
> candidates, like "/adb:". That's OK.
Indeed.
> Afterwards, (file-directory-p "adb:") is called from completion-file-name-table:
Aha, now we're going somewhere:
> file-directory-p("adb:")
> #[257 "\302\203\n\302!\205\301\203\301!\205\300?\206\300!\207"
> [file-directory-p #[257
> "\211GSH\302=\203\301\205\303\301\"\202\300\205\303\300\"?\207"
> ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"]
> nil] 3 "\n\n(fn F)"]("adb:")
> completion-file-name-table("/" #[257
> "\302\203\n\302!\205\301\203\301!\205\300?\206\300!\207"
> [file-directory-p #[257
> "\211GSH\302=\203\301\205\303\301\"\202\300\205\303\300\"?\207"
> ["~\\'" "\\`\\(\\.\\.?\\|CVS\\)/\\'" 47 string-match] 4 "\n\n(fn FILE)"]
> nil] 3 "\n\n(fn F)"] t)
So, it seems the issue is that the completion predicate calls
file-directory-p and that this happens in a part of the file name that's
just at the boundary between "a local file name" and "a remote file
name", so while file-name-all-completions did not need receive a remote
file name it returned (apparently) remote file names.
One avenue that may be needed then is to bind non-essential while
checking the completion predicate (somewhere in pcomplete.el, or
comint.el, or minibuffer.el.).
But in this specific instance, (file-directory-p "/adb:") should simply
return nil, IMO.
> Tramp has no information, that file-name-completion is still in
> progress, and does its job. It tries to connect to the remote host
> "/adb:" in order to check.
For me (file-directory-p "/adb:") doesn't try to connect to "adb" but
instead signals "Host name must not match method name 'adb'". I think
it's correct not to try to connect to "adb", but I think it should just
return nil because "/adb:" is not a directory.
> And yes, this is our basic disagreement. I'm not able to implement
> proper Tramp operation without this information. Why do you refuse to
> tell this to Tramp?
Because I don't see any fundamental difference between "completion" and
"non completion". I do see that in some cases, the completion code may
try to "generate" new file names, and maybe in these particular
sub-cases it would make sense to bind non-essential, but not wholesale
around the whole completion operation.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:35 ` Michael Albinus
@ 2016-03-22 13:38 ` Stefan Monnier
2016-03-22 13:50 ` Michael Albinus
2016-03-24 0:54 ` Dmitry Gutov
1 sibling, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 13:38 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
> Stefan, just a simple question: do you agree that Tramp shall be
> informed that file name completion is in progress?
No.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:37 ` Stefan Monnier
@ 2016-03-22 13:50 ` Michael Albinus
2016-03-22 14:01 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 13:50 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Tramp has no information, that file-name-completion is still in
>> progress, and does its job. It tries to connect to the remote host
>> "/adb:" in order to check.
>
> For me (file-directory-p "/adb:") doesn't try to connect to "adb" but
> instead signals "Host name must not match method name 'adb'". I think
> it's correct not to try to connect to "adb", but I think it should just
> return nil because "/adb:" is not a directory.
As said, it is not about file-directory-p. Any file name operation could
be called while file name completion is in progress.
> Stefan
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:38 ` Stefan Monnier
@ 2016-03-22 13:50 ` Michael Albinus
0 siblings, 0 replies; 82+ messages in thread
From: Michael Albinus @ 2016-03-22 13:50 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 23006, Dmitry Gutov
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Stefan, just a simple question: do you agree that Tramp shall be
>> informed that file name completion is in progress?
>
> No.
I give up. EOD.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:50 ` Michael Albinus
@ 2016-03-22 14:01 ` Stefan Monnier
0 siblings, 0 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-22 14:01 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006, Dmitry Gutov
>>> Tramp has no information, that file-name-completion is still in
>>> progress, and does its job. It tries to connect to the remote host
>>> "/adb:" in order to check.
>> For me (file-directory-p "/adb:") doesn't try to connect to "adb" but
>> instead signals "Host name must not match method name 'adb'". I think
>> it's correct not to try to connect to "adb", but I think it should just
>> return nil because "/adb:" is not a directory.
> As said, it is not about file-directory-p. Any file name operation could
> be called while file name completion is in progress.
I think it's worth going into the details to see why/where an actual
real problem comes up.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 13:35 ` Michael Albinus
2016-03-22 13:38 ` Stefan Monnier
@ 2016-03-24 0:54 ` Dmitry Gutov
2016-03-24 13:15 ` Stefan Monnier
1 sibling, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-24 0:54 UTC (permalink / raw)
To: Michael Albinus, Stefan Monnier; +Cc: 23006
Hey Michael,
On 03/22/2016 03:35 PM, Michael Albinus wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>>> I'm speaking only about two different cases. File name completion
>>> started by user activity, like hitting TAB. And file name completion
>>> started in the background, for example via idle timers.
>>
>> Also known as: the case where non-essential is nil and the case where
>> it's non-nil.
This looks reasonable to me.
> Stefan, just a simple question: do you agree that Tramp shall be
> informed that file name completion is in progress?
How would that happen? I don't have to use file-name-all-completions to
implement file completion operation. Until recently, company-files used
directory-files at least for some inputs, to implement file completion.
Would every third-party author who decided to implement their own file
completion mechanism have to find out about some new, Tramp-related
variable, and bind it to t in their code?
That doesn't sound great.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-22 9:47 ` Michael Albinus
2016-03-22 12:05 ` Stefan Monnier
@ 2016-03-24 1:00 ` Dmitry Gutov
1 sibling, 0 replies; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-24 1:00 UTC (permalink / raw)
To: Michael Albinus; +Cc: Stefan Monnier, 23006
On 03/22/2016 11:47 AM, Michael Albinus wrote:
>>> part). Remember my scenario about ediff'ing remote files; I *want* file
>>> name completion for the second file, even if there's no established
>>> connection yet.
>>
>> Do you have any reason to expect that `non-essential' would be set to
>> non-nil in that context?
>
> Yes. The reason is that it has been always my understanding of
> non-essential. See the discussion between Stefan and me six years ago,
> when non-essential was born.
I've only managed to find the 2012's discussion in the archive.
> In the `strict' case, Tramp must not open a new connection under any
> circumstances. That's your idle timer case. There might be also other
> cases, but it shall be used with care, because it restricts Tramp's
> convenience.
So far, company-files has been doing this with
(or (not (file-remote-p file))
(file-remote-p file nil t))
where file is the current input.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-24 0:54 ` Dmitry Gutov
@ 2016-03-24 13:15 ` Stefan Monnier
2016-03-24 13:54 ` Dmitry Gutov
0 siblings, 1 reply; 82+ messages in thread
From: Stefan Monnier @ 2016-03-24 13:15 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Michael Albinus, 23006
> How would that happen? I don't have to use file-name-all-completions to
> implement file completion operation. Until recently, company-files used
> directory-files at least for some inputs, to implement file completion.
That's exactly Michael's point: that Tramp can't know that the current
operation is part of some kind of completion, just by looking at which
Tramp functions are called.
The question is: does Tramp need to know whether or not this
`directory-files', or `file-directory-p' (or
`file-name-all-completions', which may also be called in non-completion
contexts) is called as part of a completion operation?
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-24 13:15 ` Stefan Monnier
@ 2016-03-24 13:54 ` Dmitry Gutov
2016-03-24 15:56 ` Stefan Monnier
0 siblings, 1 reply; 82+ messages in thread
From: Dmitry Gutov @ 2016-03-24 13:54 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Michael Albinus, 23006
On 03/24/2016 03:15 PM, Stefan Monnier wrote:
> That's exactly Michael's point: that Tramp can't know that the current
> operation is part of some kind of completion, just by looking at which
> Tramp functions are called.
That seems to be everybody's point.
> The question is: does Tramp need to know whether or not this
> `directory-files', or `file-directory-p' (or
> `file-name-all-completions', which may also be called in non-completion
> contexts) is called as part of a completion operation?
A general purpose function cannot know.
file-name-all-completions cannot know either, because it can be called
outside of completion context.
A completion UI cannot know, in general, because it can be used to
complete just about anything, and it doesn't always know what it's
completing.
Can completion-file-name-table know?
Maybe a niche completion backend like company-files is the only kind of
code that *can* know because it's not used for anything else, for now.
But it's third-party code anyway.
Maybe "we're in a completion operation" is not something that's reliably
knowable, in a loosely coupled system like Emacs.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-24 13:54 ` Dmitry Gutov
@ 2016-03-24 15:56 ` Stefan Monnier
0 siblings, 0 replies; 82+ messages in thread
From: Stefan Monnier @ 2016-03-24 15:56 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Michael Albinus, 23006
>> The question is: does Tramp need to know whether or not this
>> `directory-files', or `file-directory-p' (or
>> `file-name-all-completions', which may also be called in non-completion
>> contexts) is called as part of a completion operation?
>
> A general purpose function cannot know.
> file-name-all-completions cannot know either, because it can be called
> outside of completion context.
>
> A completion UI cannot know, in general, because it can be used to complete
> just about anything, and it doesn't always know what it's completing.
AFAIK, by definition, a completion UI knows that it's performing completion.
So, I don't see much difficulty in telling Tramp that we're
performing completion: just let-bind some new `in-completion' variable
in the few completion UIs we have.
The problem is that I don't see any reason why Tramp would need to know.
Stefan
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 2:01 bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode Dmitry Gutov
2016-03-14 2:22 ` Stefan Monnier
2016-03-14 7:34 ` Michael Albinus
@ 2017-03-09 18:52 ` Michael Albinus
2017-03-15 12:42 ` Michael Albinus
3 siblings, 0 replies; 82+ messages in thread
From: Michael Albinus @ 2017-03-09 18:52 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
Hi Dmitry,
> As mentioned in a recent discussion:
>
> 1. M-x eshell
> 2. type 'cd /'
> 3. M-: (require 'tramp) ;; New step!
> 4. M-x pcomplete
>
> I'm getting the error 'tramp-file-name-handler: Host name must not match
> method "adb"'.
I've committed a patch to master which ought to solve this (and
hopefully other completion related) bugs for Tramp. Could you, pls
check?
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2016-03-14 2:01 bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode Dmitry Gutov
` (2 preceding siblings ...)
2017-03-09 18:52 ` Michael Albinus
@ 2017-03-15 12:42 ` Michael Albinus
2017-03-17 11:30 ` Dmitry Gutov
3 siblings, 1 reply; 82+ messages in thread
From: Michael Albinus @ 2017-03-15 12:42 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: 23006
Dmitry Gutov <dgutov@yandex.ru> writes:
Hi Dmitry,
> As mentioned in a recent discussion:
>
> 1. M-x eshell
> 2. type 'cd /'
> 3. M-: (require 'tramp) ;; New step!
> 4. M-x pcomplete
>
> I'm getting the error 'tramp-file-name-handler: Host name must not match
> method "adb"'.
According to the recent changes of Tramp in the master branch, this
error does not happen anymore. Could you, pls, confirm?
I would expect pcomplete also to show possible Tramp methods like
"sudo:". It doesn't. But this is rather related to pcomplete, so it is
not relevant for *this* bug.
Best regards, Michael.
^ permalink raw reply [flat|nested] 82+ messages in thread
* bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode
2017-03-15 12:42 ` Michael Albinus
@ 2017-03-17 11:30 ` Dmitry Gutov
0 siblings, 0 replies; 82+ messages in thread
From: Dmitry Gutov @ 2017-03-17 11:30 UTC (permalink / raw)
To: Michael Albinus; +Cc: 23006-done
Hi Michael,
On 15.03.2017 14:42, Michael Albinus wrote:
>> As mentioned in a recent discussion:
>>
>> 1. M-x eshell
>> 2. type 'cd /'
>> 3. M-: (require 'tramp) ;; New step!
>> 4. M-x pcomplete
>>
>> I'm getting the error 'tramp-file-name-handler: Host name must not match
>> method "adb"'.
>
> According to the recent changes of Tramp in the master branch, this
> error does not happen anymore. Could you, pls, confirm?
Looks fixed, thanks! Closing.
^ permalink raw reply [flat|nested] 82+ messages in thread
end of thread, other threads:[~2017-03-17 11:30 UTC | newest]
Thread overview: 82+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-14 2:01 bug#23006: 25.0.92; Loading Tramp breaks pcomplete in eshell-mode Dmitry Gutov
2016-03-14 2:22 ` Stefan Monnier
2016-03-14 7:34 ` Michael Albinus
2016-03-15 3:31 ` Stefan Monnier
2016-03-15 8:43 ` Michael Albinus
2016-03-15 11:09 ` Dmitry Gutov
2016-03-17 0:42 ` Stefan Monnier
2016-03-17 19:43 ` Michael Albinus
2016-03-17 19:44 ` Dmitry Gutov
2016-03-17 19:54 ` Michael Albinus
2016-03-17 22:55 ` Dmitry Gutov
2016-03-18 8:27 ` Michael Albinus
2016-03-18 16:13 ` Stefan Monnier
2016-03-18 17:01 ` Michael Albinus
2016-03-18 17:53 ` Stefan Monnier
2016-03-18 20:21 ` Michael Albinus
2016-03-18 22:41 ` Stefan Monnier
2016-03-19 8:28 ` Michael Albinus
2016-03-19 12:35 ` Stefan Monnier
2016-03-19 15:28 ` Michael Albinus
2016-03-19 20:04 ` Stefan Monnier
2016-03-20 15:08 ` Michael Albinus
2016-03-20 15:23 ` Stefan Monnier
2016-03-20 15:46 ` Michael Albinus
2016-03-20 16:10 ` Stefan Monnier
2016-03-20 20:40 ` Michael Albinus
2016-03-20 22:17 ` Stefan Monnier
2016-03-20 22:28 ` Dmitry Gutov
2016-03-21 15:57 ` Michael Albinus
2016-03-20 15:38 ` Drew Adams
2016-03-20 15:54 ` Michael Albinus
2016-03-20 15:59 ` Dmitry Gutov
2016-03-20 20:31 ` Michael Albinus
2016-03-20 20:44 ` Dmitry Gutov
2016-03-20 20:53 ` Michael Albinus
2016-03-20 21:05 ` Dmitry Gutov
2016-03-20 22:19 ` Stefan Monnier
2016-03-21 15:49 ` Michael Albinus
2016-03-21 19:26 ` Stefan Monnier
2016-03-22 9:27 ` Michael Albinus
2016-03-22 12:02 ` Stefan Monnier
2016-03-22 12:05 ` Michael Albinus
2016-03-22 13:19 ` Stefan Monnier
2016-03-21 15:46 ` Michael Albinus
2016-03-21 15:49 ` Dmitry Gutov
2016-03-21 16:03 ` Michael Albinus
2016-03-21 16:13 ` Dmitry Gutov
2016-03-21 16:25 ` Michael Albinus
2016-03-21 16:45 ` Dmitry Gutov
2016-03-21 16:55 ` Michael Albinus
2016-03-21 18:10 ` Dmitry Gutov
2016-03-21 18:36 ` Michael Albinus
2016-03-21 21:26 ` Dmitry Gutov
2016-03-22 9:47 ` Michael Albinus
2016-03-22 12:05 ` Stefan Monnier
2016-03-22 12:20 ` Michael Albinus
2016-03-22 13:37 ` Stefan Monnier
2016-03-22 13:50 ` Michael Albinus
2016-03-22 14:01 ` Stefan Monnier
2016-03-24 1:00 ` Dmitry Gutov
2016-03-21 19:23 ` Stefan Monnier
2016-03-22 9:25 ` Michael Albinus
2016-03-22 12:02 ` Stefan Monnier
2016-03-22 12:08 ` Michael Albinus
2016-03-22 13:18 ` Stefan Monnier
2016-03-22 13:35 ` Michael Albinus
2016-03-22 13:38 ` Stefan Monnier
2016-03-22 13:50 ` Michael Albinus
2016-03-24 0:54 ` Dmitry Gutov
2016-03-24 13:15 ` Stefan Monnier
2016-03-24 13:54 ` Dmitry Gutov
2016-03-24 15:56 ` Stefan Monnier
2016-03-20 16:38 ` Drew Adams
2016-03-20 19:48 ` Drew Adams
2016-03-20 20:42 ` Michael Albinus
2016-03-18 22:51 ` Dmitry Gutov
2016-03-17 0:50 ` Stefan Monnier
2016-03-17 19:49 ` Michael Albinus
2016-03-18 16:06 ` Stefan Monnier
2017-03-09 18:52 ` Michael Albinus
2017-03-15 12:42 ` Michael Albinus
2017-03-17 11:30 ` Dmitry Gutov
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.