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

Re: exclude users in watch variable?



On Feb 11,  4:56pm, Daniel Shahaf wrote:
}
}     autoload -Uz add-zsh-hook
}     old=
}     precmd_who() {
}       local new="$(who)"$'\n' # add newline to reduce spurious diffs
}       if [[ -n $old ]] ; then diff =(<<<$old) =(<<<$new) ; fi
}       old=$new
}     }
}     add-zsh-hook precmd precmd_who
} 
} If 'who' doesn't run quickly in your environment you'll notice delays

This seems like an ideal application for the delayed-update trick.

  typeset -gH update_prompt_fd old_who
  typeset -g normal_prompt='%m $ '

  # watch_who expects a single argument that looks like "$(who)" and
  # compares it to the argument passed to the previous watch_who call
  watch_who() {
    local new="$1"$'\n'
    if [[ -n $old_who ]]
    then
      local who_prompt="$(diff =(<<<$old_who) =(<<<$new))"
      if [[ -n $who_prompt ]]
      then PROMPT="$who_prompt"$'\n'"$normal_prompt"
      fi
    fi
    old_who="$new"
  }

  # update_who is a ZLE I/O handler, which reads output from a background
  # process (expected to be "who"), passes it through watch_who, and then
  # deletes the handler instance and updates the prompt
  update_who () {
    watch_who "$(read -d '' -rE -u$1)"
    update_prompt_fd=0
    zle -F $1
    exec {1}>&-
    zle reset-prompt
  }
  zle -N update_who  

  # precmd_who sets up the update_who handler if it is available, and
  # otherwise runs watch_who directly to put the diffs into the prompt.
  # If your "who" is fast, simply skip the "zle -N" above.
  precmd_who() {
    PROMPT="$normal_prompt"
    if zle -l update_who
    then
      (( update_prompt_fd )) && zle -F $update_prompt_fd >/dev/null
      exec {update_prompt_fd}<<( who )
      zle -F -w $update_prompt_fd update_who
    else
      watch_who "$(who)"
    fi
  }

  autoload -Uz add-zsh-hook
  add-zsh-hook precmd precmd_who



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