Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [BUG] With CORRECT_ALL, an interrupted correct puts a truncated entry in history



On 2023-12-05 13:22:07 -0800, Bart Schaefer wrote:
> On Tue, Dec 5, 2023 at 4:57 AM Vincent Lefevre <vincent@xxxxxxxxxx> wrote:
> >
> > I thought that this would have been put in a temporary buffer,
> > until the (possibly corrected) command is validated.
> 
> I'm not sure what you think "validated" means here.

Once the user has no longer any way to discard the command line,
which will then be really run.

> > I think that ^C and 'a' should just skip the history.
> 
> I'm not going to make a decision on that without further feedback.  I
> know that when I use 'a' at the "correct" prompt, I often do
> eventually want to go back and re-execute the command even if I wasn't
> ready to 'e'dit it at the moment of the correction.

Yes, that's why I had suggested an explicit action for that, in my
first message:

│Nothing about the history. I think that the history shouldn't be
│changed. But in this case, a new action (e.g. 'h' for "history")
│to discard the entire command line and put it in the history
│could be useful in some occasions.

Or just use 'e', then immediately put the command in the history
without running it. Is there a zle widget for that? I would find
this useful even when there are no spelling corrections.

Note that I often recall commands from the history, but sometimes,
this isn't the right context, so that I may get a spelling correction
after hitting [Enter] or ^O (accept-line-and-down-history). Putting
the command in the history again if I abort ('a') is not needed in
such a case and will even conflict with a possible future use of ^O
(because I won't execute the subsequent commands after an abort).

> > In particular, the current 'n' one is very ambiguous, because one may
> > want to run the command without any additional prompt for corrections.
> > So perhaps there should be a real
> >
> >     r (`run`)
> 
> Why would you want "discard all and run" but not "accept all and run"?

IMHO, "accept all and run" is potentially dangerous as one doesn't
know the spelling corrections. Proposed spelling corrections are
useful, but they are often wrong (e.g. for files to be created or
arguments that are not filenames) since the spelling correction
mechanism doesn't know the meaning of the arguments (unlike the
completion mechanism).

With "discard all and run", the user knows what will be executed.
This can be useful when recalling complex commands from the history.
In general, such commands have the correct spelling.

>  Anyway I think that's more typically handled by distinguishing 'n'
> /'N' and 'y'/'Y', although (see above) 'a' already discards all.

but the difference with 'n'/'N'/'y'/'Y' is that 'a' does not run
the command.

-- 
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)




Messages sorted by: Reverse Date, Date, Thread, Author