* Tip of the day: restoring an aborted command-line
@ 2015-07-01 22:12 Oliver Kiddle
2015-07-02 21:29 ` zzapper
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Oliver Kiddle @ 2015-07-01 22:12 UTC (permalink / raw)
To: zsh-users
When you abort a command-line with Ctrl-C or whatever, the Zsh line
editor sets $ZLE_LINE_ABORTED to the contents of the command-line before
it was aborted. Sometimes you might want to recover the aborted line
and you could bind a dedicated key to that purpose. The following trick
instead creates an undo event so that you can simply use an undo to get
back the aborted line:
zle-line-init () {
if [[ -n $ZLE_LINE_ABORTED ]]; then
local savebuf="$BUFFER" savecur="$CURSOR"
BUFFER="$ZLE_LINE_ABORTED"
CURSOR="$#BUFFER"
zle split-undo
BUFFER="$savebuf" CURSOR="$savecur"
fi
}
zle -N zle-line-init
Undo is bound by default to ^_, ^X^U and ^Xu in emacs mode and u in vi
command mode but I find it useful to bind it in vi-insert mode.
Also note the push-input widget if you want to put the current command
line aside but later restore it.
Oliver
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-01 22:12 Tip of the day: restoring an aborted command-line Oliver Kiddle
@ 2015-07-02 21:29 ` zzapper
2015-07-02 23:11 ` Philippe Troin
2015-07-03 2:42 ` Bart Schaefer
2015-07-03 15:49 ` Greg Klanderman
2015-07-05 16:26 ` lilydjwg
2 siblings, 2 replies; 9+ messages in thread
From: zzapper @ 2015-07-02 21:29 UTC (permalink / raw)
To: zsh-users
Oliver Kiddle <okiddle@yahoo.co.uk> wrote in
news:30469.1435788779@thecus.kiddle.eu:
> When you abort a command-line with Ctrl-C or whatever, the Zsh line
> editor sets $ZLE_LINE_ABORTED to the contents of the command-line
> before it was aborted. Sometimes you might want to recover the aborted
> line and you could bind a dedicated key to that purpose. The following
>
> zle-line-init () {
> if [[ -n $ZLE_LINE_ABORTED ]]; then
> local savebuf="$BUFFER" savecur="$CURSOR"
> BUFFER="$ZLE_LINE_ABORTED"
> CURSOR="$#BUFFER"
> zle split-undo
> BUFFER="$savebuf" CURSOR="$savecur"
> fi
> }
> Oliver
is $ZLE_LINE_ABORTED dependent on any autoload? as i have it on cygwin
but not on centos (both 5.08)
--
zzapper
https://twitter.com/dailyzshtip
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-02 21:29 ` zzapper
@ 2015-07-02 23:11 ` Philippe Troin
2015-07-03 2:42 ` Bart Schaefer
1 sibling, 0 replies; 9+ messages in thread
From: Philippe Troin @ 2015-07-02 23:11 UTC (permalink / raw)
To: zzapper; +Cc: zsh-users
On Thu, 2015-07-02 at 21:29 +0000, zzapper wrote:
> Oliver Kiddle <okiddle@yahoo.co.uk> wrote in
> news:30469.1435788779@thecus.kiddle.eu:
>
> > When you abort a command-line with Ctrl-C or whatever, the Zsh line
> > editor sets $ZLE_LINE_ABORTED to the contents of the command-line
> > before it was aborted. Sometimes you might want to recover the aborted
> > line and you could bind a dedicated key to that purpose. The following
>
> >
> > zle-line-init () {
> > if [[ -n $ZLE_LINE_ABORTED ]]; then
> > local savebuf="$BUFFER" savecur="$CURSOR"
> > BUFFER="$ZLE_LINE_ABORTED"
> > CURSOR="$#BUFFER"
> > zle split-undo
> > BUFFER="$savebuf" CURSOR="$savecur"
> > fi
> > }
>
> > Oliver
> is $ZLE_LINE_ABORTED dependent on any autoload? as i have it on cygwin
> but not on centos (both 5.08)
It shouldn't.
I'd like to propose the following enhancement:
zle-line-init () {
if [[ -n $ZLE_LINE_ABORTED ]]; then
_last_aborted_line=$ZLE_LINE_ABORTED
fi
if [[ -n $_last_aborted_line ]]
then
local savebuf="$BUFFER" savecur="$CURSOR"
BUFFER="$_last_aborted_line"
CURSOR="$#BUFFER"
zle split-undo
BUFFER="$savebuf" CURSOR="$savecur"
fi
}
zle -N zle-line-init
zle-line-finish() {
unset _last_aborted_line
}
zle -N zle-line-finish
Now this handle the case when you press Ctrl-C multiple times in a row.
Eg:
zsh% foo=^C
zsh% ^C
zsh% ^C
zsh% <undo>
zsh% foo=
Phil.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-02 21:29 ` zzapper
2015-07-02 23:11 ` Philippe Troin
@ 2015-07-03 2:42 ` Bart Schaefer
2015-07-03 8:56 ` zzapper
1 sibling, 1 reply; 9+ messages in thread
From: Bart Schaefer @ 2015-07-03 2:42 UTC (permalink / raw)
To: zsh-users
On Jul 2, 9:29pm, zzapper wrote:
}
} is $ZLE_LINE_ABORTED dependent on any autoload?
It should be set any time reading a keystroke from the keyboard fails
or the send-break widget is invoked. The former should happen on a
keyboard interrupt. However, it's not a special parameter, so it's
not present in any other circumstances.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-03 2:42 ` Bart Schaefer
@ 2015-07-03 8:56 ` zzapper
0 siblings, 0 replies; 9+ messages in thread
From: zzapper @ 2015-07-03 8:56 UTC (permalink / raw)
To: zsh-users
Bart Schaefer <schaefer@brasslantern.com> wrote in
news:150702194250.ZM10791@torch.brasslantern.com:
> On Jul 2, 9:29pm, zzapper wrote:
> }
> } is $ZLE_LINE_ABORTED dependent on any autoload?
>
Works 4 me everyehere now must have been finger trouble.
(but not for zsh 4.3.10 (x86_64-redhat-linux-gnu) which is the Centos max
yum version)
--
zzapper
https://twitter.com/dailyzshtip
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-01 22:12 Tip of the day: restoring an aborted command-line Oliver Kiddle
2015-07-02 21:29 ` zzapper
@ 2015-07-03 15:49 ` Greg Klanderman
2015-07-05 16:26 ` lilydjwg
2 siblings, 0 replies; 9+ messages in thread
From: Greg Klanderman @ 2015-07-03 15:49 UTC (permalink / raw)
To: zsh-users
Alternately, you can add the aborted command to the kill buffer:
zle-line-init () {
if [[ -n ${ZLE_LINE_ABORTED-} ]] ; then
zle copy-region-as-kill "$ZLE_LINE_ABORTED"
unset ZLE_LINE_ABORTED
fi
}
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-01 22:12 Tip of the day: restoring an aborted command-line Oliver Kiddle
2015-07-02 21:29 ` zzapper
2015-07-03 15:49 ` Greg Klanderman
@ 2015-07-05 16:26 ` lilydjwg
2015-07-05 18:43 ` Bart Schaefer
2015-07-05 21:17 ` Mikael Magnusson
2 siblings, 2 replies; 9+ messages in thread
From: lilydjwg @ 2015-07-05 16:26 UTC (permalink / raw)
To: zsh-users
This is great, but it conflicts with the safe-paste (I learnt here a few
days ago), which also defines zle-line-init. Is there a way to make both
work without making them know the existence of each other?
--
Best regards,
lilydjwg
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-05 16:26 ` lilydjwg
@ 2015-07-05 18:43 ` Bart Schaefer
2015-07-05 21:17 ` Mikael Magnusson
1 sibling, 0 replies; 9+ messages in thread
From: Bart Schaefer @ 2015-07-05 18:43 UTC (permalink / raw)
To: zsh-users
On Jul 6, 12:26am, lilydjwg wrote:
} Subject: Re: Tip of the day: restoring an aborted command-line
}
} This is great, but it conflicts with the safe-paste (I learnt here a few
} days ago), which also defines zle-line-init. Is there a way to make both
} work without making them know the existence of each other?
http://www.zsh.org/cgi-bin/mla/redirect?USERNUMBER=20235
Still a problem in that every user has to define their own widget names
and ordering. There are now several plugins floating around that each
require special zle-line-init/finish handling.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Tip of the day: restoring an aborted command-line
2015-07-05 16:26 ` lilydjwg
2015-07-05 18:43 ` Bart Schaefer
@ 2015-07-05 21:17 ` Mikael Magnusson
1 sibling, 0 replies; 9+ messages in thread
From: Mikael Magnusson @ 2015-07-05 21:17 UTC (permalink / raw)
To: lilydjwg; +Cc: Zsh Users
On Sun, Jul 5, 2015 at 6:26 PM, lilydjwg <lilydjwg@gmail.com> wrote:
> This is great, but it conflicts with the safe-paste (I learnt here a few
> days ago), which also defines zle-line-init. Is there a way to make both
> work without making them know the existence of each other?
Theoretically, you have to manually merge the functions (just make one
function that does the things the two separate ones do). In practice,
the next release of zsh has bracketed pasting builtin so you don't
need to do anything for it anymore.
--
Mikael Magnusson
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-07-05 21:17 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-01 22:12 Tip of the day: restoring an aborted command-line Oliver Kiddle
2015-07-02 21:29 ` zzapper
2015-07-02 23:11 ` Philippe Troin
2015-07-03 2:42 ` Bart Schaefer
2015-07-03 8:56 ` zzapper
2015-07-03 15:49 ` Greg Klanderman
2015-07-05 16:26 ` lilydjwg
2015-07-05 18:43 ` Bart Schaefer
2015-07-05 21:17 ` Mikael Magnusson
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
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 NNTP newsgroup(s).