unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#36945: 27.0.50; read-library-name
@ 2019-08-06  9:48 Fabrice Popineau
  2019-08-23  4:55 ` Lars Ingebrigtsen
  2020-09-14 20:46 ` Stefan Monnier
  0 siblings, 2 replies; 12+ messages in thread
From: Fabrice Popineau @ 2019-08-06  9:48 UTC (permalink / raw)
  To: 36945

[-- Attachment #1: Type: text/plain, Size: 3822 bytes --]

Hi,

read-library-name offers <name> and <name>.elc for each library name.
I expect that .elc names should not be offered.

This is running `emacs -Q`.

However, with a standard configuration using ELPA/MELPA, the situation
is much worse, as I get stuff like:

../
../
../
./
.dir-locals
.elpaignore
.elpaignore
.git
.git

in the list of propositions. These are obviously not library names.

Regards,



In GNU Emacs 27.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
 of 2019-07-31 built on Marvin
Repository revision: 1be15d443a0e346351029a90cb04906408b3a75d
Repository branch: wsl
Windowing system distributor 'Moba/X', version 11.0.12004000
System Description: Ubuntu 18.04.2 LTS

Recent messages:
Scanning for dabbrevs...done
user-error: No dynamic expansion for ‘read-libr’ found
Entering debugger...
Back to top level
Loading find-func...done
Making completion list...
Quit
(".el" ".el.gz")
Type C-x 1 to delete the help window.
Making completion list...
Quit
Configured using:
 'configure --prefix=/usr/local --without-imagemagick'

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY
GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM THREADS JSON PDUMPER LCMS2 GMP

Important settings:
  value of $LC_ALL: C.UTF-8
  value of $LC_CTYPE: C.UTF-8
  value of $LANG: fr_FR.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 format-spec rfc822 mml
mml-sec password-cache epa derived epg epg-config gnus-util rmail
rmail-loaddefs 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 sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils completion dos-w32 find-cmd
grep compile comint ansi-color ring find-dired dired dired-loaddefs
thingatpt help-fns radix-tree cl-print debug backtrace help-mode
easymenu find-func cl-loaddefs cl-lib dabbrev 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 threads dbusbind inotify lcms2 dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 85513 6636)
 (symbols 48 7341 1)
 (strings 32 21210 1730)
 (string-bytes 1 656125)
 (vectors 16 11115)
 (vector-slots 8 143137 9722)
 (floats 8 25 50)
 (intervals 56 9262 0)
 (buffers 992 14))

