# ZLE set -o emacs # Set cursor as blinking block # 1 blinging block 2 block # 3 blinking under score 4 under score # 5 blinking bar 6 bar echo -n '\e[1 q' # helper repo export SETTING_DIR=$HOME/helper fpath=($SETTING_DIR/zsh $fpath) source $SETTING_DIR/zsh/completion.zsh # Reload zshrc function .() { if [ $# -eq 0 ]; then source $ZDOTDIR/.zshrc else source $@ fi } # Options setopt extended_glob setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. # Edit Command Line autoload -Uz edit-command-line; zle -N edit-command-line bindkey -- "^X^E" edit-command-line # Enable completion autoload -Uz compinit; compinit _comp_options+=(globdots) # With hidden files zstyle ':completion:*' menu select zstyle ':completion::complete:*' gain-privileges 1 # Set variable CONTEXT function _get_context() { CONTEXT_FILE=${CONTEXT_FILE:-~/.task/context} LAST_MODIFY_TIME=$(stat -c %y "$CONTEXT_FILE") if [ ! "$MODIFY_TIME" = "$LAST_MODIFY_TIME" ]; then CONTEXT=$(cat "$CONTEXT_FILE") MODIFY_TIME="$LAST_MODIFY_TIME" fi } function _already_sync_after_wakeup() { WAKEUP=~/.wakeup [ ! -e "$WAKEUP" ] && return 0 latest=$(date -d @`stat -c %Y "$WAKEUP` +%s) if [ $latest -gt $(cat "$WAKEUP") ]; then return 0 else return 1 fi } autoload -Uz add-zsh-hook autoload -Uz parameter add-zsh-hook precmd precmd function precmd() { # LEFT PROMPT # jobstring shows how many jobs in current shell jobstring="$#jobstates"; if [ "$jobstring" = 0 ]; then unset jobstring else jobstring="($jobstring)" fi PROMPT="%B%(?:%F{green}%m%f:%K{red}%F{black}%m%f%k)%f%F{cyan} %c%f%b${jobstring} " # RIGHT PROMPT # Show context and git status of tracking repos at right UNSYNC_REPOS=$(NUM=$($SETTING_DIR/bin/git/check-repos.sh -n); (( $NUM != 0 )) && echo $NUM) _get_context NEED_SYNC=$(_already_sync_after_wakeup || echo S) RPROMPT="%B%K{blue}%F{yellow}${CONTEXT:+ $CONTEXT }%f%k%K{red}%F{black}${UNSYNC_REPOS}${NEED_SYNC}%f%k%b" [ -n "$PRE_POPULATE" ] && print -z "$PRE_POPULATE" } # Directory Stack setopt AUTO_PUSHD # Push the current directory visited on the stack. setopt PUSHD_IGNORE_DUPS # Do not store duplicates in the stack. setopt PUSHD_SILENT # Do not print the directory stack after pushd or popd. alias d='dirs -v' for index ({1..9}) alias "$index"="cd +${index}"; unset index # Create a zkbd compatible hash # To add other keys to this hash, see: man 5 terminfo typeset -g -A key key[Home]="${terminfo[khome]}" key[End]="${terminfo[kend]}" key[Insert]="${terminfo[kich1]}" key[Backspace]="${terminfo[kbs]}" key[Delete]="${terminfo[kdch1]}" key[Up]="${terminfo[kcuu1]}" key[Down]="${terminfo[kcud1]}" key[Left]="${terminfo[kcub1]}" key[Right]="${terminfo[kcuf1]}" key[PageUp]="${terminfo[kpp]}" key[PageDown]="${terminfo[knp]}" key[Shift-Tab]="${terminfo[kcbt]}" bindkey -- ${key[Shift-Tab]} reverse-menu-complete insert-first-word () { zle insert-last-word -- -1 1 } zle -N insert-first-word bindkey '^[,' insert-first-word #bindkey -- "\C-A" beginning-of-line #bindkey -- "\C-E" end-of-line #bindkey -- "\C-d" delete-char #bindkey -- "\C-h" backward-delete-char #bindkey -- "\Ed" delete-word #bindkey -- "\C-w" backward-delete-word #bindkey -- "\C-k" kill-line #bindkey -- "\C-p" up-line-or-history #bindkey -- "\C-n" down-line-or-history #bindkey -- "\C-b" backward-char #bindkey -- "\C-f" forward-char #bindkey -- "\Eb" backward-word #bindkey -- "\Ef" forward-word #bindkey -- "\C-v" quoted-insert #bindkey -- "\E." insert-last-word #bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history #bindkey -- "${key[PageDown]}" end-of-buffer-or-history #bindkey -- "${key[Shift-Tab]}" reverse-menu-complete #bindkey -- "${key[Insert]}" overwrite-mode # Quick jump to parent folders source $SETTING_DIR/zsh/bd.zsh # Load my general settings source $SETTING_DIR/bin/init/load-settings.sh # Finally, make sure the terminal is in application mode, when zle is # active. Only then are the values from $terminfo valid. if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then autoload -Uz add-zle-hook-widget function zle_application_mode_start { echoti smkx } function zle_application_mode_stop { echoti rmkx } add-zle-hook-widget -Uz zle-line-init zle_application_mode_start add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop fi