diff options
Diffstat (limited to '_zsh')
| -rw-r--r-- | _zsh/aliases.zsh | 32 | ||||
| -rw-r--r-- | _zsh/bindkeys.zsh | 25 | ||||
| -rw-r--r-- | _zsh/checks.zsh | 17 | ||||
| -rw-r--r-- | _zsh/colors.zsh | 27 | ||||
| -rw-r--r-- | _zsh/completion.zsh | 60 | ||||
| -rw-r--r-- | _zsh/exports.zsh | 14 | ||||
| -rw-r--r-- | _zsh/functions.zsh | 93 | ||||
| -rw-r--r-- | _zsh/history.zsh | 10 | ||||
| -rw-r--r-- | _zsh/hooks.zsh | 28 | ||||
| -rw-r--r-- | _zsh/prompt.zsh | 34 | ||||
| -rw-r--r-- | _zsh/setopt.zsh | 56 | 
11 files changed, 396 insertions, 0 deletions
diff --git a/_zsh/aliases.zsh b/_zsh/aliases.zsh new file mode 100644 index 0000000..7b1b26f --- /dev/null +++ b/_zsh/aliases.zsh @@ -0,0 +1,32 @@ +# +# zsh/aliases.zsh +# + +alias ..='cd ../' +alias ...='cd ../../' +alias ....='cd ../../../' +alias cd..='cd ..' +alias d='dirs -v | head -10' +alias po=popd +alias pu=pushd + +#alias history='fc -l 1' + +alias ls='ls --color=auto' +alias l='ls -lah' +alias la='ls -lAh' +alias ll='ls -lh' +alias lsa='ls -lah' + +alias grep='grep --color=auto' + +alias e='emacs' +alias v='vim' + +alias ta='tmux attach -t' +alias tl='tmux list-sessions' +alias ts='tmux new-session -s' +alias tkss='tmux kill-session -t' +alias tksv='tmux kill-server' + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/bindkeys.zsh b/_zsh/bindkeys.zsh new file mode 100644 index 0000000..781d260 --- /dev/null +++ b/_zsh/bindkeys.zsh @@ -0,0 +1,25 @@ +# +# zsh/bindkeys.zsh +# +# To see the key combo you want to use just do: +# cat > /dev/null +# And press it +# + +bindkey "^K"    kill-whole-line                      # ctrl-k +bindkey "^R"    history-incremental-search-backward  # ctrl-r +bindkey "^A"    beginning-of-line                    # ctrl-a +bindkey "^E"    end-of-line                          # ctrl-e +bindkey "[B"    history-search-forward               # down arrow +bindkey "[A"    history-search-backward              # up arrow +bindkey "^D"    delete-char                          # ctrl-d +bindkey "^F"    forward-char                         # ctrl-f +bindkey "^B"    backward-char                        # ctrl-b +bindkey '^P'    up-history +bindkey '^N'    down-history +bindkey '^W'    backward-kill-word + +## vi mode +bindkey -v + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/checks.zsh b/_zsh/checks.zsh new file mode 100644 index 0000000..6868e2c --- /dev/null +++ b/_zsh/checks.zsh @@ -0,0 +1,17 @@ +# +# zsh/checks.zsh +# +# Credits: http://zanshin.net/2013/02/02/zsh-configuration-from-the-ground-up/ +# + +if [[ $(uname) = 'Linux' ]]; then +    IS_LINUX=1 +elif [[ $(uname) = 'FreeBSD' ]]; then +    IS_FREEBSD=1 +    IS_BSD=1 +elif [[ $(uname) = 'DragonFly' ]]; then +    IS_DRAGONFLY=1 +    IS_BSD=1 +fi + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/colors.zsh b/_zsh/colors.zsh new file mode 100644 index 0000000..b9a4797 --- /dev/null +++ b/_zsh/colors.zsh @@ -0,0 +1,27 @@ +# +# zsh/colors.sh +# + +autoload -U colors && colors + +# The variables are wrapped in %{%}. This should be the case for every +# variable that does not contain space. +for COLOR in RED GREEN YELLOW BLUE MAGENTA CYAN BLACK WHITE; do +  eval PR_$COLOR='%{$fg_no_bold[${(L)COLOR}]%}' +  eval PR_BOLD_$COLOR='%{$fg_bold[${(L)COLOR}]%}' +done + +eval RESET='$reset_color' +export PR_RED PR_GREEN PR_YELLOW PR_BLUE PR_WHITE PR_BLACK +export PR_BOLD_RED PR_BOLD_GREEN PR_BOLD_YELLOW PR_BOLD_BLUE +export PR_BOLD_WHITE PR_BOLD_BLACK + +# colors for BSD ls +if [[ -n "${IS_BSD}" ]]; then +    export CLICOLOR=1 +    #export LSCOLORS=Gxfxcxdxbxegedabagacad +    export LSCOLORS=exfxcxdxbxegedabagacad +fi + + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/completion.zsh b/_zsh/completion.zsh new file mode 100644 index 0000000..7435125 --- /dev/null +++ b/_zsh/completion.zsh @@ -0,0 +1,60 @@ +# +# zsh/completion.zsh +# + +autoload -U compinit && compinit +zmodload -i zsh/complist + +# man zshcontrib +zstyle ':vcs_info:*' actionformats '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f ' +zstyle ':vcs_info:*' formats '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f ' +zstyle ':vcs_info:*' enable git #svn cvs + +# enable completion caching, use rehash to clear +zstyle ':completion::complete:*' use-cache on +zstyle ':completion::complete:*' cache-path ~/.zsh/cache/$HOST + +# fallback to built in ls colors +zstyle ':completion:*' list-colors '' + +# make the list prompt friendly +zstyle ':completion:*' list-prompt '%SAt %p: Hit TAB for more, or the character to insert%s' + +# make the selection prompt friendly when there are a lot of choices +zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' + +# add simple colors to kill +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01' + +# list of completers to use +zstyle ':completion:*::::' completer _expand _complete _ignored _approximate + +zstyle ':completion:*' menu select=1 _complete _ignored _approximate + +# insert all expansions for expand completer +#zstyle ':completion:*:expand:*' tag-order all-expansions + +# match uppercase from lowercase +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# offer indexes before parameters in subscripts +zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters + +# formatting and messages +zstyle ':completion:*' verbose yes +zstyle ':completion:*:descriptions' format '%B%d%b' +zstyle ':completion:*:messages' format '%d' +zstyle ':completion:*:warnings' format 'No matches for: %d' +zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' +zstyle ':completion:*' group-name '' + +# ignore completion functions (until the _ignored completer) +zstyle ':completion:*:functions' ignored-patterns '_*' +zstyle ':completion:*:scp:*' tag-order files users 'hosts:-host hosts:-domain:domain hosts:-ipaddr"IP\ Address *' +zstyle ':completion:*:scp:*' group-order files all-files users hosts-domain hosts-host hosts-ipaddr +zstyle ':completion:*:ssh:*' tag-order users 'hosts:-host hosts:-domain:domain hosts:-ipaddr"IP\ Address *' +zstyle ':completion:*:ssh:*' group-order hosts-domain hosts-host users hosts-ipaddr +zstyle '*' single-ignored show + + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/exports.zsh b/_zsh/exports.zsh new file mode 100644 index 0000000..8dab42d --- /dev/null +++ b/_zsh/exports.zsh @@ -0,0 +1,14 @@ +# +# zsh/exports.zsh +# + +# set locale and PATH in '~/.profile' + +export EDITOR='vim' +export PAGER='less' +export LESS='--ignore-case --raw-control-chars' + +# Setup terminal, and turn on colors +export TERM='xterm-256color' + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/functions.zsh b/_zsh/functions.zsh new file mode 100644 index 0000000..9b817c1 --- /dev/null +++ b/_zsh/functions.zsh @@ -0,0 +1,93 @@ +# +# zsh/functions.zsh +# + +function zsh_recompile { +    autoload -U zrecompile +    rm -f ~/.zsh/*.zwc +    [[ -f ~/.zshrc ]] && zrecompile -p ~/.zshrc +    [[ -f ~/.zshrc.zwc.old ]] && rm -f ~/.zshrc.zwc.old + +    for f in ~/.zsh/**/*.zsh; do +        [[ -f $f ]] && zrecompile -p $f +        [[ -f $f.zwc.old ]] && rm -f $f.zwc.old +    done + +    [[ -f ~/.zcompdump ]] && zrecompile -p ~/.zcompdump +    [[ -f ~/.zcompdump.zwc.old ]] && rm -f ~/.zcompdump.zwc.old + +    source ~/.zshrc +} + + +function extract { +  echo Extracting $1 ... +  if [ -f "$1" ] ; then +      case "$1" in +          *.tar.bz2) +              tar xjf "$1";; +          *.tar.gz) +              tar xzf "$1";; +          *.bz2) +              bunzip2 "$1";; +          *.rar) +              unrar x "$1";; +          *.gz) +              gunzip "$1";; +          *.tar) +              tar xf "$1";; +          *.tbz2) +              tar xjf "$1";; +          *.tgz) +              tar xzf "$1";; +          *.zip) +              unzip "$1";; +          *.Z) +              uncompress "$1";; +          *.7z) +              7z x "$1";; +          *) +              echo "'$1' cannot be extracted via extract()" ;; +      esac +  else +      echo "'$1' is not a valid file" +  fi +} + + +function trash () { +  local path +  for path in "$@"; do +    # ignore any arguments +    if [[ "${path}" = -* ]]; then +        : +    else +      local dst="${path##*/}" +      # append the time if necessary +      while [ -e ~/.trash/"${dst}" ]; do +        dst="${dst} "$(date +%H-%M-%S) +      done +      \mv "${path}" ~/.trash/"${dst}" +    fi +  done +} + + +function strip_diff_leading_symbols { +    local color_code_regex="(\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K])" + +    # simplify the unified patch diff header +    sed -r "s/^($color_code_regex)diff --git .*$//g" | \ +        sed -r "s/^($color_code_regex)index .*$/\n\1$(rule)/g" | \ +        sed -r "s/^($color_code_regex)\+\+\+(.*)$/\1+++\5\n\1$(rule)\x1B\[m/g" |\ +        # actually strips the leading symbols +        sed -r "s/^($color_code_regex)[\+\-]/\1 /g" +} + + +## Print a horizontal rule +rule() { +    printf "%$(tput cols)s\n" | tr ' ' '─' +} + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/history.zsh b/_zsh/history.zsh new file mode 100644 index 0000000..dd7997e --- /dev/null +++ b/_zsh/history.zsh @@ -0,0 +1,10 @@ +# +# zsh/history.zsh +# + +# history settings +HISTSIZE=10000 +SAVEHIST=9000 +HISTFILE=~/.zsh_history + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/hooks.zsh b/_zsh/hooks.zsh new file mode 100644 index 0000000..9e18053 --- /dev/null +++ b/_zsh/hooks.zsh @@ -0,0 +1,28 @@ +# +# zsh/hooks.zsh +# + +function precmd { +    # vcs_info +    # Put the string "hostname::/full/directory/path" in the title bar: +    echo -ne "\e]2;$PWD\a" + +    # Put the parentdir/currentdir in the tab +    echo -ne "\e]1;$PWD:h:t/$PWD:t\a" +} + + +function set_running_app { +    printf "\e]1; $PWD:t:$(history $HISTCMD | cut -b7- ) \a" +} + +function preexec { +    set_running_app +} + +function postexec { +    set_running_app +} + + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/prompt.zsh b/_zsh/prompt.zsh new file mode 100644 index 0000000..f1f581a --- /dev/null +++ b/_zsh/prompt.zsh @@ -0,0 +1,34 @@ +# +# zsh/prompt.zsh +# + +function git_prompt_info { +    local ref=$(=git symbolic-ref HEAD 2> /dev/null) +    local gitst="$(=git status 2> /dev/null)" + +    if [[ -f .git/MERGE_HEAD ]]; then +        if [[ ${gitst} =~ "unmerged" ]]; then +        gitstatus=" %{$fg[red]%}unmerged%{$reset_color%}" +        else +        gitstatus=" %{$fg[green]%}merged%{$reset_color%}" +        fi +    elif [[ ${gitst} =~ "Changes to be committed" ]]; then +        gitstatus=" %{$fg[blue]%}!%{$reset_color%}" +    elif [[ ${gitst} =~ "use \"git add" ]]; then +        gitstatus=" %{$fg[red]%}!%{$reset_color%}" +    elif [[ -n `git checkout HEAD 2> /dev/null | grep ahead` ]]; then +        gitstatus=" %{$fg[yellow]%}*%{$reset_color%}" +    else +        gitstatus='' +    fi + +    if [[ -n $ref ]]; then +        echo "%{$fg_bold[green]%}/${ref#refs/heads/}%{$reset_color%}$gitstatus" +    fi +} + +PROMPT='%{$fg_bold[blue]%}%~%<< $(git_prompt_info)${PR_BOLD_WHITE}>%{${reset_color}%} ' + +SPROMPT="zsh: correct $fg[red]%R$reset_color to $fg[green]%r$reset_color [(y)es (n)o (a)bort (e)dit]? " + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: # diff --git a/_zsh/setopt.zsh b/_zsh/setopt.zsh new file mode 100644 index 0000000..f80fda6 --- /dev/null +++ b/_zsh/setopt.zsh @@ -0,0 +1,56 @@ +# +# zsh/setopt.zsh +# + +## Basics +setopt NO_BEEP +setopt AUTO_CD +# don't push multiple copies of the same directory into the directory stack +setopt PUSHD_IGNORE_DUPS +# treat #, ~, and ^ as part of patterns for filename generation +setopt EXTENDED_GLOB +# allow comments even in interactive shells (especially for Muness) +setopt INTERACTIVE_COMMENTS + +## History +# allow multiple terminal sessions to all append to one zsh command history +setopt APPEND_HISTORY +# include timestamp of command and duration to history +setopt EXTENDED_HISTORY +# add comamnds as they are typed, don't wait until shell exit +setopt INC_APPEND_HISTORY +# do not write events to history that are duplicates of previous events +setopt HIST_IGNORE_DUPS +# remove command line from history list when it begins a space +setopt HIST_IGNORE_SPACE +# when searching history don't display results already cycled through twice +setopt HIST_FIND_NO_DUPS +# remove extra blanks from each command line being added to history +setopt HIST_REDUCE_BLANKS +# don't execute, just expand history +setopt HIST_VERIFY + + +## Completion +# allow completion from within a word/phrase +setopt COMPLETE_IN_WORD +# when completing from middle of a word, move cursor to the end of the word +setopt ALWAYS_TO_END +# show completion menu on successive tab press (needs 'unsetopt MENU_COMPLETE') +setopt AUTO_MENU +unsetopt MENU_COMPLETE + +## Correction +# spelling correction for commands +setopt CORRECT +# spelling correction for arguments +setopt CORRECTALL + +## Prompt +# enable parameter expansion, command substitution, and arithmetic expansion +# in the prompt +setopt PROMPT_SUBST +# remove any right prompt from display when accepting a command line +setopt TRANSIENT_RPROMPT + +# vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: #  | 
