Costantemente aggiornato orologio in zsh pronta?
Domanda
So che posso exec un comando date
nel mio zsh pronta.
Tuttavia, esso mostra il vecchia di tempo; per vedere l'ora attuale, devo colpire <return>
e ottenere un nuovo prompt con l'ora corrente.
C'è un modo per configurare il prompt zsh di aggiornare costantemente se stessa ogni secondo?
Soluzione
Questo sarebbe .... sgradevole in uno zsh normale prompt (o bash, o di altre shell).
Vi suggerisco sarebbe meglio utilizzare Gnu schermo.
Lo schermo può avere una riga di stato che può mostrare il tempo. Ecco un esempio screenrc scorrere verso il basso a "Red Hat Magazine Una guida per GNU Screen" per vedere il campione (vi si riproducono che qui) che, quando viene eseguito schermo, mostrare l'ora corrente nell'angolo in basso a destra del terminale:
~ / .screenrc
hardstatus alwayslastline hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]' # Default screens screen -t shell1 0 screen -t shell2 1
Altri suggerimenti
Nota: ho scritto questa risposta per una domanda simile , ma vedendo come questa domanda ha più punti di vista penso reinserire la mia risposta qui sarebbe utile.
Questa è infatti possibile senza ricorrere a strani hack. Ho questo nel mio .zshrc
RPROMPT='[%D{%L:%M:%S %p}]'
TMOUT=1
TRAPALRM() {
zle reset-prompt
}
La funzione TRAPALRM viene chiamata ogni TMOUT secondi (in questo caso 1), e qui si esegue un aggiornamento rapido, e lo fa fino a quando un comando avvia l'esecuzione (e non interferisce con qualsiasi cosa si digita sul prompt prima di colpire entrare).
Fonte: http://www.zsh.org/mla/users/ 2007 / msg00944.html (E 'dal 2007!)
suona come una piacevole richiesta di me. Se qualcosa ha più senso che mostrare il momento in cui è stato visualizzato il messaggio.
Peter Stephenson ha postato una tecnica . Prova qualcosa di simile in .zshrc:
PROMPT="[%T] %n@%M %~ %# "
schedprompt() {
emulate -L zsh
zmodload -i zsh/sched
# Remove existing event, so that multiple calls to
# "schedprompt" work OK. (You could put one in precmd to push
# the timer 30 seconds into the future, for example.)
integer i=${"${(@)zsh_scheduled_events#*:*:}"[(I)schedprompt]}
(( i )) && sched -$i
# Test that zle is running before calling the widget (recommended
# to avoid error messages).
# Otherwise it updates on entry to zle, so there's no loss.
zle && zle reset-prompt
# This ensures we're not too far off the start of the minute
sched +30 schedprompt
}
schedprompt