X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=643d7ae8a0d30227738afa49fc54f87b90693d44;hb=e531d6fcc133cfa82c0849a1845e7cbeaeff5600;hp=1a30e83094e3b79c399731437295dcabe49d36da;hpb=0388e4464474e155fd41d18266813d9ac5795cac;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index 1a30e83..643d7ae 100644 --- a/zsh/rc +++ b/zsh/rc @@ -212,6 +212,45 @@ if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) || zstyle ':vcs_info:*' unstagedstr '¹' zstyle ':vcs_info:*' stagedstr '²' + # Default to running vcs_info. If possible we prevent running it later for + # speed reasons. If set to a non empty value vcs_info is run. + FORCE_RUN_VCS_INFO=1 + + # Cache system inspired by Bart Trojanowski + # (http://jukie.net/~bart/blog/pimping-out-zsh-prompt). + #zstyle ':vcs_info:*+pre-get-data:*' hooks pre-get-data + +vi-pre-get-data() { + # Only Git and Mercurial support and need caching. Abort if any other + # VCS is used. + [[ "$vcs" != git && "$vcs" != hg ]] && return + + # If the shell just started up or we changed directories (or for other + # custom reasons) we must run vcs_info. + if [[ -n $FORCE_RUN_VCS_INFO ]]; then + FORCE_RUN_VCS_INFO= + return + fi + + # Don't run vcs_info by default to speed up the shell. + ret=1 + # If a git/hg command was run then run vcs_info as the status might + # need to be updated. + case "$(fc -ln $(($HISTCMD-1)))" in + git* | g\ *) + ret=0 + ;; + hg*) + ret=0 + ;; + esac + } + + # Must run vcs_info when changing directories. + prompt_chpwd() { + FORCE_RUN_VCS_INFO=1 + } + add-zsh-hook chpwd prompt_chpwd + # Call vcs_info as precmd before every prompt. prompt_precmd() { vcs_info @@ -245,6 +284,9 @@ unset red blue green yellow default # screen is running on the remote machine instead of @screen @:hostname # (hostname replaced by the machine's hostname) is displayed. This only works # if the .zshrc on the server also uses this command. +# +# screen* is necessary as `screen` uses screen.linux for example for a linux +# console. if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then # Is set to a non empty value to reset the window name in the next # precmd() call. @@ -532,18 +574,20 @@ source_config ~/.zsh host rc ${$(hostname)//.*/} # RUN COMMANDS # If not already in screen reattach to a running session or create a new one. -# -# screen* is necessary as `screen` uses screen.linux for example for a linux -# console which would otherwise cause an infinite loop. -if [[ $TERM != screen* && $TERM != 'dumb' ]]; then +# This also starts screen one a remote server when connecting through ssh. +if [[ $TERM != dumb && -z $STY ]]; then # Get running detached sessions. session=$(screen -list | grep 'Detached' | awk '{ print $1; exit }') + + # As we exec later we have to set the title here. + window_preexec "screen" + # Create a new session if none is running. if [[ -z $session ]]; then - screen + exec screen # Reattach to a running session. else - screen -r $session + exec screen -r $session fi fi