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?

Était-ce utile?

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

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

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top