horloge constamment mis à jour rapidement zsh?
Question
Je sais que je peux exec une commande date
dans mon invite zsh.
Cependant, il montre la vieux temps; pour voir l'heure actuelle, je dois frapper <return>
et d'obtenir une nouvelle invite avec l'heure actuelle.
Est-il possible de configurer l'invite de zsh à se mettre à jour en permanence à chaque seconde?
La solution
Ce serait désagréable .... dans une invite standard zsh (ou bash, ou d'autres coquilles).
Je suggère que vous seriez mieux d'utiliser l'écran Gnu.
L'écran peut avoir une ligne d'état qui peut montrer le temps. Voici un exemple screenrc faire défiler vers le bas pour « Red Hat Magazine Un guide à l'écran GNU » pour voir l'échantillon (je vais reproduire ici que) qui, lorsque l'écran est exécuté, afficher l'heure actuelle dans le coin inférieur droit du terminal:
~ / .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
Autres conseils
Note: J'ai écrit cette réponse pour une question similaire , mais de voir comment cette question a plus de points de vue, je pense reposter ma réponse ici serait utile.
Il est en effet possible sans recourir à des hacks étranges. J'ai dans mon .zshrc
RPROMPT='[%D{%L:%M:%S %p}]'
TMOUT=1
TRAPALRM() {
zle reset-prompt
}
La fonction TRAPALRM est appelée chaque seconde TMOUT (dans ce cas 1), et ici, il effectue un rafraîchissement rapide, et le fait jusqu'à ce qu'une commande démarre l'exécution (et il ne gêne pas tout ce que vous tapez sur l'invite avant de frapper entrer).
Source: http://www.zsh.org/mla/users/ 2007 / msg00944.html (Il est à partir de 2007!)
On dirait une demande agréable pour moi. Si quoi que ce soit, il est plus logique que de montrer le moment où l'invite a été affichée.
Heureusement Peter Stephenson a affiché une technique. Essayez quelque chose comme ceci dans .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