[-- Attachment #2: Type: text/html, Size: 4166 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2019-08-06  9:48 bug#36945: 27.0.50; read-library-name Fabrice Popineau
@ 2019-08-23  4:55 ` Lars Ingebrigtsen
  2019-08-26 14:55   ` Noam Postavsky
  2020-09-14 20:46 ` Stefan Monnier
  1 sibling, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2019-08-23  4:55 UTC (permalink / raw)
  To: Fabrice Popineau; +Cc: 36945

Fabrice Popineau <fabrice.popineau@gmail.com> writes:

> read-library-name offers <name> and <name>.elc for each library name.
> I expect that .elc names should not be offered.
>
> This is running `emacs -Q`.
>
> However, with a standard configuration using ELPA/MELPA, the situation
> is much worse, as I get stuff like:
>
> ../
> ../
> ../
> ./
> .dir-locals
> .elpaignore
> .elpaignore
> .git
> .git
>
> in the list of propositions. These are obviously not library names.

The function basically calls this function:

(locate-file-completion-table '("~/src/emacs/trunk/lisp/image") '(".el$") "" nil t)
=> ("compface.el" "compface.elc" "../" "gravatar.elc" "./" "gravatar.el")

And as we can see, the output from that function isn't quite what you'd
expect.  Isn't SUFFIXES supposed to limit the output?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2019-08-23  4:55 ` Lars Ingebrigtsen
@ 2019-08-26 14:55   ` Noam Postavsky
  2019-08-27  7:48     ` Lars Ingebrigtsen
  2022-02-05 23:31     ` Lars Ingebrigtsen
  0 siblings, 2 replies; 12+ messages in thread
From: Noam Postavsky @ 2019-08-26 14:55 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 36945, Fabrice Popineau

Lars Ingebrigtsen <larsi@gnus.org> writes:

> (locate-file-completion-table '("~/src/emacs/trunk/lisp/image") '(".el$") "" nil t)
> => ("compface.el" "compface.elc" "../" "gravatar.elc" "./" "gravatar.el")
>
> And as we can see, the output from that function isn't quite what you'd
> expect.  Isn't SUFFIXES supposed to limit the output?

In the context of general file name completion, I guess the idea is that
you might find files with any extension under a directory.  Doesn't make
so much sense for read-library-name though.





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2019-08-26 14:55   ` Noam Postavsky
@ 2019-08-27  7:48     ` Lars Ingebrigtsen
  2022-02-05 23:31     ` Lars Ingebrigtsen
  1 sibling, 0 replies; 12+ messages in thread
From: Lars Ingebrigtsen @ 2019-08-27  7:48 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 36945, Fabrice Popineau

Noam Postavsky <npostavs@gmail.com> writes:

> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>> (locate-file-completion-table '("~/src/emacs/trunk/lisp/image")
>> '(".el$") "" nil t)
>> => ("compface.el" "compface.elc" "../" "gravatar.elc" "./" "gravatar.el")
>>
>> And as we can see, the output from that function isn't quite what you'd
>> expect.  Isn't SUFFIXES supposed to limit the output?
>
> In the context of general file name completion, I guess the idea is that
> you might find files with any extension under a directory.  Doesn't make
> so much sense for read-library-name though.

No, I wonder if whoever wrote the code in question thought that SUFFIXES
limited the results...  which it doesn't seem to do.  Those completion
functions are a bit under-documented, though.

I've now rewritten `read-library-name' to not use that function at all,
and instead just complete over all the .el/.el.gz files "manually".

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2019-08-06  9:48 bug#36945: 27.0.50; read-library-name Fabrice Popineau
  2019-08-23  4:55 ` Lars Ingebrigtsen
@ 2020-09-14 20:46 ` Stefan Monnier
  2020-09-15 12:32   ` Lars Ingebrigtsen
  1 sibling, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2020-09-14 20:46 UTC (permalink / raw)
  To: Fabrice Popineau; +Cc: 36945

> read-library-name offers <name> and <name>.elc for each library name.
> I expect that .elc names should not be offered.

I think it should indeed not be displayed when `<name>` is already
listed alongside others, but when the users type `<name> TAB` it would
make sense to list the `.elc` file since it's quite possible that they
want to choose between the `.el` and the `.elc` version of the file.

> .dir-locals
> .elpaignore
> .elpaignore
> .git
> .git
>
> in the list of propositions. These are obviously not library names.

~/.emacs is a common name for a file that can be loaded, so I will
object to it being "obvious".  Also, while `.git` should preferably not
be listed, `.git/` arguably could since you might keep Elisp files in
there.

So I think we should list all directories, but I agree we should
probably strip away all files whose name doesn't end in `.el`, `.elc`,
`.el.gz` (and any other such extension in `load-suffixes`), and we
should ideally only list the extension when it's the only
remaining choice.

Oh, and another reason to keep files that don't just end in `.el` is
when you want to load `foo.el.BAK` or `foo.el~`, so maybe we should only
skip those files which don't have `.el` somewhere in their name :-(


        Stefan






^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-14 20:46 ` Stefan Monnier
@ 2020-09-15 12:32   ` Lars Ingebrigtsen
  2020-09-15 13:31     ` Stefan Monnier
                       ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-09-15 12:32 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 36945, Fabrice Popineau

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> ~/.emacs is a common name for a file that can be loaded, so I will
> object to it being "obvious".  Also, while `.git` should preferably not
> be listed, `.git/` arguably could since you might keep Elisp files in
> there.
>
> So I think we should list all directories, but I agree we should
> probably strip away all files whose name doesn't end in `.el`, `.elc`,
> `.el.gz` (and any other such extension in `load-suffixes`), and we
> should ideally only list the extension when it's the only
> remaining choice.

read-library-name has slightly unclear semantics -- I didn't know that
it was supposed to complete over directory names at all.  Perhaps that
should be mentioned in the doc string?

> Oh, and another reason to keep files that don't just end in `.el` is
> when you want to load `foo.el.BAK` or `foo.el~`, so maybe we should only
> skip those files which don't have `.el` somewhere in their name :-(

Hm...  perhaps the function is just misnamed.  When I want to find a
library, I really do want to complete over the library's name, and
nothing else.  What read-library-name does, however, is file name
completion over load-path, which is something a bit different.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-15 12:32   ` Lars Ingebrigtsen
@ 2020-09-15 13:31     ` Stefan Monnier
  2020-09-15 14:48     ` Eli Zaretskii
  2020-09-15 15:32     ` Drew Adams
  2 siblings, 0 replies; 12+ messages in thread
From: Stefan Monnier @ 2020-09-15 13:31 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 36945, Fabrice Popineau

> read-library-name has slightly unclear semantics -- I didn't know that
> it was supposed to complete over directory names at all.  Perhaps that
> should be mentioned in the doc string?

I take it to mean "read an argument appropriate for `load`".


        Stefan






^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-15 12:32   ` Lars Ingebrigtsen
  2020-09-15 13:31     ` Stefan Monnier
@ 2020-09-15 14:48     ` Eli Zaretskii
  2020-09-17 14:40       ` Lars Ingebrigtsen
  2020-09-15 15:32     ` Drew Adams
  2 siblings, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2020-09-15 14:48 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 36945, fabrice.popineau, monnier

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Tue, 15 Sep 2020 14:32:58 +0200
> Cc: 36945@debbugs.gnu.org, Fabrice Popineau <fabrice.popineau@gmail.com>
> 
> Hm...  perhaps the function is just misnamed.  When I want to find a
> library, I really do want to complete over the library's name, and
> nothing else.

Since load-library must support the use case when the user forces to
load the .el file, not the .elc file, read-library-name must allow
library names with extensions, I think.  IOW, the "library" in this
context is just the basename of its file name, with or without the
extension.





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-15 12:32   ` Lars Ingebrigtsen
  2020-09-15 13:31     ` Stefan Monnier
  2020-09-15 14:48     ` Eli Zaretskii
@ 2020-09-15 15:32     ` Drew Adams
  2 siblings, 0 replies; 12+ messages in thread
From: Drew Adams @ 2020-09-15 15:32 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Stefan Monnier; +Cc: 36945, Fabrice Popineau

> Hm...  perhaps the function is just misnamed.  When I want to find a
> library, I really do want to complete over the library's name, and
> nothing else.  What read-library-name does, however, is file name
> completion over load-path, which is something a bit different.

I don't think the name is bad.  It's just that we have
different ideas of what a "library name" is.  The same
thing happens with file names.  You're talking about a
sort of "base" name.

My suggestion: Improve the `read-library-name' doc to
make clear what it does (whatever you think isn't clear
enough).  And then provide another function that does
what you were wanting/expecting.

Or if you find an easy way to get the behavior you want
as optional behavior by tweaking `read-library-name',
make that change, so the same function can do both things.





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-15 14:48     ` Eli Zaretskii
@ 2020-09-17 14:40       ` Lars Ingebrigtsen
  2020-09-17 16:41         ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-09-17 14:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 36945, fabrice.popineau, monnier

Eli Zaretskii <eliz@gnu.org> writes:

> Since load-library must support the use case when the user forces to
> load the .el file, not the .elc file, read-library-name must allow
> library names with extensions, I think.  IOW, the "library" in this
> context is just the basename of its file name, with or without the
> extension.

Yeah.  So I think the request in 36945 can't be done -- Emacs has to
complete over all files in load-path, no matter what they're called,
really.

I'm not sure what context the request was made in (since it's not
stated), but I thought about it from a `find-library' context.

Which should probably use something like the patch that was reverted,
but put into its own function.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2020-09-17 14:40       ` Lars Ingebrigtsen
@ 2020-09-17 16:41         ` Stefan Monnier
  0 siblings, 0 replies; 12+ messages in thread
From: Stefan Monnier @ 2020-09-17 16:41 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: fabrice.popineau, 36945

>> Since load-library must support the use case when the user forces to
>> load the .el file, not the .elc file, read-library-name must allow
>> library names with extensions, I think.  IOW, the "library" in this
>> context is just the basename of its file name, with or without the
>> extension.
> Yeah.  So I think the request in 36945 can't be done -- Emacs has to
> complete over all files in load-path, no matter what they're called,
> really.

Yes and no.  The behavior could be similar to what we do with
`completion-ignored-extensions` (where those files are only ignored if
there are others), e.g. for an input "i" we'd list ("icomplete"
"image" ...)  but for an input "icomplet" we'd list
("icomplete.el" "icomplete.elc" "icomplete.el.BAK").


        Stefan






^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#36945: 27.0.50; read-library-name
  2019-08-26 14:55   ` Noam Postavsky
  2019-08-27  7:48     ` Lars Ingebrigtsen
@ 2022-02-05 23:31     ` Lars Ingebrigtsen
  1 sibling, 0 replies; 12+ messages in thread
From: Lars Ingebrigtsen @ 2022-02-05 23:31 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 36945, Fabrice Popineau

Noam Postavsky <npostavs@gmail.com> writes:

> In the context of general file name completion, I guess the idea is that
> you might find files with any extension under a directory.  Doesn't make
> so much sense for read-library-name though.

I've now added a user option that allows completing over library names
only in Emacs 29:

(setq find-library-include-other-files nil)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-02-05 23:31 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-06  9:48 bug#36945: 27.0.50; read-library-name Fabrice Popineau
2019-08-23  4:55 ` Lars Ingebrigtsen
2019-08-26 14:55   ` Noam Postavsky
2019-08-27  7:48     ` Lars Ingebrigtsen
2022-02-05 23:31     ` Lars Ingebrigtsen
2020-09-14 20:46 ` Stefan Monnier
2020-09-15 12:32   ` Lars Ingebrigtsen
2020-09-15 13:31     ` Stefan Monnier
2020-09-15 14:48     ` Eli Zaretskii
2020-09-17 14:40       ` Lars Ingebrigtsen
2020-09-17 16:41         ` Stefan Monnier
2020-09-15 15:32     ` Drew Adams

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).