Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Would like an alias to read the part of the current command line that precedes the alias
- X-seq: zsh-users 16473
- From: dg1727@xxxxxxxxxxxx
- To: zsh-users@xxxxxxx
- Subject: Re: Would like an alias to read the part of the current command line that precedes the alias
- Date: Mon, 10 Oct 2011 19:21:35 -0400
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
On Mon, 10 Oct 2011 19:15:18 -0400 dg1727@xxxxxxxxxxxx wrote:
>Hello,
>
>I am using zsh 4.3.12 on Xubuntu and am trying to find a
>substitute
>for the following which is in the default .bashrc:
>
># Add an "alert" alias for long running commands. Use like so:
># sleep 10; alert
>#alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo
>terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-
>9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
>
>This pops up a notification that says, for example, "sleep 10" to
>let the user know which long-running command has just finished.
>The part of the alias that seems hard to duplicate in zsh is:
>
>history|tail -n1
>
>The closest I have come to a working zsh version of "alert" is to
>define the following function in .zshrc:
>
>function alert_function() {
> local icontype="$([ $? = 0 ] && echo terminal || echo error)"
>
> local last_hist="$argv[*]"
> # This is dependent on this function being called correctly.
> # Calling the function correctly can be done manually as
>follows:
>
> # sleep 2; alert_function !#:0-
> # ... but it is not yet known how to do this in such a way that
>the only
> # punctuation mark that the user needs to type is the ";".
>
> notify-send --urgency=low -i $icontype $last_hist
>}
>
>The comment block tells the story. :-)
>
>The zshexpn manpage says that history expansion (!#:0- in this
>case) is done before alias expansion (or any other expansion).
>That seems to make it difficult for any keyword that consists only
>
>of letters (no punctuation marks), such as 'alert', to refer to
>what precedes it on the command line.
>
>Thanks in advance for suggestions.
My apologies that the lines of code are word-wrapped in my e-mails.
The 3 lines of BASH code starting with #alias were not supposed to
be commented (no # at the beginning), and are all one line in
.bashrc.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author