Re: forward slash is added at end of commands in tab completion if there is a directory with the same name
Chet Ramey <[email protected]>
| Newsgroups | gmane.comp.shells.bash.bugs |
|---|---|
| Organization | ITS, Case Western Reserve University |
| Message-ID | <[email protected]> |
On 2/26/26 9:27 PM, Martin D Kealey wrote: > > > On Fri, 27 Feb 2026 at 04:19, Chet Ramey <[email protected] > <mailto:[email protected]>> wrote: > > It's ambiguous. Both a binary in $PATH and a directory in the current > directory can be valid completions, since bash completion (and readline) > allows you to build a relative pathname by completing a directory at a > time. > > Because it's ambiguous, the name exists as a directory in the current > directory, and you have the `mark-directories' readline variable set, > readline appends the slash. > > > I can follow this logic to see why it behaves as it does, except that it > it's inconsistent. > > If you have the full suite of vim installed then Bash shows a list like this: > vim vim.basic vim.gtk3 vim.tiny vimdiff vimdot vimplate > vimtutor > > Add a directory «vim» with «mark-directories» is in effect, and instead you > get: > vim/ vim.basic vim.gtk3 vim.tiny vimdiff vimdot vimplate > vimtutor > > which differs only in the addition of a trailing slash. Yes. It's ambiguous. When presented with `vim' in the (deduplicated) list of possible completions, readline has to choose which interpretation to take. Since `mark-directories' is set, and this is a directory, it chooses to append the slash. > However, when you only have the vim directory and the vim command, with no > other commands machines that prefix, pressing tab shows a single-item list > vim > which has no slash, regardless of «mark-directories». Since there is only a single completion, bash can (and does) special-case this and tell readline not to append the slash. It wouldn't be appropriate to do this for more than a single completion, since the appending applies to every possible completion -- either you append, or you don't, to each one. > I contend that «vim» and «vim/» should count as separate completions; this > is consistent with: You'd like readline to annotate the completion list with additional application-specific information, which is nice, but would have to be done via an additional data structure. > I suggest that these inconsistencies (and the original bug report) would be > resolved by showing both «vim» and «vim/» in the displayed list; in effect, > mark-directories would act to modify each element as it's added to the list > of completions, rather acting when when each item is displayed or used to > extend the completion. That's an idea, but it would have to interact with the other annotations readline does. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU [email protected] http://tiswww.cwru.edu/~chet/
OpenPGP_signature.asc
(application/pgp-signature, 203 B)
-----BEGIN PGP SIGNATURE----- wmMEABEIACMWIQR8ATX7CIqvbGbGULm7WGnwZOp0qwUCaaX2gQUDAAAAAAAKCRC7WGnwZOp0q32F AJoDw7YkGs9NZs4GNEMtxaZalU7WowCfUJI+Jc4EHto24GRc7cBA2Ijqnp8= =2Ltj -----END PGP SIGNATURE-----