Horloge constamment mise à jour dans l'invite zsh?

je sais que je peux exécuter une commande date dans mon invite zsh. Cependant, il montre les vieux ; pour voir l'heure actuelle, je dois frapper <return> et obtenez une invite à l'heure actuelle.

y a-t-il un moyen de configurer l'invite zsh pour qu'elle se mette constamment à jour à chaque seconde?

8
demandé sur paulmelnikow 2010-02-03 00:25:35

3 réponses

ce serait .... désagréable dans une invite standard zsh (ou bash, ou d'autres coquilles).

je pense que vous feriez mieux d'utiliser Gnu Screen.

L'écran

peut avoir une ligne d'état qui indique l'heure. Voici un exemple screenrc faites défiler jusqu'à "Red Hat Magazine Un guide de GNU Screen" pour voir l'exemple (je vais reproduire ici) qui, lorsque l'écran est exécuter, afficher l'heure actuelle dans le coin inférieur droit de l' 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

http://www.gnu.org/software/screen /

8
répondu SuperMagic 2010-02-02 21:33:07

Note: j'ai écrit cette réponse pour une question similaire , mais en voyant comment cette question a plus de points de vue, je pense qu'il serait utile de reposter ma réponse ici.

c'est en effet possible sans recourir à des hacks étranges. J'ai cela dans mon .zshrc

RPROMPT='[%D{%L:%M:%S %p}]'

TMOUT=1

TRAPALRM() {
    zle reset-prompt
}

la fonction TRAPALRM est appelée Toutes les secondes TMOUT( dans ce cas 1), et ici elle effectue un rafraîchissement rapide, et le fait jusqu'à ce qu'un la commande commence l'exécution (et elle n'interfère pas avec tout ce que vous tapez sur l'invite avant de frapper enter).

Source: http://www.zsh.org/mla/users/2007/msg00944.html (C'est de 2007!)

36
répondu nitarshan 2017-05-23 12:09:33

sonne comme une demande agréable pour moi. En fait, cela a plus de sens que de montrer l'heure à laquelle l'invite a été affichée.

heureusement Peter Stephenson a publié une technique . Essayez quelque chose comme cela .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
6
répondu Dave Cohen 2012-12-04 12:47:34