* Re: Q: Is there a built-in way to read multiple file names?
@ 2024-07-13 16:28 Rahguzar
2024-07-14 12:30 ` Ihor Radchenko
0 siblings, 1 reply; 40+ messages in thread
From: Rahguzar @ 2024-07-13 16:28 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel
> Sure, but I want the same thing to work for non-helm users.
> Preferably, without having to write helm-specific/ivy-specific/etc code.
If you want a mostly completing-read interface for this task, maybe the
function filechooser-read-file-names [1] from my GNU ELPA package
filechooser can help you. It uses a group-function to distinguish
selected files from the rest. It works pretty well with vertico but I
think should work with any UI which supports group-function well. It is
entangled with some details of the package so probably not directly
useful but I think adapting to an API similar to read-file-name is not
too hard and hopefully can help with something similar to serve Org's
needs.
There is also filechooser-dired for a dired based take.
[1] https://codeberg.org/rahguzar/filechooser/src/commit/62a9ef588331b06c818ea5db5a73e756f20fd13d/filechooser.el#L379
Rahguzar
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 16:28 Q: Is there a built-in way to read multiple file names? Rahguzar @ 2024-07-14 12:30 ` Ihor Radchenko 2024-07-14 20:29 ` Rahguzar 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-14 12:30 UTC (permalink / raw) To: Rahguzar; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel Rahguzar <rahguzar@zohomail.eu> writes: >> Sure, but I want the same thing to work for non-helm users. >> Preferably, without having to write helm-specific/ivy-specific/etc code. > > If you want a mostly completing-read interface for this task, maybe the > function filechooser-read-file-names [1] from my GNU ELPA package > filechooser can help you. It uses a group-function to distinguish > selected files from the rest. It works pretty well with vertico but I > think should work with any UI which supports group-function well. It is > entangled with some details of the package so probably not directly > useful but I think adapting to an API similar to read-file-name is not > too hard and hopefully can help with something similar to serve Org's > needs. Yes, it is quite similar to what I described ------------- completions ----------------- [selected files group] -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> [candidates group] drwxr-xr-x 8 yantar92 yantar92 4096 Jul 13 16:04 .git -rw-r--r-- 1 yantar92 yantar92 1044 Jun 25 10:22 .gitignore -rw-r--r-- 1 yantar92 yantar92 95 Jun 25 10:22 .gitmodules ------------------- minibuffer ------------------------ Choose files: git I tried using (let ((filechooser-filters '(("All" always . t))) (filechooser-use-popup-frame nil)) (filechooser-read-file-names "Files: ")) M-TAB selects file. I did not find how to remove selected file. The main problem is that it is not built-in, and I would like to get something in the core to cater multi-file prompts. A side note: The usual /old/path/to/file/~/restart/path does not work as expected. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-14 12:30 ` Ihor Radchenko @ 2024-07-14 20:29 ` Rahguzar 2024-07-15 19:09 ` Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) Ihor Radchenko 2024-07-15 19:12 ` ELPA package: filechooser " Ihor Radchenko 0 siblings, 2 replies; 40+ messages in thread From: Rahguzar @ 2024-07-14 20:29 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel Hi Ihor, Ihor Radchenko <yantar92@posteo.net> writes: > Rahguzar <rahguzar@zohomail.eu> writes: > >>> Sure, but I want the same thing to work for non-helm users. >>> Preferably, without having to write helm-specific/ivy-specific/etc code. >> >> If you want a mostly completing-read interface for this task, maybe the >> function filechooser-read-file-names [1] from my GNU ELPA package >> filechooser can help you. It uses a group-function to distinguish >> selected files from the rest. It works pretty well with vertico but I >> think should work with any UI which supports group-function well. It is >> entangled with some details of the package so probably not directly >> useful but I think adapting to an API similar to read-file-name is not >> too hard and hopefully can help with something similar to serve Org's >> needs. > > Yes, it is quite similar to what I described > > ------------- completions ----------------- > [selected files group] > -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> > [candidates group] > drwxr-xr-x 8 yantar92 yantar92 4096 Jul 13 16:04 .git > -rw-r--r-- 1 yantar92 yantar92 1044 Jun 25 10:22 .gitignore > -rw-r--r-- 1 yantar92 yantar92 95 Jun 25 10:22 .gitmodules > ------------------- minibuffer ------------------------ > Choose files: git > > I tried using > > (let ((filechooser-filters '(("All" always . t))) > (filechooser-use-popup-frame nil)) > (filechooser-read-file-names "Files: ")) > > M-TAB selects file. > I did not find how to remove selected file. M-TAB on a selected file deselects it. It is basically a toggle. > The main problem is that it is not built-in, and I would like to get > something in the core to cater multi-file prompts. I would like that too, and if something like that is in the core I will change current implementation to depend on it. I am also happy to try to upstream the code if that is considered desirable. > A side note: The usual /old/path/to/file/~/restart/path does not work as expected. Can you please describe how it doesn't work? It works for me with vertico. I thought let binding minibuffer-completing-file-name was enough to get rfn-eshadow to work. Rahguzar ^ permalink raw reply [flat|nested] 40+ messages in thread
* Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) 2024-07-14 20:29 ` Rahguzar @ 2024-07-15 19:09 ` Ihor Radchenko 2024-07-15 20:02 ` [External] : " Drew Adams 2024-07-15 19:12 ` ELPA package: filechooser " Ihor Radchenko 1 sibling, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-15 19:09 UTC (permalink / raw) To: Rahguzar; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel Rahguzar <rahguzar@zohomail.eu> writes: >> The main problem is that it is not built-in, and I would like to get >> something in the core to cater multi-file prompts. > > I would like that too, and if something like that is in the core I will > change current implementation to depend on it. I am also happy to try to > upstream the code if that is considered desirable. Let's change the subject then. Eli favours a completely different approach for selecting files in particular, but improving `completing-read-multiple' is also worth discussing: - Built-in `completing-read-multiple' works fine using its idea with separators, but it is a pain to remove previously selected choices, especially long and complex ones. - filechooser implements an alternative way to read multiple choices by showing them as additional completion group on top of the normal completions - This is conceptually similar to icicles, except that the highlights in icicles may work not as good when the number of completion candidates is too large. I feel that visual indication in a separate group is better, except when all possible completions can fit within *completions* buffer window - As we discussed with Drew, the problem with not having all the completions listed in the minibuffer (like in `completing-read-multiple') is that it does not get stored in the minibuffer history. And it would be nice to have access to such history for multiple choice prompt. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* RE: [External] : Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) 2024-07-15 19:09 ` Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) Ihor Radchenko @ 2024-07-15 20:02 ` Drew Adams 0 siblings, 0 replies; 40+ messages in thread From: Drew Adams @ 2024-07-15 20:02 UTC (permalink / raw) To: Ihor Radchenko, Rahguzar Cc: Thierry Volpiatto, Eli Zaretskii, mardani29@yahoo.es, emacs-devel@gnu.org > - filechooser implements an alternative way to read multiple choices by > showing them as additional completion group on top of the normal > completions > > - This is conceptually similar to icicles, except that the highlights in > icicles may work not as good when the number of completion candidates > is too large. I feel that visual indication in a separate group is > better, except when all possible completions can fit within > *completions* buffer window The point, at that point, is to show the selected candidates in the context of all candidates. > - As we discussed with Drew, the problem with not having all the > completions listed in the minibuffer (like in > `completing-read-multiple') is that it does not get stored in the > minibuffer history. And it would be nice to have access to such > history for multiple choice prompt. See my reply to your mail about that. Retrieving a value from a history list is more tedious than choosing a saved-candidates-set variable from the set of such variables, using completion. That would be especially trie if your history list contained also other stuff (e.g. values returned from the minibuffer, as for normal minibuffer histories). ^ permalink raw reply [flat|nested] 40+ messages in thread
* ELPA package: filechooser (was: Q: Is there a built-in way to read multiple file names?) 2024-07-14 20:29 ` Rahguzar 2024-07-15 19:09 ` Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) Ihor Radchenko @ 2024-07-15 19:12 ` Ihor Radchenko 2024-07-16 8:59 ` ELPA package: filechooser Rahguzar 1 sibling, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-15 19:12 UTC (permalink / raw) To: Rahguzar; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel Rahguzar <rahguzar@zohomail.eu> writes: >> M-TAB selects file. >> I did not find how to remove selected file. > > M-TAB on a selected file deselects it. It is basically a toggle. Now got it. You are right. I did not realize that I need to narrow the completions to the file I want to toggle. Just assumed that M-tab will act on what is displayed on top in the completions buffer, which is the first selected file - I was wrong. >> A side note: The usual /old/path/to/file/~/restart/path does not work as expected. > > Can you please describe how it doesn't work? It works for me with > vertico. I thought let binding minibuffer-completing-file-name was > enough to get rfn-eshadow to work. In short, I tried 1. Input ~/Git/emacs/src/xdisp.c 2. M-tab 3. ~/Git/emacs/src/~/ and the completion list is empty. I recorded a short video demonstrating the problem. https://0x0.st/XLFm.mkv -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: ELPA package: filechooser 2024-07-15 19:12 ` ELPA package: filechooser " Ihor Radchenko @ 2024-07-16 8:59 ` Rahguzar 0 siblings, 0 replies; 40+ messages in thread From: Rahguzar @ 2024-07-16 8:59 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Thierry Volpiatto, Eli Zaretskii, mardani29, emacs-devel Ihor Radchenko <yantar92@posteo.net> writes: > Rahguzar <rahguzar@zohomail.eu> writes: > >>> M-TAB selects file. >>> I did not find how to remove selected file. >> >> M-TAB on a selected file deselects it. It is basically a toggle. > > Now got it. You are right. I did not realize that I need to narrow the > completions to the file I want to toggle. Just assumed that M-tab will > act on what is displayed on top in the completions buffer, which is the > first selected file - I was wrong. > >>> A side note: The usual /old/path/to/file/~/restart/path does not work as expected. >> >> Can you please describe how it doesn't work? It works for me with >> vertico. I thought let binding minibuffer-completing-file-name was >> enough to get rfn-eshadow to work. > > In short, I tried > > 1. Input ~/Git/emacs/src/xdisp.c > 2. M-tab > 3. ~/Git/emacs/src/~/ > > and the completion list is empty. > > I recorded a short video demonstrating the problem. > https://0x0.st/XLFm.mkv You are right. The problem essentially boils down to this: (let ((minibuffer-completing-file-name t)) (completing-read "File: " #'completion-file-name-table)) The shadowing works as expected using vertico but not in the default completion UI. I will try to figure out how exactly that is supposed to be handled but I think the best place will be the completion-file-name-table since otherwise every user of the table (or the completion UI) needs to implement this behavior. Rahguzar ^ permalink raw reply [flat|nested] 40+ messages in thread
* Q: Is there a built-in way to read multiple file names? @ 2024-07-07 7:22 Ihor Radchenko 2024-07-07 13:26 ` Daniel Martín 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-07 7:22 UTC (permalink / raw) To: emacs-devel Hello, I am wondering if there is a built-in way to read one or more file names in a single prompt. AFAIK, `read-file-name' kind of allow this, if one uses wildcards, but that approach is limited - not every combination of file names can be expressed via wildcards. I feel that such command should exist, but I cannot find it. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 7:22 Q: Is there a built-in way to read multiple file names? Ihor Radchenko @ 2024-07-07 13:26 ` Daniel Martín 2024-07-07 15:56 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Daniel Martín @ 2024-07-07 13:26 UTC (permalink / raw) To: Ihor Radchenko; +Cc: emacs-devel Ihor Radchenko <yantar92@posteo.net> writes: > Hello, > > I am wondering if there is a built-in way to read one or more file names > in a single prompt. > > AFAIK, `read-file-name' kind of allow this, if one uses wildcards, but > that approach is limited - not every combination of file names can be > expressed via wildcards. > > I feel that such command should exist, but I cannot find it. You can read each filename by calling read-file-name in a loop, ending with RET. There is multi-isearch-read-files, but the prompt message is coupled to isearch; it should be easy to generalize this function. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 13:26 ` Daniel Martín @ 2024-07-07 15:56 ` Ihor Radchenko 2024-07-07 16:03 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-07 15:56 UTC (permalink / raw) To: Daniel Martín; +Cc: emacs-devel Daniel Martín <mardani29@yahoo.es> writes: >> I feel that such command should exist, but I cannot find it. > > You can read each filename by calling read-file-name in a loop, ending > with RET. There is multi-isearch-read-files, but the prompt message is > coupled to isearch; it should be easy to generalize this function. That indeed works, but it is far from ideal: 1. It is not very extendable via helm/consult/ivy 2. When x-file-dialog is used, it is extremely annoying to run it in a loop I am wondering if `read-file-name' could be extended to read multiple file names at once. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 15:56 ` Ihor Radchenko @ 2024-07-07 16:03 ` Eli Zaretskii 2024-07-07 17:18 ` Ihor Radchenko 2024-07-08 12:00 ` Max Nikulin 0 siblings, 2 replies; 40+ messages in thread From: Eli Zaretskii @ 2024-07-07 16:03 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: emacs-devel@gnu.org > Date: Sun, 07 Jul 2024 15:56:45 +0000 > > Daniel Martín <mardani29@yahoo.es> writes: > > >> I feel that such command should exist, but I cannot find it. > > > > You can read each filename by calling read-file-name in a loop, ending > > with RET. There is multi-isearch-read-files, but the prompt message is > > coupled to isearch; it should be easy to generalize this function. > > That indeed works, but it is far from ideal: > > 1. It is not very extendable via helm/consult/ivy > 2. When x-file-dialog is used, it is extremely annoying to run it in a loop > > I am wondering if `read-file-name' could be extended to read multiple > file names at once. I think you are generalizing the wrong UI. A good UI for specifying several file names is not reading them one after the other, it is marking the files you want to operate on, and then clicking GO. Like in Ibuffer, for example. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 16:03 ` Eli Zaretskii @ 2024-07-07 17:18 ` Ihor Radchenko 2024-07-07 17:38 ` Eli Zaretskii 2024-07-08 12:00 ` Max Nikulin 1 sibling, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-07 17:18 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> I am wondering if `read-file-name' could be extended to read multiple >> file names at once. > > I think you are generalizing the wrong UI. A good UI for specifying > several file names is not reading them one after the other, it is > marking the files you want to operate on, and then clicking GO. Like > in Ibuffer, for example. I 100% agree. That's what helm provides, say, for `completing-read-multiple'. But for `read-file-name' specifically, there is no way to extend the built-in completion. I wish that *completions* buffer allowed selecting multiple candidates at once when using `completing-read-multiple' or similar commands. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 17:18 ` Ihor Radchenko @ 2024-07-07 17:38 ` Eli Zaretskii 2024-07-07 17:47 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-07 17:38 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Sun, 07 Jul 2024 17:18:33 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> I am wondering if `read-file-name' could be extended to read multiple > >> file names at once. > > > > I think you are generalizing the wrong UI. A good UI for specifying > > several file names is not reading them one after the other, it is > > marking the files you want to operate on, and then clicking GO. Like > > in Ibuffer, for example. > > I 100% agree. > That's what helm provides, say, for `completing-read-multiple'. > But for `read-file-name' specifically, there is no way to extend the > built-in completion. We have Ibuffer and Dired (and other similar features), which functions that return lists of marked entities. That is what needs to be used for multiple selections, not some loop over read-file-name and its ilk. > I wish that *completions* buffer allowed selecting multiple candidates > at once when using `completing-read-multiple' or similar commands. I think completion is the wrong framework for this purpose, because the user might want to select files/buffers/whatever whose names don't share anything in common. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 17:38 ` Eli Zaretskii @ 2024-07-07 17:47 ` Ihor Radchenko 2024-07-07 17:56 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-07 17:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> > I think you are generalizing the wrong UI. A good UI for specifying >> > several file names is not reading them one after the other, it is >> > marking the files you want to operate on, and then clicking GO. Like >> > in Ibuffer, for example. >> >> I 100% agree. >> That's what helm provides, say, for `completing-read-multiple'. >> But for `read-file-name' specifically, there is no way to extend the >> built-in completion. > > We have Ibuffer and Dired (and other similar features), which > functions that return lists of marked entities. That is what needs > to be used for multiple selections, not some loop over read-file-name > and its ilk. My concern about dired and similar is that it is not possible to exit them and go back to the original place as easily as C-g in the completion prompt. Interactive narrowing is also not as easy as in the completion. >> I wish that *completions* buffer allowed selecting multiple candidates >> at once when using `completing-read-multiple' or similar commands. > > I think completion is the wrong framework for this purpose, because > the user might want to select files/buffers/whatever whose names don't > share anything in common. IMHO, helm proves that completion framework can be used for very quick selection. It does it via: 1. The notion of "current" candidate from the list that can be navigated right from the minibuffer (like next/previous-completion in the *completions*) 2. minibuffer command to mark/unmark candidates quickly 3. ability to retain marked candidates even the prompt input changes I find it quick and convenient to use, despite being a completion framework. I also do not see why the same cannot be done based on the basis of completion-list-mode. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 17:47 ` Ihor Radchenko @ 2024-07-07 17:56 ` Eli Zaretskii 2024-07-13 13:43 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-07 17:56 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Sun, 07 Jul 2024 17:47:56 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > We have Ibuffer and Dired (and other similar features), which > > functions that return lists of marked entities. That is what needs > > to be used for multiple selections, not some loop over read-file-name > > and its ilk. > > My concern about dired and similar is that it is not possible to exit > them and go back to the original place as easily as C-g in the > completion prompt. Interactive narrowing is also not as easy as in the > completion. I didn't mean Dired as use it for browsing a directory. I meant a UI for selecting multiple files that reuses Dired, and lets users exit it with "C-c C-c" or somesuch. IOW, my intent was to point out the features to generalize and extend in order to have what you want. (For buffers, I think Ibuffer already offers an almost complete solution.) > >> I wish that *completions* buffer allowed selecting multiple candidates > >> at once when using `completing-read-multiple' or similar commands. > > > > I think completion is the wrong framework for this purpose, because > > the user might want to select files/buffers/whatever whose names don't > > share anything in common. > > IMHO, helm proves that completion framework can be used for very quick > selection. It does it via: > > 1. The notion of "current" candidate from the list that can be navigated > right from the minibuffer (like next/previous-completion in the > *completions*) > 2. minibuffer command to mark/unmark candidates quickly > 3. ability to retain marked candidates even the prompt input changes > > I find it quick and convenient to use, despite being a completion > framework. > > I also do not see why the same cannot be done based on the basis of > completion-list-mode. The display parts might be suitable for selection, but the entire completion machinery behind this makes absolutely no sense for the purpose of selection based on attributes that are not names or collection of strings. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 17:56 ` Eli Zaretskii @ 2024-07-13 13:43 ` Ihor Radchenko 2024-07-13 13:53 ` Eli Zaretskii 2024-07-13 14:19 ` Thierry Volpiatto 0 siblings, 2 replies; 40+ messages in thread From: Ihor Radchenko @ 2024-07-13 13:43 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> My concern about dired and similar is that it is not possible to exit >> them and go back to the original place as easily as C-g in the >> completion prompt. Interactive narrowing is also not as easy as in the >> completion. > > I didn't mean Dired as use it for browsing a directory. I meant a UI > for selecting multiple files that reuses Dired, and lets users exit it > with "C-c C-c" or somesuch. > > IOW, my intent was to point out the features to generalize and extend > in order to have what you want. (For buffers, I think Ibuffer already > offers an almost complete solution.) May you please explain in more details how you envision such multi-file selection interface? (For context, I am interested in this question to extend M-x org-attach where I want to allow users select multiple files at once; or, similarly, to extend the email attachment prompt) >> IMHO, helm proves that completion framework can be used for very quick >> selection. It does it via: >> >> 1. The notion of "current" candidate from the list that can be navigated >> right from the minibuffer (like next/previous-completion in the >> *completions*) >> 2. minibuffer command to mark/unmark candidates quickly >> 3. ability to retain marked candidates even the prompt input changes >> >> I find it quick and convenient to use, despite being a completion >> framework. >> >> I also do not see why the same cannot be done based on the basis of >> completion-list-mode. > > The display parts might be suitable for selection, but the entire > completion machinery behind this makes absolutely no sense for the > purpose of selection based on attributes that are not names or > collection of strings. Is it? AFAIK, packages like consult allow searching by metadata. Isn't custom COLLECTION function not suitable? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 13:43 ` Ihor Radchenko @ 2024-07-13 13:53 ` Eli Zaretskii 2024-07-13 14:15 ` Ihor Radchenko 2024-07-13 14:19 ` Thierry Volpiatto 1 sibling, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-13 13:53 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Sat, 13 Jul 2024 13:43:53 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > I didn't mean Dired as use it for browsing a directory. I meant a UI > > for selecting multiple files that reuses Dired, and lets users exit it > > with "C-c C-c" or somesuch. > > > > IOW, my intent was to point out the features to generalize and extend > > in order to have what you want. (For buffers, I think Ibuffer already > > offers an almost complete solution.) > > May you please explain in more details how you envision such multi-file > selection interface? Basically, present a Dired-like list of files and let the users mark the files they want to select. Many GUI programs show file-selection dialogs, which allow selection of more than one file, and that is what I had in mind. > >> I also do not see why the same cannot be done based on the basis of > >> completion-list-mode. > > > > The display parts might be suitable for selection, but the entire > > completion machinery behind this makes absolutely no sense for the > > purpose of selection based on attributes that are not names or > > collection of strings. > > Is it? AFAIK, packages like consult allow searching by metadata. Isn't > custom COLLECTION function not suitable? Of course, one can make the COLLECTION function do whatever one wants, including coffee, love, and whatnot. But how in the world could the result be called "completion" if it doesn't complete anything?? ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 13:53 ` Eli Zaretskii @ 2024-07-13 14:15 ` Ihor Radchenko 2024-07-13 14:28 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-13 14:15 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> May you please explain in more details how you envision such multi-file >> selection interface? > > Basically, present a Dired-like list of files and let the users mark > the files they want to select. Many GUI programs show file-selection > dialogs, which allow selection of more than one file, and that is what > I had in mind. Will something like ------------- dired-completion-mode ----------------- [candidates] -rw-r--r-- 1 yantar92 yantar92 936 Jun 25 10:22 CONTRIBUTE.org -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING ------------------- minibuffer ------------------------ Choose files: CO work? Basically, instead of the completion buffer, there is dired-derived buffer narrowed according to the minibuffer input. Then, users can mark files by switching to "dired-completion-mode" and using the usual dired mark commands, including bulk marks. ------------- dired-completion-mode ----------------- [selected files] -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> [candidates] -rw-r--r-- 1 yantar92 yantar92 936 Jun 25 10:22 CONTRIBUTE.org ------------------- minibuffer ------------------------ Choose files: CO Later, users can go back to minibuffer and change the input, narrowing to a potentially different set of files: ------------- dired-completion-mode ----------------- [selected files] -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> [candidates] drwxr-xr-x 8 yantar92 yantar92 4096 Jul 13 16:04 .git -rw-r--r-- 1 yantar92 yantar92 1044 Jun 25 10:22 .gitignore -rw-r--r-- 1 yantar92 yantar92 95 Jun 25 10:22 .gitmodules ------------------- minibuffer ------------------------ Choose files: git They can then mark the new files as needed ------------- dired-completion-mode ----------------- [selected files] -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> drwxr-xr-x 8 yantar92 yantar92 4096 Jul 13 16:04 .git <MARKED> -rw-r--r-- 1 yantar92 yantar92 95 Jun 25 10:22 .gitmodules <MARKED> [candidates] -rw-r--r-- 1 yantar92 yantar92 1044 Jun 25 10:22 .gitignore ------------------- minibuffer ------------------------ Choose files: git ... or unmark, by using the unmark commands in the same buffer on "selected files". >> > The display parts might be suitable for selection, but the entire >> > completion machinery behind this makes absolutely no sense for the >> > purpose of selection based on attributes that are not names or >> > collection of strings. >> >> Is it? AFAIK, packages like consult allow searching by metadata. Isn't >> custom COLLECTION function not suitable? > > Of course, one can make the COLLECTION function do whatever one wants, > including coffee, love, and whatnot. But how in the world could the > result be called "completion" if it doesn't complete anything?? This sounds a bit strange, but I think that this line of the discussion is deviating from my central question of multi-file selection. How exactly the minibuffer input is matched against the files (be it just a file name/path or also attributes/contents/major mode/what not) is not my concern. Let's focus on selecting multiple files via completion. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 14:15 ` Ihor Radchenko @ 2024-07-13 14:28 ` Eli Zaretskii 2024-07-14 12:16 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-13 14:28 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Sat, 13 Jul 2024 14:15:56 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > Basically, present a Dired-like list of files and let the users mark > > the files they want to select. Many GUI programs show file-selection > > dialogs, which allow selection of more than one file, and that is what > > I had in mind. > > Will something like > > ------------- dired-completion-mode ----------------- > [candidates] > -rw-r--r-- 1 yantar92 yantar92 936 Jun 25 10:22 CONTRIBUTE.org > -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING > ------------------- minibuffer ------------------------ > Choose files: CO > > work? Why do you need the minibuffer part "Choose files: CO"? why not simply let users mark the selected files using Dired mark commands? > Later, users can go back to minibuffer and change the input, narrowing > to a potentially different set of files: > > ------------- dired-completion-mode ----------------- > [selected files] > -rw-r--r-- 1 yantar92 yantar92 35151 Jun 25 10:22 COPYING <MARKED> > [candidates] > drwxr-xr-x 8 yantar92 yantar92 4096 Jul 13 16:04 .git > -rw-r--r-- 1 yantar92 yantar92 1044 Jun 25 10:22 .gitignore > -rw-r--r-- 1 yantar92 yantar92 95 Jun 25 10:22 .gitmodules > ------------------- minibuffer ------------------------ > Choose files: git I think the minibuffer part is over-engineering it. Dired has all the functionality you need, including the ability to go to different directories etc. There's no need to invoke completion-like UIs, which basically all assume the file names have common beginnings. This assumption is a limitation when selecting multiple files. > Let's focus on selecting multiple files via completion. How did "completion" enter the picture? The original question was about ways to select multiple files, which is much wider and more general than just completing on file names. When the user needs to select a file, completion is just a means of saving them some typing. That idea basically becomes irrelevant when users need to select several files whose names might not have anything in common. GUI applications have solved this problem long ago, so why should Emacs insist on inventing its own idiosyncratic solution? ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 14:28 ` Eli Zaretskii @ 2024-07-14 12:16 ` Ihor Radchenko 2024-07-14 13:11 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-14 12:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > Why do you need the minibuffer part "Choose files: CO"? why not simply > let users mark the selected files using Dired mark commands? > ... > How did "completion" enter the picture? The original question was > about ways to select multiple files, which is much wider and more > general than just completing on file names. When the user needs to > select a file, completion is just a means of saving them some typing. > That idea basically becomes irrelevant when users need to select > several files whose names might not have anything in common. GUI > applications have solved this problem long ago, so why should Emacs > insist on inventing its own idiosyncratic solution? In my use case, the user may not immediately know if she needs to attach a single file or multiple files. So, having two separate interfaces for single file vs. multiple files is awkward. Moreover, in my experience using a similar command (implemented using helm), completion is actually extremely useful: 1. It is much faster to jump to specific folder using completion vs. using in-buffer navigation in dired. Especially when I am looking for deeply nested folders. 2. It is not uncommon for me to attach files that have common names. Having completion under the fingertips is better compared to manually entering dired filters. (in dired, there is an extra key sequence required) I can totally see some people preferring dired buffer UI to select files, but then I do not see why the same people would not then prefer dired to select a single file as well. Is it something you think would be worth having (dired as _single_ file selection dialogue)? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-14 12:16 ` Ihor Radchenko @ 2024-07-14 13:11 ` Eli Zaretskii 2024-07-15 18:52 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-14 13:11 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Sun, 14 Jul 2024 12:16:53 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > Why do you need the minibuffer part "Choose files: CO"? why not simply > > let users mark the selected files using Dired mark commands? > > ... > > How did "completion" enter the picture? The original question was > > about ways to select multiple files, which is much wider and more > > general than just completing on file names. When the user needs to > > select a file, completion is just a means of saving them some typing. > > That idea basically becomes irrelevant when users need to select > > several files whose names might not have anything in common. GUI > > applications have solved this problem long ago, so why should Emacs > > insist on inventing its own idiosyncratic solution? > > In my use case, the user may not immediately know if she needs to attach > a single file or multiple files. So, having two separate interfaces for > single file vs. multiple files is awkward. There's no need to use two interfaces. use just one: the one that can handle several files. Selecting a single file from a list is known to work and be natural for many years, including in Emacs. We even have a convention that if no files are marked, the current file is the selected one. > Moreover, in my experience using a similar command (implemented using > helm), completion is actually extremely useful: Resist that. This will lead you astray. > 1. It is much faster to jump to specific folder using completion > vs. using in-buffer navigation in dired. Especially when I am looking > for deeply nested folders. Jumping to a folder doesn't need selection of more than one name, so I don't see how it is relevant here. > 2. It is not uncommon for me to attach files that have common > names. Having completion under the fingertips is better compared to > manually entering dired filters. (in dired, there is an extra key > sequence required) Files that have common names are usually listed together, so I don't think this problem is as serious as you describe it. A useful feature for selecting files is, when the user types a characters, to move point the first file whose name begins with that character. If we implement that, you get the best of all worlds. > I can totally see some people preferring dired buffer UI to select > files, but then I do not see why the same people would not then prefer > dired to select a single file as well. Is it something you think would > be worth having (dired as _single_ file selection dialogue)? Selecting a single file with Dired-like UI is IMO both possible and natural, see above. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-14 13:11 ` Eli Zaretskii @ 2024-07-15 18:52 ` Ihor Radchenko 2024-07-15 19:22 ` Eli Zaretskii 2024-07-16 5:09 ` Yuri Khan 0 siblings, 2 replies; 40+ messages in thread From: Ihor Radchenko @ 2024-07-15 18:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> In my use case, the user may not immediately know if she needs to attach >> a single file or multiple files. So, having two separate interfaces for >> single file vs. multiple files is awkward. > > There's no need to use two interfaces. use just one: the one that can > handle several files. Selecting a single file from a list is known to > work and be natural for many years, including in Emacs. We even have > a convention that if no files are marked, the current file is the > selected one. I am not convinced that Dired UI is better, but I can see how dired UI can be a good choice for some people. Let's discuss what should be changed in dired to adapt it to multi-file selection. I am trying to simulate some use-cases when users need to select multiple files using dired: 1. Single file is trivial 2. Multiple files in the same folder are also trivial - use mark commands 3. What does not seem to be trivial is selecting multiple files residing in different folders. What do you think should be done to dired to get this? I am thinking about something similar to my previous ideas - having a separate section in dired buffer that lists marked files. -------------- dired-select ------------------- [ Selected files ] * -rw-r--r-- 1 yantar92 1.2M Jul 6 15:31 xdisp.c (from Git/emacs/src/) * -rw-r--r-- 1 yantar92 2.5K May 3 15:24 local.mk (from Git/org-mode) * -rw-r--r-- 1 yantar92 3.8K Jul 13 18:16 Makefile (from Git/org-mode) [ Dir ] /home/yantar92/Git/org-mode: drwxr-xr-x 3 yantar92 4.0K Jul 15 09:48 doc drwxr-xr-x 5 yantar92 4.0K Jul 15 09:06 etc drwxr-xr-x 2 yantar92 20K Jul 15 16:30 lisp drwxr-xr-x 2 yantar92 4.0K Jul 13 18:16 mk drwxr-xr-x 2 yantar92 4.0K Jun 12 2022 paches drwxr-xr-x 5 yantar92 4.0K Jul 15 10:45 testing -rw-r--r-- 1 yantar92 936 Jun 25 10:22 CONTRIBUTE.org -rw-r--r-- 1 yantar92 1.9K Jun 25 10:22 README.org -rw-r--r-- 1 yantar92 35K Jun 25 10:22 COPYING * -rw-r--r-- 1 yantar92 2.5K May 3 15:24 local.mk * -rw-r--r-- 1 yantar92 3.8K Jul 13 18:16 Makefile My only concern is what to do when the folder contains many files and the first section listing the marked files may not be visible when scrolling the buffer. >> 2. It is not uncommon for me to attach files that have common >> names. Having completion under the fingertips is better compared to >> manually entering dired filters. (in dired, there is an extra key >> sequence required) > > Files that have common names are usually listed together, so I don't > think this problem is as serious as you describe it. A useful feature > for selecting files is, when the user types a characters, to move > point the first file whose name begins with that character. If we > implement that, you get the best of all worlds. Why only to file that _begins_ with a character? Why not also moving to a file that have specific work in its name? regexp? I feel that we are coming back to the idea of completing read... -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-15 18:52 ` Ihor Radchenko @ 2024-07-15 19:22 ` Eli Zaretskii 2024-07-15 19:52 ` Ihor Radchenko 2024-07-16 5:09 ` Yuri Khan 1 sibling, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-15 19:22 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Mon, 15 Jul 2024 18:52:00 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > 3. What does not seem to be trivial is selecting multiple files residing > in different folders. What do you think should be done to dired to > get this? Why do you need to change anything? It should be possible to mark some files, then go to a different directory and mark some more files, etc. When the user eventually types "C-c C-c", the list of all the selected files in all the directories is returned to the caller. An alternative could be for the user to insert another directory into the buffer, like 'i' in Dired does. > I am thinking about something similar to my previous ideas - having a > separate section in dired buffer that lists marked files. > > -------------- dired-select ------------------- > [ Selected files ] > * -rw-r--r-- 1 yantar92 1.2M Jul 6 15:31 xdisp.c (from Git/emacs/src/) > * -rw-r--r-- 1 yantar92 2.5K May 3 15:24 local.mk (from Git/org-mode) > * -rw-r--r-- 1 yantar92 3.8K Jul 13 18:16 Makefile (from Git/org-mode) > [ Dir ] > /home/yantar92/Git/org-mode: > drwxr-xr-x 3 yantar92 4.0K Jul 15 09:48 doc > drwxr-xr-x 5 yantar92 4.0K Jul 15 09:06 etc > drwxr-xr-x 2 yantar92 20K Jul 15 16:30 lisp > drwxr-xr-x 2 yantar92 4.0K Jul 13 18:16 mk > drwxr-xr-x 2 yantar92 4.0K Jun 12 2022 paches > drwxr-xr-x 5 yantar92 4.0K Jul 15 10:45 testing > -rw-r--r-- 1 yantar92 936 Jun 25 10:22 CONTRIBUTE.org > -rw-r--r-- 1 yantar92 1.9K Jun 25 10:22 README.org > -rw-r--r-- 1 yantar92 35K Jun 25 10:22 COPYING > * -rw-r--r-- 1 yantar92 2.5K May 3 15:24 local.mk > * -rw-r--r-- 1 yantar92 3.8K Jul 13 18:16 Makefile This has two disadvantages: . if there are many files, moving too far down will scroll the selected files out of view . it is unusual, and so at least some users will be confused > > Files that have common names are usually listed together, so I don't > > think this problem is as serious as you describe it. A useful feature > > for selecting files is, when the user types a characters, to move > > point the first file whose name begins with that character. If we > > implement that, you get the best of all worlds. > > Why only to file that _begins_ with a character? Why not also moving to > a file that have specific work in its name? regexp? Because it is unusual and idiosyncratic. By contrast, what I describe exists in many selection dialogs, and so will be familiar. But if you want to have selection based on regexps, then Dired has the "% m REGEXP" command. So this, too, is already available. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-15 19:22 ` Eli Zaretskii @ 2024-07-15 19:52 ` Ihor Radchenko 2024-07-16 10:05 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-15 19:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> 3. What does not seem to be trivial is selecting multiple files residing >> in different folders. What do you think should be done to dired to >> get this? > > Why do you need to change anything? It should be possible to mark > some files, then go to a different directory and mark some more files, > etc. When the user eventually types "C-c C-c", the list of all the > selected files in all the directories is returned to the caller. How to unmark after you go to a different directory? > An alternative could be for the user to insert another directory into > the buffer, like 'i' in Dired does. 'i' works poorly when the directories contain many files - you get way too long list of files, potentially with duplicate names, that is a nighmare to search through. Even with regexps. >> -------------- dired-select ------------------- >> [ Selected files ] >> * -rw-r--r-- 1 yantar92 1.2M Jul 6 15:31 xdisp.c (from Git/emacs/src/) >> [ Dir ] >> /home/yantar92/Git/org-mode: > ... > > This has two disadvantages: > > . if there are many files, moving too far down will scroll the > selected files out of view Sure. That's literally my concern as well. That's why I suggested to use completion-based interface rather than dired-based. With completions window, there is usually no need to scroll - typing in minibuffer is a lot more efficient to narrow down to the desired file. As an alternative, maybe we can list the selected files in the minibuffer? > . it is unusual, and so at least some users will be confused Any new UI will be unusual. As since we cannot use dired as is (AFAIU), introducing something new is simply inevitable. Also, I am not sure if it is that much unusual - I replicated my dired look in the above. With https://github.com/Fuco1/dired-hacks?tab=readme-ov-file#filter-groups, it is how dired UI looks like. Example: /home/yantar92/Git/org-mode: [ Dirs ] drwxr-xr-x 3 yantar92 4.0K Jul 15 09:48 doc drwxr-xr-x 5 yantar92 4.0K Jul 15 09:06 etc drwxr-xr-x 2 yantar92 20K Jul 15 16:30 lisp drwxr-xr-x 2 yantar92 4.0K Jul 13 18:16 mk drwxr-xr-x 2 yantar92 4.0K Jun 12 2022 paches drwxr-xr-x 5 yantar92 4.0K Jul 15 10:45 testing [ Documents ] -rw-r--r-- 1 yantar92 936 Jun 25 10:22 CONTRIBUTE.org -rw-r--r-- 1 yantar92 1.9K Jun 25 10:22 README.org [ Default ] -rw-r--r-- 1 yantar92 35K Jun 25 10:22 COPYING -rw-r--r-- 1 yantar92 2.5K May 3 15:24 local.mk -rw-r--r-- 1 yantar92 3.8K Jul 13 18:16 Makefile >> > Files that have common names are usually listed together, so I don't >> > think this problem is as serious as you describe it. A useful feature >> > for selecting files is, when the user types a characters, to move >> > point the first file whose name begins with that character. If we >> > implement that, you get the best of all worlds. >> >> Why only to file that _begins_ with a character? Why not also moving to >> a file that have specific work in its name? regexp? > > Because it is unusual and idiosyncratic. By contrast, what I describe > exists in many selection dialogs, and so will be familiar. Yes, it is. Idiosyncratic for Emacs. Just like isearch. I really see no reason to _not_ allow flexibility we already have in Emacs and instead trying to mimic the limitations idiosyncatic to Windows/Mac. > But if you want to have selection based on regexps, then Dired has the > "% m REGEXP" command. So this, too, is already available. I was talking about jumping to regexp match. In any case, isearch should be available, including searching by regexp. Maybe it is good enough? Especially since we may not want to shadow existing single-letter bindings in dired. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-15 19:52 ` Ihor Radchenko @ 2024-07-16 10:05 ` Eli Zaretskii 2024-07-23 11:13 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-16 10:05 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Mon, 15 Jul 2024 19:52:26 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> 3. What does not seem to be trivial is selecting multiple files residing > >> in different folders. What do you think should be done to dired to > >> get this? > > > > Why do you need to change anything? It should be possible to mark > > some files, then go to a different directory and mark some more files, > > etc. When the user eventually types "C-c C-c", the list of all the > > selected files in all the directories is returned to the caller. > > How to unmark after you go to a different directory? The same way you mark them? Or maybe I don't understand what difficulties you have in mind. > > An alternative could be for the user to insert another directory into > > the buffer, like 'i' in Dired does. > > 'i' works poorly when the directories contain many files - you get way > too long list of files, potentially with duplicate names, that is a > nighmare to search through. Even with regexps. How is this different from a directory that has a lot of files to begin with? Searching in an Emacs buffer is hardly a problem. At the very least, it's way more convenient than searching a typical GUI file-selection dialog, at least IME. > > . if there are many files, moving too far down will scroll the > > selected files out of view > > Sure. That's literally my concern as well. That's why I suggested to use > completion-based interface rather than dired-based. With completions > window, there is usually no need to scroll - typing in minibuffer is a > lot more efficient to narrow down to the desired file. > > As an alternative, maybe we can list the selected files in the minibuffer? The mini-window is ill-suited for showing long lists, so I'd recommend against that. > > . it is unusual, and so at least some users will be confused > > Any new UI will be unusual. Selecting files from a Dired-like list is non unusual. Both Emacs users and users who come from other GUI applications will feel right at home. > As since we cannot use dired as is (AFAIU), We can't? why not? > introducing something new is simply inevitable. > > Also, I am not sure if it is that much unusual - I replicated my dired > look in the above. With > https://github.com/Fuco1/dired-hacks?tab=readme-ov-file#filter-groups, > it is how dired UI looks like. Example: You miss my point. The unusual part is that the selected files are shown at the beginning of the buffer instead of being left in their original places with an indication that they were selected. > >> Why only to file that _begins_ with a character? Why not also moving to > >> a file that have specific work in its name? regexp? > > > > Because it is unusual and idiosyncratic. By contrast, what I describe > > exists in many selection dialogs, and so will be familiar. > > Yes, it is. Idiosyncratic for Emacs. Just like isearch. > I really see no reason to _not_ allow flexibility we already have in > Emacs and instead trying to mimic the limitations idiosyncatic to > Windows/Mac. What limitations are those? > > But if you want to have selection based on regexps, then Dired has the > > "% m REGEXP" command. So this, too, is already available. > > I was talking about jumping to regexp match. > In any case, isearch should be available, including searching by regexp. Exactly. > Maybe it is good enough? Especially since we may not want to shadow > existing single-letter bindings in dired. If that is the problem (but I don't see why, since most of those bindings are to dired-do-SOMETHING, which are not relevant for selecting files), we can find a solution, like M-<letter> or something. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-16 10:05 ` Eli Zaretskii @ 2024-07-23 11:13 ` Ihor Radchenko 2024-07-23 12:05 ` Eli Zaretskii 2024-07-23 16:02 ` Yuri Khan 0 siblings, 2 replies; 40+ messages in thread From: Ihor Radchenko @ 2024-07-23 11:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> How to unmark after you go to a different directory? > > The same way you mark them? Or maybe I don't understand what > difficulties you have in mind. Imagine that a user marks two files: 1. /home/user/1/2/3/4/5/file1 2. /home/user/5/4/3/2/1/file2 During step (2), dired will display <...>/5/4/3/2/1/ directory. Now, imagine that file1 needs to be unmarked. To do it, the user will have to go up all the way to /home/user and descent down to 1/2/3/4/5 - very awkward. And even more awkward if the user does not remember the full path for file1. >> 'i' works poorly when the directories contain many files - you get way >> too long list of files, potentially with duplicate names, that is a >> nighmare to search through. Even with regexps. > > How is this different from a directory that has a lot of files to > begin with? Searching in an Emacs buffer is hardly a problem. At the > very least, it's way more convenient than searching a typical GUI > file-selection dialog, at least IME. The most important difference is that "i" may create duplicate file names, which never happens when there is a single directory. Then, searching cannot help much to narrow down to the desired file name. Also, there will always be more files in multiple directories compared to single directory (on average). So, users will have to search through longer file lists. >> > . it is unusual, and so at least some users will be confused >> >> Any new UI will be unusual. > > Selecting files from a Dired-like list is non unusual. Both Emacs > users and users who come from other GUI applications will feel right > at home. >> As since we cannot use dired as is (AFAIU), > > We can't? why not? IMHO, dired as it does not provide a good way to _show_ which files are selected without having to scroll through the whole file listing. >> Also, I am not sure if it is that much unusual - I replicated my dired >> look in the above. With >> https://github.com/Fuco1/dired-hacks?tab=readme-ov-file#filter-groups, >> it is how dired UI looks like. Example: > > You miss my point. The unusual part is that the selected files are > shown at the beginning of the buffer instead of being left in their > original places with an indication that they were selected. Sorry, I was not clear. I did not mean that marked files will be removed from the main file listing. I meant that marked files will be displayed on top _in addition_ to being marked in the normal listing. This is to see an overview of all the selected files together, without having to scroll through all the directory files (marked + unmarked). >> > Because it is unusual and idiosyncratic. By contrast, what I describe >> > exists in many selection dialogs, and so will be familiar. >> >> Yes, it is. Idiosyncratic for Emacs. Just like isearch. >> I really see no reason to _not_ allow flexibility we already have in >> Emacs and instead trying to mimic the limitations idiosyncatic to >> Windows/Mac. > > What limitations are those? No option to use custom `completion-styles'. >> Maybe it is good enough? Especially since we may not want to shadow >> existing single-letter bindings in dired. > > If that is the problem (but I don't see why, since most of those > bindings are to dired-do-SOMETHING, which are not relevant for > selecting files) I mostly referred to "m" (mark) and "u" (unmark) bindings. They are relevant. > ... , we can find a solution, like M-<letter> or > something. Could be an option, yes. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 11:13 ` Ihor Radchenko @ 2024-07-23 12:05 ` Eli Zaretskii 2024-07-23 16:30 ` Ihor Radchenko 2024-07-23 16:02 ` Yuri Khan 1 sibling, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-23 12:05 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Tue, 23 Jul 2024 11:13:07 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> How to unmark after you go to a different directory? > > > > The same way you mark them? Or maybe I don't understand what > > difficulties you have in mind. > > Imagine that a user marks two files: > 1. /home/user/1/2/3/4/5/file1 > 2. /home/user/5/4/3/2/1/file2 > > During step (2), dired will display <...>/5/4/3/2/1/ directory. > > Now, imagine that file1 needs to be unmarked. To do it, the user will > have to go up all the way to /home/user and descent down to 1/2/3/4/5 - > very awkward. And even more awkward if the user does not remember the > full path for file1. It isn't any more awkward than the way forward, from /home/user/1/2/3/4/5/file1 to /home/user/5/4/3/2/1/file2. If you want to help such use case, my suggestion is to show the list of selected items in a separate window. > >> 'i' works poorly when the directories contain many files - you get way > >> too long list of files, potentially with duplicate names, that is a > >> nighmare to search through. Even with regexps. > > > > How is this different from a directory that has a lot of files to > > begin with? Searching in an Emacs buffer is hardly a problem. At the > > very least, it's way more convenient than searching a typical GUI > > file-selection dialog, at least IME. > > The most important difference is that "i" may create duplicate file > names, which never happens when there is a single directory. Then, > searching cannot help much to narrow down to the desired file name. > > Also, there will always be more files in multiple directories compared > to single directory (on average). So, users will have to search through > longer file lists. If we insist on digging out problems, however rare and improbable, we will never do anything at all. I don't see how the minor issues you mention justify an idiosyncratic solution specific to Emacs. Have we learned nothing from our long history? Idiosyncratic solutions could be justified when there was no "prior art" because Emacs was a pioneering application, but this is not that case, far from it. > > Selecting files from a Dired-like list is non unusual. Both Emacs > > users and users who come from other GUI applications will feel right > > at home. > > >> As since we cannot use dired as is (AFAIU), > > > > We can't? why not? > > IMHO, dired as it does not provide a good way to _show_ which files are > selected without having to scroll through the whole file listing. I cannot disagree more. You are rejecting a good solution with which Emacs users, both veteran and newbies, are familiar enough, for no good reason. > >> Also, I am not sure if it is that much unusual - I replicated my dired > >> look in the above. With > >> https://github.com/Fuco1/dired-hacks?tab=readme-ov-file#filter-groups, > >> it is how dired UI looks like. Example: > > > > You miss my point. The unusual part is that the selected files are > > shown at the beginning of the buffer instead of being left in their > > original places with an indication that they were selected. > > Sorry, I was not clear. I did not mean that marked files will be removed > from the main file listing. I meant that marked files will be displayed > on top _in addition_ to being marked in the normal listing. This is to > see an overview of all the selected files together, without having to > scroll through all the directory files (marked + unmarked). If you want to show a list of selected files, show them in a separate window, but leave the original Dired-style list of the files intact. > >> > Because it is unusual and idiosyncratic. By contrast, what I describe > >> > exists in many selection dialogs, and so will be familiar. > >> > >> Yes, it is. Idiosyncratic for Emacs. Just like isearch. > >> I really see no reason to _not_ allow flexibility we already have in > >> Emacs and instead trying to mimic the limitations idiosyncatic to > >> Windows/Mac. > > > > What limitations are those? > > No option to use custom `completion-styles'. First, that could be added without changing the UI and UX. And second, how did we get to completion again? this is about selection of multiple files, not about completion. > >> Maybe it is good enough? Especially since we may not want to shadow > >> existing single-letter bindings in dired. > > > > If that is the problem (but I don't see why, since most of those > > bindings are to dired-do-SOMETHING, which are not relevant for > > selecting files) > > I mostly referred to "m" (mark) and "u" (unmark) bindings. They are relevant. Those commands could be bound to non-character keys, at least as an option. Once again, we should first make the overall design decisions, and only after that talk about minor details like key bindings. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 12:05 ` Eli Zaretskii @ 2024-07-23 16:30 ` Ihor Radchenko 2024-07-23 16:35 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-23 16:30 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > If you want to show a list of selected files, show them in a separate > window, but leave the original Dired-style list of the files intact. That's an option. I am wondering what kind of window configuration should be used to show the two windows. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 16:30 ` Ihor Radchenko @ 2024-07-23 16:35 ` Eli Zaretskii 2024-07-23 16:40 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Eli Zaretskii @ 2024-07-23 16:35 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Tue, 23 Jul 2024 16:30:33 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > If you want to show a list of selected files, show them in a separate > > window, but leave the original Dired-style list of the files intact. > > That's an option. I am wondering what kind of window configuration > should be used to show the two windows. Probably something at user's control. There's no way to know how small or large the user screen could be, and how they like their windows. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 16:35 ` Eli Zaretskii @ 2024-07-23 16:40 ` Ihor Radchenko 2024-07-23 17:48 ` Eli Zaretskii 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-23 16:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> That's an option. I am wondering what kind of window configuration >> should be used to show the two windows. > > Probably something at user's control. There's no way to know how > small or large the user screen could be, and how they like their > windows. Sure. But it is not clear how users will control it. We always have `display-buffer-alist', but it is more suited for individual windows, while we need to coordinate two windows together in this scenario. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 16:40 ` Ihor Radchenko @ 2024-07-23 17:48 ` Eli Zaretskii 0 siblings, 0 replies; 40+ messages in thread From: Eli Zaretskii @ 2024-07-23 17:48 UTC (permalink / raw) To: Ihor Radchenko; +Cc: mardani29, emacs-devel > From: Ihor Radchenko <yantar92@posteo.net> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org > Date: Tue, 23 Jul 2024 16:40:05 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> That's an option. I am wondering what kind of window configuration > >> should be used to show the two windows. > > > > Probably something at user's control. There's no way to know how > > small or large the user screen could be, and how they like their > > windows. > > Sure. But it is not clear how users will control it. Via a user option, I guess, how else? > We always have `display-buffer-alist', but it is more suited for > individual windows, while we need to coordinate two windows together in > this scenario. I see no reason to use such a heavy hammer in this case. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-23 11:13 ` Ihor Radchenko 2024-07-23 12:05 ` Eli Zaretskii @ 2024-07-23 16:02 ` Yuri Khan 1 sibling, 0 replies; 40+ messages in thread From: Yuri Khan @ 2024-07-23 16:02 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, mardani29, emacs-devel On Tue, 23 Jul 2024 at 18:12, Ihor Radchenko <yantar92@posteo.net> wrote: > Imagine that a user marks two files: > 1. /home/user/1/2/3/4/5/file1 > 2. /home/user/5/4/3/2/1/file2 > > During step (2), dired will display <...>/5/4/3/2/1/ directory. > > Now, imagine that file1 needs to be unmarked. To do it, the user will > have to go up all the way to /home/user and descent down to 1/2/3/4/5 - > very awkward. And even more awkward if the user does not remember the > full path for file1. It seems to me what you want is a shopping cart UI for files. Use cases: 1. When in a Dired buffer, I want to be able to add one or more files to the cart. 2. When in a Dired buffer containing one or more files that are in the cart, I want to see them as marked. 3. When in a Dired buffer containing one or more files that are in the cart, I want to be able to remove some of them from the cart. 4. At any time, I want to be able to see the list of files in the cart. 5. When in the cart, I want to be able to remove some or all of its files. 6. When in the cart, I want to be able to execute a command that accepts a set of files. Stretch goal: 7. I want to be able to have multiple carts, one of them designated as “current” for purposes of cases 1–3. 8. When in the cart, I want to see the total number and/or size and/or disk usage of its files. A cart could be a separate buffer containing full file names, one per line, with embedded newlines suitably escaped. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-15 18:52 ` Ihor Radchenko 2024-07-15 19:22 ` Eli Zaretskii @ 2024-07-16 5:09 ` Yuri Khan 1 sibling, 0 replies; 40+ messages in thread From: Yuri Khan @ 2024-07-16 5:09 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, mardani29, emacs-devel On Tue, 16 Jul 2024 at 01:51, Ihor Radchenko <yantar92@posteo.net> wrote: > Why only to file that _begins_ with a character? Why not also moving to > a file that have specific wor[d] in its name? regexp? Prior art: In file managers descending from Norton Commander, there is usually a way to start typing to get incremental prefix search over file names; if you enter a * at the search prompt, it becomes substring/glob search. In my experience, wanting to use the full power of regular expressions has been rare; the extension of glob mini-language with character sets like [aoeui] or [0-9] proved to be handy at times. (Anyway, isearch solves both needs; type-to-search-by-prefix only makes it more convenient for the most common case.) (Somewhat off-topic but related: In those same NC-descending file managers, when you start typing, the default behavior is for typed characters to go into the shell prompt. I have missed this type-to-shell feature in Dired on many occasions.) ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 13:43 ` Ihor Radchenko 2024-07-13 13:53 ` Eli Zaretskii @ 2024-07-13 14:19 ` Thierry Volpiatto 2024-07-13 14:19 ` Ihor Radchenko 1 sibling, 1 reply; 40+ messages in thread From: Thierry Volpiatto @ 2024-07-13 14:19 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, mardani29, emacs-devel Ihor Radchenko <yantar92@posteo.net> writes: > Eli Zaretskii <eliz@gnu.org> writes: > >>> My concern about dired and similar is that it is not possible to exit >>> them and go back to the original place as easily as C-g in the >>> completion prompt. Interactive narrowing is also not as easy as in the >>> completion. >> >> I didn't mean Dired as use it for browsing a directory. I meant a UI >> for selecting multiple files that reuses Dired, and lets users exit it >> with "C-c C-c" or somesuch. >> >> IOW, my intent was to point out the features to generalize and extend >> in order to have what you want. (For buffers, I think Ibuffer already >> offers an almost complete solution.) > > May you please explain in more details how you envision such multi-file > selection interface? > > (For context, I am interested in this question to extend M-x org-attach > where I want to allow users select multiple files at once; or, > similarly, to extend the email attachment prompt) For your helm users you can already use something like this: (defvar helm-comp-read-use-marked) (if (bound-and-true-p helm-mode) (let ((helm-comp-read-use-marked t)) (completing-read prompt candidates)) ; or read-file-name... (completing-read-multiple prompt candidates)) >>> IMHO, helm proves that completion framework can be used for very quick >>> selection. It does it via: >>> >>> 1. The notion of "current" candidate from the list that can be navigated >>> right from the minibuffer (like next/previous-completion in the >>> *completions*) >>> 2. minibuffer command to mark/unmark candidates quickly >>> 3. ability to retain marked candidates even the prompt input changes >>> >>> I find it quick and convenient to use, despite being a completion >>> framework. >>> >>> I also do not see why the same cannot be done based on the basis of >>> completion-list-mode. >> >> The display parts might be suitable for selection, but the entire >> completion machinery behind this makes absolutely no sense for the >> purpose of selection based on attributes that are not names or >> collection of strings. > > Is it? AFAIK, packages like consult allow searching by metadata. Isn't > custom COLLECTION function not suitable? -- Thierry ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 14:19 ` Thierry Volpiatto @ 2024-07-13 14:19 ` Ihor Radchenko 0 siblings, 0 replies; 40+ messages in thread From: Ihor Radchenko @ 2024-07-13 14:19 UTC (permalink / raw) To: Thierry Volpiatto; +Cc: Eli Zaretskii, mardani29, emacs-devel Thierry Volpiatto <thievol@posteo.net> writes: >> (For context, I am interested in this question to extend M-x org-attach >> where I want to allow users select multiple files at once; or, >> similarly, to extend the email attachment prompt) > > For your helm users you can already use something like this: > > (defvar helm-comp-read-use-marked) > (if (bound-and-true-p helm-mode) > (let ((helm-comp-read-use-marked t)) > (completing-read prompt candidates)) ; or read-file-name... > (completing-read-multiple prompt candidates)) Sure, but I want the same thing to work for non-helm users. Preferably, without having to write helm-specific/ivy-specific/etc code. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-07 16:03 ` Eli Zaretskii 2024-07-07 17:18 ` Ihor Radchenko @ 2024-07-08 12:00 ` Max Nikulin 2024-07-13 14:00 ` Ihor Radchenko 1 sibling, 1 reply; 40+ messages in thread From: Max Nikulin @ 2024-07-08 12:00 UTC (permalink / raw) To: emacs-devel On 07/07/2024 23:03, Eli Zaretskii wrote: >> From: Ihor Radchenko Date: Sun, 07 Jul 2024 15:56:45 +0000 >> >> I am wondering if `read-file-name' could be extended to read multiple >> file names at once. > > I think you are generalizing the wrong UI. A good UI for specifying > several file names is not reading them one after the other, it is > marking the files you want to operate on, and then clicking GO. Like > in Ibuffer, for example. Marking items is convenient in some cases, but I like that bash-completion or built-in readline path completion in shell prompt allow me to *type* multiple file names. However it better than strictly "one after another" since it is possible to move earlier typed text and to edit it. Ihor, have you considered custom keymap to add current text to a list variable? However editing earlier added entries may be tricky. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-08 12:00 ` Max Nikulin @ 2024-07-13 14:00 ` Ihor Radchenko 2024-07-14 9:00 ` Max Nikulin 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-13 14:00 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-devel Max Nikulin <manikulin@gmail.com> writes: > Marking items is convenient in some cases, but I like that > bash-completion or built-in readline path completion in shell prompt > allow me to *type* multiple file names. However it better than strictly > "one after another" since it is possible to move earlier typed text and > to edit it. Do you mean wildcards? > Ihor, have you considered custom keymap to add current text to a list > variable? However editing earlier added entries may be tricky. This is conceptually similar to `completing-read-multiple', AFAIU: Prompt: exact-file-name,file-with-wildcard.*,another-file Is my understanding correct? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-13 14:00 ` Ihor Radchenko @ 2024-07-14 9:00 ` Max Nikulin 2024-07-14 12:33 ` Ihor Radchenko 0 siblings, 1 reply; 40+ messages in thread From: Max Nikulin @ 2024-07-14 9:00 UTC (permalink / raw) To: emacs-devel On 13/07/2024 21:00, Ihor Radchenko wrote: > Max Nikulin writes: > >> Marking items is convenient in some cases, but I like that >> bash-completion or built-in readline path completion in shell prompt >> allow me to *type* multiple file names. However it better than strictly >> "one after another" since it is possible to move earlier typed text and >> to edit it. > > Do you mean wildcards? Wildcards are convenient as well, but primary I had in mind multiple arguments tar cvfz f.tar.gz one/two.txt three/four/five.jpg six/seven.org I would prefer to avoid rambling through directories and marking files when I approximately know location of files. I find it convenient to type and hit TAB (or C-/ in some cases) to confirm that a file exists. >> Ihor, have you considered custom keymap to add current text to a list >> variable? However editing earlier added entries may be tricky. > > This is conceptually similar to `completing-read-multiple', AFAIU: > > Prompt: exact-file-name,file-with-wildcard.*,another-file > > Is my understanding correct? If `completing-read-multiple' may be combined with file name completion and escaping of separators then yes. At first I though that it might be easier to bind to key sequences some functions that add/remove current text to/from an externally maintained list (perhaps displayed in another buffer) while single item is presented in the minibuffer. However is should be a pain when users configure their preferred completion frameworks. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-14 9:00 ` Max Nikulin @ 2024-07-14 12:33 ` Ihor Radchenko 2024-07-15 12:12 ` Max Nikulin 0 siblings, 1 reply; 40+ messages in thread From: Ihor Radchenko @ 2024-07-14 12:33 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-devel Max Nikulin <manikulin@gmail.com> writes: >> Do you mean wildcards? > > Wildcards are convenient as well, but primary I had in mind multiple > arguments > > tar cvfz f.tar.gz one/two.txt three/four/five.jpg six/seven.org > > I would prefer to avoid rambling through directories and marking files > when I approximately know location of files. I find it convenient to > type and hit TAB (or C-/ in some cases) to confirm that a file exists. Sorry, but I do not understand what you are describing. Do you mean that you type partial completion, hit TAB, and get _all_ the matching candidates completed, separated by spaces? > At first I though that it might be easier to bind to key sequences some > functions that add/remove current text to/from an externally maintained > list (perhaps displayed in another buffer) while single item is > presented in the minibuffer. However is should be a pain when users > configure their preferred completion frameworks. I think that icicles does exactly this. So does filechooser-read-file-names that Rahguzar shared. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: Q: Is there a built-in way to read multiple file names? 2024-07-14 12:33 ` Ihor Radchenko @ 2024-07-15 12:12 ` Max Nikulin 0 siblings, 0 replies; 40+ messages in thread From: Max Nikulin @ 2024-07-15 12:12 UTC (permalink / raw) To: emacs-devel On 14/07/2024 19:33, Ihor Radchenko wrote: > Max Nikulin writes: >> tar cvfz f.tar.gz one/two.txt three/four/five.jpg six/seven.org >> >> I would prefer to avoid rambling through directories and marking files >> when I approximately know location of files. I find it convenient to >> type and hit TAB (or C-/ in some cases) to confirm that a file exists. > > Sorry, but I do not understand what you are describing. > Do you mean that you type partial completion, hit TAB, and get _all_ the > matching candidates completed, separated by spaces? Usually it is something like tar cvfz f.tar.gz on<TAB>tw<TAB> th<TAB>fo<TAB>f<TAB> s<TAB>se<TAB> to get arguments in the command above. In most cases I prefer this way, not marking each file and directory view may be distracting (at least til <TAB><TAB> to get list of completions). It is basic completion. Rarely I use M-* insert-completions readline function. >> At first I though that it might be easier to bind to key sequences some >> functions that add/remove current text to/from an externally maintained >> list (perhaps displayed in another buffer) while single item is >> presented in the minibuffer. However is should be a pain when users >> configure their preferred completion frameworks. > > I think that icicles does exactly this. So does > filechooser-read-file-names that Rahguzar shared. I do not mind. The question is how much efforts are necessary for minimal variant without external dependencies. ^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2024-07-23 17:48 UTC | newest] Thread overview: 40+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-13 16:28 Q: Is there a built-in way to read multiple file names? Rahguzar 2024-07-14 12:30 ` Ihor Radchenko 2024-07-14 20:29 ` Rahguzar 2024-07-15 19:09 ` Alternative UI for reading multiple choices (was: Q: Is there a built-in way to read multiple file names?) Ihor Radchenko 2024-07-15 20:02 ` [External] : " Drew Adams 2024-07-15 19:12 ` ELPA package: filechooser " Ihor Radchenko 2024-07-16 8:59 ` ELPA package: filechooser Rahguzar -- strict thread matches above, loose matches on Subject: below -- 2024-07-07 7:22 Q: Is there a built-in way to read multiple file names? Ihor Radchenko 2024-07-07 13:26 ` Daniel Martín 2024-07-07 15:56 ` Ihor Radchenko 2024-07-07 16:03 ` Eli Zaretskii 2024-07-07 17:18 ` Ihor Radchenko 2024-07-07 17:38 ` Eli Zaretskii 2024-07-07 17:47 ` Ihor Radchenko 2024-07-07 17:56 ` Eli Zaretskii 2024-07-13 13:43 ` Ihor Radchenko 2024-07-13 13:53 ` Eli Zaretskii 2024-07-13 14:15 ` Ihor Radchenko 2024-07-13 14:28 ` Eli Zaretskii 2024-07-14 12:16 ` Ihor Radchenko 2024-07-14 13:11 ` Eli Zaretskii 2024-07-15 18:52 ` Ihor Radchenko 2024-07-15 19:22 ` Eli Zaretskii 2024-07-15 19:52 ` Ihor Radchenko 2024-07-16 10:05 ` Eli Zaretskii 2024-07-23 11:13 ` Ihor Radchenko 2024-07-23 12:05 ` Eli Zaretskii 2024-07-23 16:30 ` Ihor Radchenko 2024-07-23 16:35 ` Eli Zaretskii 2024-07-23 16:40 ` Ihor Radchenko 2024-07-23 17:48 ` Eli Zaretskii 2024-07-23 16:02 ` Yuri Khan 2024-07-16 5:09 ` Yuri Khan 2024-07-13 14:19 ` Thierry Volpiatto 2024-07-13 14:19 ` Ihor Radchenko 2024-07-08 12:00 ` Max Nikulin 2024-07-13 14:00 ` Ihor Radchenko 2024-07-14 9:00 ` Max Nikulin 2024-07-14 12:33 ` Ihor Radchenko 2024-07-15 12:12 ` Max Nikulin
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).