* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
@ 2021-06-01 17:29 simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-04 17:54 ` Dmitry Gutov
2021-06-05 18:39 ` João Távora
0 siblings, 2 replies; 7+ messages in thread
From: simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-06-01 17:29 UTC (permalink / raw)
To: 48782
with emacs -Q
1)
M-x -> fido-mode
C-x C-f -> type "$HOME" -> enter opens dired buffer in $HOME directory
instead of continuing find-file $HOME to select a file to open
2)
similar thing happens if:
M-x -> fido-mode
C-x C-f -> type "$HOME/.emacs.d" -> enter opens dired buffer in $HOME/emacs.d directory
instead of continuing find-file $HOME/emacs.d to select a file to open
in pure icomplete-mode find-file seems to work as expected after typing "$HOME/"
-> descent into directories via C-M-i?
ido-mode will not match environment variables but when typing
M-x -> ido-mode
C-x C-f -> type "$HOME/" -> ido expands $HOME to the actuall path and
find-file continues as expected
ido.el has
(defun ido-complete ()
"Try and complete the current pattern amongst the file names."
(interactive)
(let (res)
(cond
(ido-incomplete-regexp
;; Do nothing
)
((and (memq ido-cur-item '(file dir))
(string-match "[$]" ido-text))
(let ((evar (substitute-in-file-name (concat ido-current-directory ido-text))))
(if (not (file-exists-p (file-name-directory evar)))
(message "Expansion generates non-existing directory name")
(if (file-directory-p evar)
(ido-set-current-directory evar)
(let ((d (or (file-name-directory evar) "/"))
(f (file-name-nondirectory evar)))
(when (file-directory-p d)
(ido-set-current-directory d)
(setq ido-text-init f))))
(setq ido-exit 'refresh)
(exit-minibuffer))))
This was tested in emacs 28 but also 27
In GNU Emacs 28.0.50 (build 1, x86_64-apple-darwin20.4.0, NS appkit-2022.44 Version 11.3.1 (Build 20E241))
of 2021-05-20 built on Zwei.local
Windowing system distributor 'Apple', version 10.3.2022
System Description: macOS 11.4
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/usr/local/share/emacs/site-lisp
--infodir=/usr/local/Cellar/emacs-plus@28/28.0.50/share/info/emacs
--prefix=/usr/local/Cellar/emacs-plus@28/28.0.50 --with-xml2
--with-gnutls --with-native-compilation --without-dbus
--with-imagemagick --with-modules --with-rsvg --with-ns
--disable-ns-self-contained 'CFLAGS=-I/usr/local/opt/gcc/include
-I/usr/local/opt/libgccjit/include -I/usr/local/opt/gmp/include
-I/usr/local/opt/jpeg/include' 'LDFLAGS=-L/usr/local/lib/gcc/11
-I/usr/local/opt/gcc/include -I/usr/local/opt/libgccjit/include
-I/usr/local/opt/gmp/include -I/usr/local/opt/jpeg/include''
Configured features:
ACL GIF GLIB GMP GNUTLS IMAGEMAGICK JPEG JSON LCMS2 LIBXML2 MODULES
NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG THREADS TIFF
TOOLKIT_SCROLL_BARS XIM ZLIB
Important settings:
value of $LANG: en_GB.UTF-8
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg epg-config gnus-util rmail
rmail-loaddefs auth-source cl-seq eieio eieio-core cl-macs
eieio-loaddefs password-cache json map text-property-search time-date
subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
iso-transl tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads kqueue cocoa ns lcms2
multi-tty make-network-process native-compile emacs)
Memory information:
((conses 16 67326 7749)
(symbols 48 6525 0)
(strings 32 18694 1859)
(string-bytes 1 645296)
(vectors 16 13385)
(vector-slots 8 280235 8834)
(floats 8 22 29)
(intervals 56 226 0)
(buffers 992 10))
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-01 17:29 bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-06-04 17:54 ` Dmitry Gutov
2021-06-05 18:39 ` João Távora
1 sibling, 0 replies; 7+ messages in thread
From: Dmitry Gutov @ 2021-06-04 17:54 UTC (permalink / raw)
To: simon254, 48782, João Távora
Joao, could you take a look?
On 01.06.2021 20:29, simon254--- via Bug reports for GNU Emacs, the
Swiss army knife of text editors wrote:
> with emacs -Q
>
> 1)
> M-x -> fido-mode
> C-x C-f -> type "$HOME" -> enter opens dired buffer in $HOME directory
> instead of continuing find-file $HOME to select a file to open
>
> 2)
> similar thing happens if:
> M-x -> fido-mode
> C-x C-f -> type "$HOME/.emacs.d" -> enter opens dired buffer in $HOME/emacs.d directory
> instead of continuing find-file $HOME/emacs.d to select a file to open
>
> in pure icomplete-mode find-file seems to work as expected after typing "$HOME/"
> -> descent into directories via C-M-i?
>
> ido-mode will not match environment variables but when typing
>
> M-x -> ido-mode
> C-x C-f -> type "$HOME/" -> ido expands $HOME to the actuall path and
> find-file continues as expected
>
> ido.el has
>
> (defun ido-complete ()
> "Try and complete the current pattern amongst the file names."
> (interactive)
> (let (res)
> (cond
> (ido-incomplete-regexp
> ;; Do nothing
> )
> ((and (memq ido-cur-item '(file dir))
> (string-match "[$]" ido-text))
> (let ((evar (substitute-in-file-name (concat ido-current-directory ido-text))))
> (if (not (file-exists-p (file-name-directory evar)))
> (message "Expansion generates non-existing directory name")
> (if (file-directory-p evar)
> (ido-set-current-directory evar)
> (let ((d (or (file-name-directory evar) "/"))
> (f (file-name-nondirectory evar)))
> (when (file-directory-p d)
> (ido-set-current-directory d)
> (setq ido-text-init f))))
> (setq ido-exit 'refresh)
> (exit-minibuffer))))
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-01 17:29 bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-04 17:54 ` Dmitry Gutov
@ 2021-06-05 18:39 ` João Távora
2021-06-05 20:51 ` João Távora
1 sibling, 1 reply; 7+ messages in thread
From: João Távora @ 2021-06-05 18:39 UTC (permalink / raw)
To: 48782; +Cc: simon254
tag 48782 important
thanks
simon254--- via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@gnu.org> writes:
> with emacs -Q
>
> 1)
> M-x -> fido-mode
> C-x C-f -> type "$HOME" -> enter opens dired buffer in $HOME directory
> instead of continuing find-file $HOME to select a file to open
Thanks, I reproduced this and will try to fix it. Doesn't seem very
hard, but we'll see.
João
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-05 18:39 ` João Távora
@ 2021-06-05 20:51 ` João Távora
2021-06-06 8:01 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 7+ messages in thread
From: João Távora @ 2021-06-05 20:51 UTC (permalink / raw)
To: 48782; +Cc: simon254, 48782-done
João Távora <joaotavora@gmail.com> writes:
> tag 48782 important
> thanks
>
> simon254--- via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <bug-gnu-emacs@gnu.org> writes:
>
>> with emacs -Q
>>
>> 1)
>> M-x -> fido-mode
>> C-x C-f -> type "$HOME" -> enter opens dired buffer in $HOME directory
>> instead of continuing find-file $HOME to select a file to open
>
> Thanks, I reproduced this and will try to fix it. Doesn't seem very
> hard, but we'll see.
I pushed a commit to master that should fix it. It's
45d711a356b4c5e75d0b6e4391313ca34f57b4bb, a very simple patch:
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 03a191cb0b..08b4ef2030 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -331,7 +331,8 @@ icomplete-fido-ret
(file-name-directory (icomplete--field-string))))
(current (car completion-all-sorted-completions))
(probe (and dir current
- (expand-file-name (directory-file-name current) dir))))
+ (expand-file-name (directory-file-name current)
+ (substitute-env-vars dir)))))
(cond ((and probe (file-directory-p probe) (not (string= current "./")))
(icomplete-force-complete))
(t
Closing this bug, but I'll reopen if it ends up not doing what you
wanted.
João
^ permalink raw reply related [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-05 20:51 ` João Távora
@ 2021-06-06 8:01 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-06 16:16 ` João Távora
0 siblings, 1 reply; 7+ messages in thread
From: simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-06-06 8:01 UTC (permalink / raw)
To: joaotavora, 48782; +Cc: 48782-done
Thank you very much for looking at this!
Now, if I type $HOM I get candidate $HOME, then I have to M-Tab to insert the candidate and type "/" to continue find-file in the directory, and then everything works as expected. This makes it now definitely usable for me!
It might still be a bit confusing that in case of an environment variable which value is a directory, Enter does open dired instead of transversing into the directory with find-file (typing $HOM followed by Enter opens dired in home). But I don't know if changing this would be better or worse than the current behaviour after your fix - or possible at all.
Simon
> On 05/06/2021 21:51 João Távora <joaotavora@gmail.com> wrote:
>
>
> João Távora <joaotavora@gmail.com> writes:
>
> > tag 48782 important
> > thanks
> >
> > simon254--- via "Bug reports for GNU Emacs, the Swiss army knife of text
> > editors" <bug-gnu-emacs@gnu.org> writes:
> >
> >> with emacs -Q
> >>
> >> 1)
> >> M-x -> fido-mode
> >> C-x C-f -> type "$HOME" -> enter opens dired buffer in $HOME directory
> >> instead of continuing find-file $HOME to select a file to open
> >
> > Thanks, I reproduced this and will try to fix it. Doesn't seem very
> > hard, but we'll see.
>
> I pushed a commit to master that should fix it. It's
> 45d711a356b4c5e75d0b6e4391313ca34f57b4bb, a very simple patch:
>
> diff --git a/lisp/icomplete.el b/lisp/icomplete.el
> index 03a191cb0b..08b4ef2030 100644
> --- a/lisp/icomplete.el
> +++ b/lisp/icomplete.el
> @@ -331,7 +331,8 @@ icomplete-fido-ret
> (file-name-directory (icomplete--field-string))))
> (current (car completion-all-sorted-completions))
> (probe (and dir current
> - (expand-file-name (directory-file-name current) dir))))
> + (expand-file-name (directory-file-name current)
> + (substitute-env-vars dir)))))
> (cond ((and probe (file-directory-p probe) (not (string= current "./")))
> (icomplete-force-complete))
> (t
>
>
> Closing this bug, but I'll reopen if it ends up not doing what you
> wanted.
>
> João
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-06 8:01 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-06-06 16:16 ` João Távora
2021-06-07 18:23 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 7+ messages in thread
From: João Távora @ 2021-06-06 16:16 UTC (permalink / raw)
To: simon254; +Cc: 48782
[-- Attachment #1: Type: text/plain, Size: 828 bytes --]
On Sun, Jun 6, 2021, 09:01 <simon254@mailbox.org> wrote:
> Thank you very much for looking at this!
>
> Now, if I type $HOM I get candidate $HOME, then I have to M-Tab to insert
> the candidate and type "/" to continue find-file in the directory, and then
> everything works as expected. This makes it now definitely usable for me!
>
> It might still be a bit confusing that in case of an environment variable
> which value is a directory, Enter does open dired instead of transversing
> into the directory with find-file (typing $HOM followed by Enter opens
> dired in home). But I don't know if changing this would be better or worse
> than the current behaviour after your fix - or possible at all.
>
May be possible. Is that what Ido does? I'll try in a couple of days, ping
me here if I forget.
João
[-- Attachment #2: Type: text/html, Size: 1238 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour
2021-06-06 16:16 ` João Távora
@ 2021-06-07 18:23 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 7+ messages in thread
From: simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-06-07 18:23 UTC (permalink / raw)
To: João Távora; +Cc: 48782
great, will do!
off topic:
would also be nice to have some simple helper functions to go to the first and last match in case of fido-vertical-mode, something along the lines of
(defun icomplete-vertical-last-completions ()
"Go to last completions entry..."
(interactive)
(let* ((beg (icomplete--field-beg))
(end (icomplete--field-end))
(comps (completion-all-sorted-completions beg end))
(last (last comps)))
(while (consp (cdr comps))
(push (pop comps) icomplete--scrolled-past)
(setq icomplete--scrolled-completions comps)
(completion--cache-all-sorted-completions beg end comps))))
(defun icomplete-vertical-first-completions ()
"Go to first completions entry..."
(interactive)
(let* ((beg (icomplete--field-beg))
(end (icomplete--field-end))
(comps (completion-all-sorted-completions beg end))
last-but-one)
(while icomplete--scrolled-past
(push (pop icomplete--scrolled-past) comps)
(setq icomplete--scrolled-completions comps))
(completion--cache-all-sorted-completions beg end comps)))
> On 06/06/2021 17:16 João Távora <joaotavora@gmail.com> wrote:
>
>
> On Sun, Jun 6, 2021, 09:01 <simon254@mailbox.org> wrote:
> > Thank you very much for looking at this!
> >
> > Now, if I type $HOM I get candidate $HOME, then I have to M-Tab to insert the candidate and type "/" to continue find-file in the directory, and then everything works as expected. This makes it now definitely usable for me!
> >
> > It might still be a bit confusing that in case of an environment variable which value is a directory, Enter does open dired instead of transversing into the directory with find-file (typing $HOM followed by Enter opens dired in home). But I don't know if changing this would be better or worse than the current behaviour after your fix - or possible at all.
>
> May be possible. Is that what Ido does? I'll try in a couple of days, ping me here if I forget.
>
> João
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-06-07 18:23 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-01 17:29 bug#48782: 28.0.50; fido-mode: shell variables distort find-file behaviour simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-04 17:54 ` Dmitry Gutov
2021-06-05 18:39 ` João Távora
2021-06-05 20:51 ` João Távora
2021-06-06 8:01 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-06 16:16 ` João Távora
2021-06-07 18:23 ` simon254--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).