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

On Mon, 10 Oct 2011 19:15:18 -0400 dg1727@xxxxxxxxxxxx wrote:
>I am using zsh 4.3.12 on Xubuntu and am trying to find a 
>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-
>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 
>  # 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 

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