Package: emacs;
Reported by: Omar Antolín Camarena <omar <at> matem.unam.mx>
Date: Wed, 20 May 2020 17:50:02 UTC
Severity: minor
Tags: moreinfo
Merged with 41412
Found in versions 26.1, 27.0.90
Fixed in version 29.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 41424 in the body.
You can then email your comments to 41424 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Wed, 20 May 2020 17:50:02 GMT) Full text and rfc822 format available.Omar Antolín Camarena <omar <at> matem.unam.mx>
:bug-gnu-emacs <at> gnu.org
.
(Wed, 20 May 2020 17:50:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Omar Antolín Camarena <omar <at> matem.unam.mx> To: bug-gnu-emacs <at> gnu.org Subject: 26.1; default-directory in *Completions* buffer Date: Wed, 20 May 2020 12:49:23 -0500
There is a bit of logic in `complete-setup-function' (from simple.el) to set the default directory in the *Completions* buffer: ;; FIXME: This is a bad hack. We try to set the default-directory ;; in the *Completions* buffer so that the relative file names ;; displayed there can be treated as valid file names, independently ;; from the completion context. But this suffers from many problems: ;; - It's not clear when the completions are file names. With some ;; completion tables (e.g. bzr revision specs), the listed ;; completions can mix file names and other things. ;; - It doesn't pay attention to possible quoting. ;; - With fancy completion styles, the code below will not always ;; find the right base directory. (if minibuffer-completing-file-name (file-name-as-directory (expand-file-name (buffer-substring (minibuffer-prompt-end) (- (point) (or completion-base-size 0)))))) As the comment says, this is brittle, but better than nothing. I believe, however, that the `file-name-as-directory' is a typo and probably `file-name-directory' was intended instead. Say you have a directory ~/foo with files baz and bar. If you are completing file names and have type ~/foo/b the completions are bar and baz. The most useful value for default-directory in the *Completions* buffer would be ~/foo/, but the current code sets it to the non-existent ~/foo/b/ instead. If `complete-setup-function' were changed to use `file-name-directory' instead, then the default-directory would be set to ~/foo/. Of course, there is no correct default-directory in general. As the comment mentions, sometimes only some of the completions are file names, and even those completions that are file names need not all be in the same directory. But I think this change would make the default-directory useful in many more cases than it currently is: now it basically is only a good guess when what you've type so far is a directory name. With my suggested fix it's still easy to get useless default-directories. For example with directories: ~/foo: bar baz ~/fez: bing boom the partial-completion completion style will produce the following completions for ~/f/b: fez/bing fez/boom foo/bar foo/baz The most useful default-directory for the *Completions* buffer would be ~/, of course. The current code would give ~/f/b/ and my proposed "fix" would produce ~/f/ To my mind a good compromise would be to ignore all the possible fancy completion tables and focus on behavior that is correct for read-file-name under the partial-completion completion style. (In principle the most reasonable default-directory could be computed from just the contents of the *Completions* buffer, but it might be convenient to "cheat" and use the minibuffer contents, as the current `completion-setup-function' does --and if Emacs does "cheat", it would be good for the cheat to work with partial-completion of paths.) But the above "good compromise" would take some work that I haven't carefully thought out. I think simply changing `file-name-directory' to `file-name-as-directory' would be a clear improvement with no reason not to do it. In GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2019-09-22, modified by Debian built on x86-grnet-01 Windowing system distributor 'The X.Org Foundation', version 11.0.12001000 Recent messages: Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)... Loading debian-ispell... Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done Loading debian-ispell...done Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done Loading mb-depth...done Loading minibuf-eldef...done For information about GNU Emacs and the GNU system, type C-h C-a. Making completion list... [16 times] Configured using: 'configure --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/lib --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/lib --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --with-x=yes --with-x-toolkit=lucid --with-toolkit-scroll-bars --without-gsettings 'CFLAGS=-g -O2 -fdebug-prefix-map=/build/emacs-StqULU/emacs-26.1+1=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro' Configured features: XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11 THREADS LIBSYSTEMD LCMS2 Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: diff-auto-refine-mode: t goto-address-prog-mode: t show-paren-mode: t electric-pair-mode: t beginend-global-mode: t beginend-prog-mode: t global-dot-mode: t dot-mode: t global-gobble-whitespace-mode: t live-completions-mode: t restricto-mode: t minibuffer-electric-default-mode: t minibuffer-depth-indicate-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-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: /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox hides /usr/share/emacs/26.1/lisp/org/ox /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-texinfo hides /usr/share/emacs/26.1/lisp/org/ox-texinfo /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-publish hides /usr/share/emacs/26.1/lisp/org/ox-publish /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-org hides /usr/share/emacs/26.1/lisp/org/ox-org /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-odt hides /usr/share/emacs/26.1/lisp/org/ox-odt /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-md hides /usr/share/emacs/26.1/lisp/org/ox-md /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-man hides /usr/share/emacs/26.1/lisp/org/ox-man /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-latex hides /usr/share/emacs/26.1/lisp/org/ox-latex /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-icalendar hides /usr/share/emacs/26.1/lisp/org/ox-icalendar /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-html hides /usr/share/emacs/26.1/lisp/org/ox-html /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-beamer hides /usr/share/emacs/26.1/lisp/org/ox-beamer /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-ascii hides /usr/share/emacs/26.1/lisp/org/ox-ascii /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org hides /usr/share/emacs/26.1/lisp/org/org /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-timer hides /usr/share/emacs/26.1/lisp/org/org-timer /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-table hides /usr/share/emacs/26.1/lisp/org/org-table /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-src hides /usr/share/emacs/26.1/lisp/org/org-src /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-protocol hides /usr/share/emacs/26.1/lisp/org/org-protocol /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-plot hides /usr/share/emacs/26.1/lisp/org/org-plot /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-pcomplete hides /usr/share/emacs/26.1/lisp/org/org-pcomplete /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-mouse hides /usr/share/emacs/26.1/lisp/org/org-mouse /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-mobile hides /usr/share/emacs/26.1/lisp/org/org-mobile /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-macs hides /usr/share/emacs/26.1/lisp/org/org-macs /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-macro hides /usr/share/emacs/26.1/lisp/org/org-macro /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-list hides /usr/share/emacs/26.1/lisp/org/org-list /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-lint hides /usr/share/emacs/26.1/lisp/org/org-lint /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-inlinetask hides /usr/share/emacs/26.1/lisp/org/org-inlinetask /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-indent hides /usr/share/emacs/26.1/lisp/org/org-indent /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-id hides /usr/share/emacs/26.1/lisp/org/org-id /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-habit hides /usr/share/emacs/26.1/lisp/org/org-habit /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-footnote hides /usr/share/emacs/26.1/lisp/org/org-footnote /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-feed hides /usr/share/emacs/26.1/lisp/org/org-feed /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-faces hides /usr/share/emacs/26.1/lisp/org/org-faces /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-entities hides /usr/share/emacs/26.1/lisp/org/org-entities /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-element hides /usr/share/emacs/26.1/lisp/org/org-element /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-duration hides /usr/share/emacs/26.1/lisp/org/org-duration /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-datetree hides /usr/share/emacs/26.1/lisp/org/org-datetree /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-ctags hides /usr/share/emacs/26.1/lisp/org/org-ctags /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-crypt hides /usr/share/emacs/26.1/lisp/org/org-crypt /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-compat hides /usr/share/emacs/26.1/lisp/org/org-compat /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-colview hides /usr/share/emacs/26.1/lisp/org/org-colview /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-clock hides /usr/share/emacs/26.1/lisp/org/org-clock /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-capture hides /usr/share/emacs/26.1/lisp/org/org-capture /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-attach hides /usr/share/emacs/26.1/lisp/org/org-attach /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-archive hides /usr/share/emacs/26.1/lisp/org/org-archive /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-agenda hides /usr/share/emacs/26.1/lisp/org/org-agenda /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob hides /usr/share/emacs/26.1/lisp/org/ob /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-vala hides /usr/share/emacs/26.1/lisp/org/ob-vala /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-tangle hides /usr/share/emacs/26.1/lisp/org/ob-tangle /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-table hides /usr/share/emacs/26.1/lisp/org/ob-table /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-stan hides /usr/share/emacs/26.1/lisp/org/ob-stan /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sqlite hides /usr/share/emacs/26.1/lisp/org/ob-sqlite /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sql hides /usr/share/emacs/26.1/lisp/org/ob-sql /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-shen hides /usr/share/emacs/26.1/lisp/org/ob-shen /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-shell hides /usr/share/emacs/26.1/lisp/org/ob-shell /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sed hides /usr/share/emacs/26.1/lisp/org/ob-sed /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-screen hides /usr/share/emacs/26.1/lisp/org/ob-screen /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-scheme hides /usr/share/emacs/26.1/lisp/org/ob-scheme /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sass hides /usr/share/emacs/26.1/lisp/org/ob-sass /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ruby hides /usr/share/emacs/26.1/lisp/org/ob-ruby /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ref hides /usr/share/emacs/26.1/lisp/org/ob-ref /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-python hides /usr/share/emacs/26.1/lisp/org/ob-python /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-processing hides /usr/share/emacs/26.1/lisp/org/ob-processing /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-plantuml hides /usr/share/emacs/26.1/lisp/org/ob-plantuml /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-picolisp hides /usr/share/emacs/26.1/lisp/org/ob-picolisp /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-perl hides /usr/share/emacs/26.1/lisp/org/ob-perl /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-org hides /usr/share/emacs/26.1/lisp/org/ob-org /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-octave hides /usr/share/emacs/26.1/lisp/org/ob-octave /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ocaml hides /usr/share/emacs/26.1/lisp/org/ob-ocaml /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-mscgen hides /usr/share/emacs/26.1/lisp/org/ob-mscgen /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-maxima hides /usr/share/emacs/26.1/lisp/org/ob-maxima /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-matlab hides /usr/share/emacs/26.1/lisp/org/ob-matlab /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-makefile hides /usr/share/emacs/26.1/lisp/org/ob-makefile /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lua hides /usr/share/emacs/26.1/lisp/org/ob-lua /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lob hides /usr/share/emacs/26.1/lisp/org/ob-lob /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lisp hides /usr/share/emacs/26.1/lisp/org/ob-lisp /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lilypond hides /usr/share/emacs/26.1/lisp/org/ob-lilypond /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ledger hides /usr/share/emacs/26.1/lisp/org/ob-ledger /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-latex hides /usr/share/emacs/26.1/lisp/org/ob-latex /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-js hides /usr/share/emacs/26.1/lisp/org/ob-js /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-java hides /usr/share/emacs/26.1/lisp/org/ob-java /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-io hides /usr/share/emacs/26.1/lisp/org/ob-io /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-hledger hides /usr/share/emacs/26.1/lisp/org/ob-hledger /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-haskell hides /usr/share/emacs/26.1/lisp/org/ob-haskell /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-groovy hides /usr/share/emacs/26.1/lisp/org/ob-groovy /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-gnuplot hides /usr/share/emacs/26.1/lisp/org/ob-gnuplot /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-fortran hides /usr/share/emacs/26.1/lisp/org/ob-fortran /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-forth hides /usr/share/emacs/26.1/lisp/org/ob-forth /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-exp hides /usr/share/emacs/26.1/lisp/org/ob-exp /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-eval hides /usr/share/emacs/26.1/lisp/org/ob-eval /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-emacs-lisp hides /usr/share/emacs/26.1/lisp/org/ob-emacs-lisp /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ebnf hides /usr/share/emacs/26.1/lisp/org/ob-ebnf /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-dot hides /usr/share/emacs/26.1/lisp/org/ob-dot /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ditaa hides /usr/share/emacs/26.1/lisp/org/ob-ditaa /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-css hides /usr/share/emacs/26.1/lisp/org/ob-css /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-core hides /usr/share/emacs/26.1/lisp/org/ob-core /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-coq hides /usr/share/emacs/26.1/lisp/org/ob-coq /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-comint hides /usr/share/emacs/26.1/lisp/org/ob-comint /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-clojure hides /usr/share/emacs/26.1/lisp/org/ob-clojure /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-calc hides /usr/share/emacs/26.1/lisp/org/ob-calc /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-awk hides /usr/share/emacs/26.1/lisp/org/ob-awk /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-asymptote hides /usr/share/emacs/26.1/lisp/org/ob-asymptote /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-abc hides /usr/share/emacs/26.1/lisp/org/ob-abc /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-R hides /usr/share/emacs/26.1/lisp/org/ob-R /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-J hides /usr/share/emacs/26.1/lisp/org/ob-J /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-C hides /usr/share/emacs/26.1/lisp/org/ob-C /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-version hides /usr/share/emacs/26.1/lisp/org/org-version /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-loaddefs hides /usr/share/emacs/26.1/lisp/org/org-loaddefs /home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-install hides /usr/share/emacs/26.1/lisp/org/org-install Features: (shadow sort bbdb-message mailalias bbdb-mua bbdb-com crm bbdb bbdb-site timezone mail-extr misc emacsbug message rmc puny dired dired-loaddefs format-spec rfc822 mml mml-sec epa derived epg gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mail-utils vc-git diff-mode misc-text find-func goto-addr thingatpt email-config pdf-loader paren elec-pair ace-link avy ring beginend dot-mode eval-region-advice gobble-whitespace live-completions regexpect restricto minibuf-eldef mb-depth completing-history block-undo modus-vivendi-theme modus-operandi-theme cus-edit cus-start cus-load wid-edit mm-util mail-prsvr diminish cl-extra help-mode use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core finder-inf tex-site slime-autoloads info package easymenu epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache url-vars seq byte-opt gv bytecomp byte-compile cconv edmacro kmacro cl-loaddefs cl-lib time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame 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 minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote dbusbind inotify lcms2 dynamic-setting font-render-setting x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 353481 17018) (symbols 48 33822 1) (miscs 40 341 103) (strings 32 98435 4175) (string-bytes 1 2527759) (vectors 16 27936) (vector-slots 8 678970 15708) (floats 8 142 262) (intervals 56 325 0) (buffers 992 13))
Glenn Morris <rgm <at> gnu.org>
to control <at> debbugs.gnu.org
.
(Thu, 21 May 2020 16:39:02 GMT) Full text and rfc822 format available.bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Fri, 22 Jan 2021 20:29:02 GMT) Full text and rfc822 format available.Message #10 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Omar Antolín Camarena <omar <at> matem.unam.mx> Cc: 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org, Stefan Monnier <monnier <at> iro.umontreal.ca> Subject: Re: bug#41412: 27.0.90; Value of default directory in completions buffer Date: Fri, 22 Jan 2021 21:28:14 +0100
Omar Antolín Camarena <omar <at> matem.unam.mx> writes: > There is a bit of logic in `complete-setup-function' (from simple.el) > to set the default directory in the *Completions* buffer: > > ;; FIXME: This is a bad hack. We try to set the default-directory > ;; in the *Completions* buffer so that the relative file names > ;; displayed there can be treated as valid file names, independently > ;; from the completion context. But this suffers from many problems: > ;; - It's not clear when the completions are file names. With some > ;; completion tables (e.g. bzr revision specs), the listed > ;; completions can mix file names and other things. > ;; - It doesn't pay attention to possible quoting. > ;; - With fancy completion styles, the code below will not always > ;; find the right base directory. > (if minibuffer-completing-file-name > (file-name-as-directory > (expand-file-name > (buffer-substring (minibuffer-prompt-end) > (- (point) (or completion-base-size 0)))))) > > As the comment says, this is brittle, but better than nothing. I > believe, however, that the `file-name-as-directory' is a typo and > probably `file-name-directory' was intended instead. I think that sounds likely. The patch that introduced this code is below, and it indeed changes the `file-name-directory' to `file-name-as-directory' (among other things). I've added Stafan M to the CCs -- was this done on purpose, or should we go back to `file-name-directory' here? diff --git a/lisp/simple.el b/lisp/simple.el index 082605f659..13c75c4d7b 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -5851,20 +5851,22 @@ completion-root-regexp ;; after the text of the completion list buffer is written. (defun completion-setup-function () (let* ((mainbuf (current-buffer)) - (mbuf-contents (minibuffer-completion-contents)) - common-string-length) - ;; When reading a file name in the minibuffer, - ;; set default-directory in the minibuffer - ;; so it will get copied into the completion list buffer. - (if minibuffer-completing-file-name - (with-current-buffer mainbuf - (setq default-directory - (file-name-directory (expand-file-name mbuf-contents))))) + (base-dir + ;; When reading a file name in the minibuffer, + ;; try and find the right default-directory to set in the + ;; completion list buffer. + ;; FIXME: Why do we do that, actually? --Stef + (if minibuffer-completing-file-name + (file-name-as-directory + (expand-file-name + (substring (minibuffer-completion-contents) + 0 (or completion-base-size 0))))))) (with-current-buffer standard-output (let ((base-size completion-base-size)) ;Read before killing localvars. (completion-list-mode) (set (make-local-variable 'completion-base-size) base-size)) (set (make-local-variable 'completion-reference-buffer) mainbuf) + (if base-dir (setq default-directory base-dir)) (unless completion-base-size ;; This shouldn't be needed any more, but further analysis is needed ;; to make sure it's the case. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Fri, 22 Jan 2021 22:51:02 GMT) Full text and rfc822 format available.Message #13 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: Omar Antolín Camarena <omar <at> matem.unam.mx>, 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com> Subject: Re: bug#41412: 27.0.90; Value of default directory in completions buffer Date: Fri, 22 Jan 2021 17:50:18 -0500
> I think that sounds likely. The patch that introduced this code is > below, and it indeed changes the `file-name-directory' to > `file-name-as-directory' (among other things). But it also changed a fair bit around it. And the `substring` is quite different. When I look at the history of this code, 30c7e54299fc81cd3122a17ef130ab69e9855f99 looks wrong. In order not to change the behavior, I suspect it should have been: (buffer-substring (minibuffer-prompt-end) (+ (minibuffer-prompt-end) (or completion-base-size 0)))))))) and then 326fdb9ec05ab5e4aec0c7064272bb3d223e9875 looks wrong again since it presumes that `completion-base-size` is nil whereas it usually isn't/wasn't when completing files. Stefan
bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Sat, 23 Jan 2021 18:48:02 GMT) Full text and rfc822 format available.Message #16 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: Omar Antolín Camarena <omar <at> matem.unam.mx>, 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com> Subject: Re: bug#41412: 27.0.90; Value of default directory in completions buffer Date: Sat, 23 Jan 2021 19:47:11 +0100
Stefan Monnier <monnier <at> iro.umontreal.ca> writes: >> I think that sounds likely. The patch that introduced this code is >> below, and it indeed changes the `file-name-directory' to >> `file-name-as-directory' (among other things). > > But it also changed a fair bit around it. And the `substring` is quite different. > When I look at the history of this code, > 30c7e54299fc81cd3122a17ef130ab69e9855f99 looks wrong. In order not to > change the behavior, I suspect it should have been: > > (buffer-substring (minibuffer-prompt-end) > (+ (minibuffer-prompt-end) (or completion-base-size 0)))))))) > > and then 326fdb9ec05ab5e4aec0c7064272bb3d223e9875 looks wrong again > since it presumes that `completion-base-size` is nil whereas it usually > isn't/wasn't when completing files. Aha. But then what would the correct fix now? I haven't tried the proposed change (i.e., just change to `file-name-directory'), but it sounds logical to me. That is, if the user has typed "~/foo/bar/zo" then use "~/foo/bar" as the default directory. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Sat, 23 Jan 2021 22:01:02 GMT) Full text and rfc822 format available.Message #19 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: Omar Antolín Camarena <omar <at> matem.unam.mx>, 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com> Subject: Re: bug#41412: 27.0.90; Value of default directory in completions buffer Date: Sat, 23 Jan 2021 17:00:00 -0500
> Aha. But then what would the correct fix now? I haven't tried the > proposed change (i.e., just change to `file-name-directory'), but it > sounds logical to me. That is, if the user has typed "~/foo/bar/zo" > then use "~/foo/bar" as the default directory. I think the correct thing to do is to look at the `(cdr (last completions))` where `completions` is what `completion-all-completions` returned. That gives what used to be called `completion-base-size`. Stefan
bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Mon, 09 May 2022 11:01:02 GMT) Full text and rfc822 format available.Message #22 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: Omar Antolín Camarena <omar <at> matem.unam.mx>, 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com> Subject: Re: bug#41424: 26.1; default-directory in *Completions* buffer Date: Mon, 09 May 2022 13:00:13 +0200
Stefan Monnier <monnier <at> iro.umontreal.ca> writes: > I think the correct thing to do is to look at the `(cdr (last completions))` > where `completions` is what `completion-all-completions` returned. > That gives what used to be called `completion-base-size`. The call sequence here seems to be somewhat convoluted, so I'm not sure how to get at that. But wouldn't just doing the following simple patch fix the issue without regressing anything? diff --git a/lisp/simple.el b/lisp/simple.el index 861d9eefde..65b2a482e2 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -9495,9 +9495,11 @@ completion-setup-function ;; - With fancy completion styles, the code below will not always ;; find the right base directory. (if minibuffer-completing-file-name - (file-name-as-directory - (expand-file-name - (buffer-substring (minibuffer-prompt-end) (point))))))) + (let ((file (expand-file-name + (buffer-substring (minibuffer-prompt-end) (point))))) + (if (file-directory-p file) + (file-name-as-directory file) + (file-name-directory file)))))) (with-current-buffer standard-output (let ((base-position completion-base-position) (base-affixes completion-base-affixes) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
Lars Ingebrigtsen <larsi <at> gnus.org>
to control <at> debbugs.gnu.org
.
(Mon, 09 May 2022 11:01:02 GMT) Full text and rfc822 format available.bug-gnu-emacs <at> gnu.org
:bug#41424
; Package emacs
.
(Mon, 06 Jun 2022 13:08:02 GMT) Full text and rfc822 format available.Message #27 received at 41424 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Karthik Chikmagalur <karthikchikmagalur <at> gmail.com> Cc: 41424 <at> debbugs.gnu.org, 41412 <at> debbugs.gnu.org Subject: Re: bug#41424: 26.1; default-directory in *Completions* buffer Date: Mon, 06 Jun 2022 15:07:31 +0200
Karthik Chikmagalur <karthikchikmagalur <at> gmail.com> writes: > Steps to reproduce: > > 1. Start `emacs -Q' > 2. C-x C-f to start finding a file > 3. Enter a string (at least one character) and hit tab to pop up the > completions buffer. Let's say this string was "test" > 4. The completions buffer will have completions starting with > "test". (We need at least one candidate). > 5. C-h v default-directory > 6. The value of `default-directory' in the completions buffer is set to > "~/test/", or the current directory + whatever string the user entered > into the minibuffer. I can reproduce this in Emacs 28.1, but not in Emacs 29 now (but I could a month ago), so it seems like this has been fixed recently, and I'm therefore closing this bug report. If this problem is still present (it may be that my test cases doesn't cover all the possibilities), please respond to the debbugs address and we'll reopen. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
Lars Ingebrigtsen <larsi <at> gnus.org>
to control <at> debbugs.gnu.org
.
(Mon, 06 Jun 2022 13:08:02 GMT) Full text and rfc822 format available.Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Tue, 05 Jul 2022 11:24:06 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.