unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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).