diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/aliases.zsh | 4 | ||||
| -rw-r--r-- | lib/completion.zsh | 18 | ||||
| -rw-r--r-- | lib/directories.zsh | 7 | ||||
| -rw-r--r-- | lib/edit-command-line.zsh | 3 | ||||
| -rw-r--r-- | lib/functions.zsh | 64 | ||||
| -rw-r--r-- | lib/git.zsh | 81 | ||||
| -rw-r--r-- | lib/history.zsh | 13 | ||||
| -rw-r--r-- | lib/key-bindings.zsh | 14 | ||||
| -rw-r--r-- | lib/misc.zsh | 4 | ||||
| -rw-r--r-- | lib/rvm.zsh | 4 | ||||
| -rw-r--r-- | lib/spectrum.zsh | 8 | ||||
| -rw-r--r-- | lib/termsupport.zsh | 56 | ||||
| -rw-r--r-- | lib/theme-and-appearance.zsh (renamed from lib/appearance.zsh) | 0 | 
13 files changed, 162 insertions, 114 deletions
diff --git a/lib/aliases.zsh b/lib/aliases.zsh index b47de5bde..14f6ad289 100644 --- a/lib/aliases.zsh +++ b/lib/aliases.zsh @@ -16,10 +16,10 @@ alias history='fc -l 1'  # List direcory contents  alias lsa='ls -lah' -alias l='ls -la' +alias l='ls -lA1'  alias ll='ls -l' +alias la='ls -lA'  alias sl=ls # often screw this up  alias afind='ack-grep -il' -alias x=extract diff --git a/lib/completion.zsh b/lib/completion.zsh index 9c2dfecca..f31e101d5 100644 --- a/lib/completion.zsh +++ b/lib/completion.zsh @@ -8,9 +8,6 @@ setopt always_to_end  WORDCHARS='' -autoload -U compinit -compinit -i -  zmodload -i zsh/complist  ## case-insensitive (all),partial-word and then substring completion @@ -35,19 +32,21 @@ zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-dir  cdpath=(.)  # use /etc/hosts and known_hosts for hostname completion +[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()  [ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()  [ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()  hosts=( +  "$_global_ssh_hosts[@]"    "$_ssh_hosts[@]"    "$_etc_hosts[@]" -  `hostname` +  "$HOST"    localhost  )  zstyle ':completion:*:hosts' hosts $hosts  # Use caching so that commands like apt and dpkg complete are useable  zstyle ':completion::complete:*' use-cache 1 -zstyle ':completion::complete:*' cache-path ~/.oh-my-zsh/cache/ +zstyle ':completion::complete:*' cache-path $ZSH/cache/  # Don't complete uninteresting users  zstyle ':completion:*:*:*:users' ignored-patterns \ @@ -62,3 +61,12 @@ zstyle ':completion:*:*:*:users' ignored-patterns \  # ... unless we really want to.  zstyle '*' single-ignored show +if [ "x$COMPLETION_WAITING_DOTS" = "xtrue" ]; then +  expand-or-complete-with-dots() { +    echo -n "\e[31m......\e[0m" +    zle expand-or-complete +    zle redisplay +  } +  zle -N expand-or-complete-with-dots +  bindkey "^I" expand-or-complete-with-dots +fi diff --git a/lib/directories.zsh b/lib/directories.zsh index bb114f615..e445eb84c 100644 --- a/lib/directories.zsh +++ b/lib/directories.zsh @@ -36,9 +36,4 @@ cd () {  alias md='mkdir -p'  alias rd=rmdir -alias d='dirs -v' - -# mkdir & cd to it -function mcd() {  -  mkdir -p "$1" && cd "$1";  -}
\ No newline at end of file +alias d='dirs -v | head -10' diff --git a/lib/edit-command-line.zsh b/lib/edit-command-line.zsh new file mode 100644 index 000000000..db2000325 --- /dev/null +++ b/lib/edit-command-line.zsh @@ -0,0 +1,3 @@ +autoload -U edit-command-line +zle -N edit-command-line +bindkey '\C-x\C-e' edit-command-line diff --git a/lib/functions.zsh b/lib/functions.zsh index 914f2ef25..63ab755cf 100644 --- a/lib/functions.zsh +++ b/lib/functions.zsh @@ -1,36 +1,13 @@ -## fixme, i duplicated this in xterms - oops -function title { -  if [[ $TERM == "screen" ]]; then -    # Use these two for GNU Screen: -    print -nR $'\033k'$1$'\033'\\\ - -    print -nR $'\033]0;'$2$'\a' -  elif [[ ($TERM =~ "^xterm") ]] || [[ ($TERM == "rxvt") ]]; then -    # Use this one instead for XTerms: -    print -nR $'\033]0;'$*$'\a' -  fi -} - -function precmd { -  title zsh "$PWD" -} - -function preexec { -  emulate -L zsh -  local -a cmd; cmd=(${(z)1}) -  title $cmd[1]:t "$cmd[2,-1]" -} -  function zsh_stats() { -  history | awk '{print $2}' | sort | uniq -c | sort -rn | head +  history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n20  }  function uninstall_oh_my_zsh() { -  /bin/sh $ZSH/tools/uninstall.sh +  /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/uninstall.sh  }  function upgrade_oh_my_zsh() { -  /bin/sh $ZSH/tools/upgrade.sh +  /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/upgrade.sh  }  function take() { @@ -38,38 +15,3 @@ function take() {    cd $1  } -function extract() { -    unset REMOVE_ARCHIVE -     -    if test "$1" = "-r"; then -        REMOVE=1 -        shift -    fi -  if [[ -f $1 ]]; then -    case $1 in -      *.tar.bz2) tar xvjf $1;; -      *.tar.gz) tar xvzf $1;; -      *.tar.xz) tar xvJf $1;; -      *.tar.lzma) tar --lzma -xvf $1;; -      *.bz2) bunzip $1;; -      *.rar) unrar $1;; -      *.gz) gunzip $1;; -      *.tar) tar xvf $1;; -      *.tbz2) tar xvjf $1;; -      *.tgz) tar xvzf $1;; -      *.zip) unzip $1;; -      *.Z) uncompress $1;; -      *.7z) 7z x $1;; -      *) echo "'$1' cannot be extracted via >extract<";; -    esac - -    if [[ $REMOVE_ARCHIVE -eq 1 ]]; then -        echo removing "$1"; -        /bin/rm "$1"; -    fi - -  else -    echo "'$1' is not a valid file" -  fi -} - diff --git a/lib/git.zsh b/lib/git.zsh index 75fdc1f9c..258b1df8f 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -4,15 +4,58 @@ function git_prompt_info() {    echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"  } -parse_git_dirty () { -  if [[ -n $(git status -s 2> /dev/null) ]]; then + +# Checks if working tree is dirty +parse_git_dirty() { +  local SUBMODULE_SYNTAX='' +  if [[ $POST_1_7_2_GIT -gt 0 ]]; then +        SUBMODULE_SYNTAX="--ignore-submodules=dirty" +  fi +  if [[ -n $(git status -s ${SUBMODULE_SYNTAX}  2> /dev/null) ]]; then      echo "$ZSH_THEME_GIT_PROMPT_DIRTY"    else      echo "$ZSH_THEME_GIT_PROMPT_CLEAN"    fi  } -# get the status of the working tree +# get the difference between the local and remote branches +git_remote_status() { +    remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} --symbolic-full-name 2>/dev/null)/refs\/remotes\/} +    if [[ -n ${remote} ]] ; then +        ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l) +        behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l) + +        if [ $ahead -eq 0 ] && [ $behind -gt 0 ] +        then +            echo "$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE" +        elif [ $ahead -gt 0 ] && [ $behind -eq 0 ] +        then +            echo "$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE" +        elif [ $ahead -gt 0 ] && [ $behind -gt 0 ] +        then +            echo "$ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE" +        fi +    fi +} + +# Checks if there are commits ahead from remote +function git_prompt_ahead() { +  if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then +    echo "$ZSH_THEME_GIT_PROMPT_AHEAD" +  fi +} + +# Formats prompt string for current git commit short SHA +function git_prompt_short_sha() { +  SHA=$(git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" +} + +# Formats prompt string for current git commit long SHA +function git_prompt_long_sha() { +  SHA=$(git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" +} + +# Get the status of the working tree  git_prompt_status() {    INDEX=$(git status --porcelain 2> /dev/null)    STATUS="" @@ -26,15 +69,47 @@ git_prompt_status() {    fi    if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then      STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" +  elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" +  elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"    fi    if $(echo "$INDEX" | grep '^R  ' &> /dev/null); then      STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS"    fi    if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then      STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" +  elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"    fi    if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then      STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS"    fi    echo $STATUS  } + +#compare the provided version of git to the version installed and on path +#prints 1 if input version <= installed version +#prints -1 otherwise  +function git_compare_version() { +  local INPUT_GIT_VERSION=$1; +  local INSTALLED_GIT_VERSION +  INPUT_GIT_VERSION=(${(s/./)INPUT_GIT_VERSION}); +  INSTALLED_GIT_VERSION=($(git --version)); +  INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]}); + +  for i in {1..3}; do +    if [[ $INSTALLED_GIT_VERSION[$i] -lt $INPUT_GIT_VERSION[$i] ]]; then +      echo -1 +      return 0 +    fi +  done +  echo 1 +} + +#this is unlikely to change so make it all statically assigned +POST_1_7_2_GIT=$(git_compare_version "1.7.2") +#clean up the namespace slightly by removing the checker function +unset -f git_compare_version + + diff --git a/lib/history.zsh b/lib/history.zsh index ca6f57079..876936b87 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -3,14 +3,11 @@ HISTFILE=$HOME/.zsh_history  HISTSIZE=10000  SAVEHIST=10000 -setopt hist_ignore_dups # ignore duplication command history list -setopt share_history # share command history data - -setopt hist_verify -setopt inc_append_history +setopt append_history  setopt extended_history  setopt hist_expire_dups_first +setopt hist_ignore_dups # ignore duplication command history list  setopt hist_ignore_space - -setopt SHARE_HISTORY -setopt APPEND_HISTORY +setopt hist_verify +setopt inc_append_history +setopt share_history # share command history data diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh index 7196a88ff..5f499f3e8 100644 --- a/lib/key-bindings.zsh +++ b/lib/key-bindings.zsh @@ -1,11 +1,8 @@  # TODO: Explain what some of this does.. -autoload -U compinit -compinit -i  bindkey -e  bindkey '\ew' kill-region  bindkey -s '\el' "ls\n" -bindkey -s '\e.' "..\n"  bindkey '^r' history-incremental-search-backward  bindkey "^[[5~" up-line-or-history  bindkey "^[[6~" down-line-or-history @@ -16,12 +13,23 @@ bindkey '^[[B' down-line-or-search  bindkey "^[[H" beginning-of-line  bindkey "^[[1~" beginning-of-line +bindkey "^[OH" beginning-of-line  bindkey "^[[F"  end-of-line  bindkey "^[[4~" end-of-line +bindkey "^[OF" end-of-line  bindkey ' ' magic-space    # also do history expansion on space +bindkey "^[[1;5C" forward-word +bindkey "^[[1;5D" backward-word +  bindkey '^[[Z' reverse-menu-complete +# Make the delete key (or Fn + Delete on the Mac) work instead of outputting a ~ +bindkey '^?' backward-delete-char +bindkey "^[[3~" delete-char +bindkey "^[3;5~" delete-char +bindkey "\e[3~" delete-char +  # consider emacs keybindings:  #bindkey -e  ## emacs key bindings diff --git a/lib/misc.zsh b/lib/misc.zsh index 4c1743657..0f7e7e925 100644 --- a/lib/misc.zsh +++ b/lib/misc.zsh @@ -9,5 +9,5 @@ bindkey "^[m" copy-prev-shell-word  setopt long_list_jobs  ## pager -export PAGER=less -export LC_CTYPE=en_US.UTF-8 +export PAGER="less -R" +export LC_CTYPE=$LANG diff --git a/lib/rvm.zsh b/lib/rvm.zsh index 597be1b33..cb870a9bb 100644 --- a/lib/rvm.zsh +++ b/lib/rvm.zsh @@ -1,7 +1,5 @@  # get the name of the branch we are on  function rvm_prompt_info() {    ruby_version=$(~/.rvm/bin/rvm-prompt 2> /dev/null) || return -  echo "($ruby_version)" +  [[ ! -z $ruby_version ]] && echo "($ruby_version)"  } - - diff --git a/lib/spectrum.zsh b/lib/spectrum.zsh index 4006a7fe1..2fdf537ef 100644 --- a/lib/spectrum.zsh +++ b/lib/spectrum.zsh @@ -18,3 +18,11 @@ for color in {000..255}; do      FG[$color]="%{[38;5;${color}m%}"      BG[$color]="%{[48;5;${color}m%}"  done + +# Show all 256 colors with color number +function spectrum_ls() { +  for code in {000..255}; do +    print -P -- "$code: %F{$code}Test%f" +  done +} + diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index fef978748..e26fef6d3 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -1,21 +1,35 @@ -case "$TERM" in -  xterm*|rxvt*) -    preexec () { -      print -Pn "\e]0;%n@%m: $1\a"  # xterm -    } -    precmd () { -      print -Pn "\e]0;%n@%m: %~\a"  # xterm -    } -    ;; -  screen*) -    preexec () { -      local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} -      echo -ne "\ek$CMD\e\\" -      print -Pn "\e]0;%n@%m: $1\a"  # xterm -    } -    precmd () { -      echo -ne "\ekzsh\e\\" -      print -Pn "\e]0;%n@%m: %~\a"  # xterm -    } -    ;; -esac
\ No newline at end of file +#usage: title short_tab_title looooooooooooooooooooooggggggg_windows_title +#http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#ss3.1 +#Fully support screen, iterm, and probably most modern xterm and rxvt +#Limited support for Apple Terminal (Terminal can't set window or tab separately) +function title { +  if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then +    return +  fi +  if [[ "$TERM" == screen* ]]; then +    print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars +  elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then +    print -Pn "\e]2;$2:q\a" #set window name +    print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal) +  fi +} + +ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD +ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~" + +#Appears when you have the prompt +function omz_termsupport_precmd { +  title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE +} + +#Appears at the beginning of (and during) of command execution +function omz_termsupport_preexec { +  emulate -L zsh +  setopt extended_glob +  local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd +  title "$CMD" "%100>...>$2%<<" +} + +autoload -U add-zsh-hook +add-zsh-hook precmd  omz_termsupport_precmd +add-zsh-hook preexec omz_termsupport_preexec diff --git a/lib/appearance.zsh b/lib/theme-and-appearance.zsh index aec67721a..aec67721a 100644 --- a/lib/appearance.zsh +++ b/lib/theme-and-appearance.zsh  | 
