diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/directories.zsh | 1 | ||||
-rw-r--r-- | lib/functions.zsh | 36 | ||||
-rw-r--r-- | lib/key-bindings.zsh | 10 | ||||
-rw-r--r-- | lib/misc.zsh | 28 | ||||
-rw-r--r-- | lib/spectrum.zsh | 6 | ||||
-rw-r--r-- | lib/termsupport.zsh | 53 |
6 files changed, 85 insertions, 49 deletions
diff --git a/lib/directories.zsh b/lib/directories.zsh index 3bffa9fd9..a50a692c8 100644 --- a/lib/directories.zsh +++ b/lib/directories.zsh @@ -8,6 +8,7 @@ alias -g ....='../../..' alias -g .....='../../../..' alias -g ......='../../../../..' +alias -- -='cd -' alias 1='cd -' alias 2='cd -2' alias 3='cd -3' diff --git a/lib/functions.zsh b/lib/functions.zsh index efb73a1bd..f9d4a9717 100644 --- a/lib/functions.zsh +++ b/lib/functions.zsh @@ -16,19 +16,28 @@ function take() { } function open_command() { + emulate -L zsh + setopt shwordsplit + local open_cmd # define the open command case "$OSTYPE" in - darwin*) open_cmd="open" ;; - cygwin*) open_cmd="cygstart" ;; - linux*) open_cmd="xdg-open" ;; + darwin*) open_cmd='open' ;; + cygwin*) open_cmd='cygstart' ;; + linux*) open_cmd='xdg-open' ;; + msys*) open_cmd='start ""' ;; *) echo "Platform $OSTYPE not supported" return 1 ;; esac - nohup $open_cmd "$@" &>/dev/null + # don't use nohup on OSX + if [[ "$OSTYPE" == darwin* ]]; then + $open_cmd "$@" &>/dev/null + else + nohup $open_cmd "$@" &>/dev/null + fi } # @@ -67,7 +76,7 @@ function try_alias_value() { # # Arguments: # 1. name - The variable to set -# 2. val - The default value +# 2. val - The default value # Return value: # 0 if the variable exists, 3 if it was set # @@ -81,12 +90,12 @@ function default() { # # Arguments: # 1. name - The env variable to set -# 2. val - The default value +# 2. val - The default value # Return value: # 0 if the env variable exists, 3 if it was set # function env_default() { - env | grep -q "^$1=" && return 0 + env | grep -q "^$1=" && return 0 export "$1=$2" && return 3 } @@ -101,7 +110,7 @@ zmodload zsh/langinfo # # By default, reserved characters and unreserved "mark" characters are # not escaped by this function. This allows the common usage of passing -# an entire URL in, and encoding just special characters in it, with +# an entire URL in, and encoding just special characters in it, with # the expectation that reserved and mark characters are used appropriately. # The -r and -m options turn on escaping of the reserved and mark characters, # respectively, which allows arbitrary strings to be fully escaped for @@ -111,8 +120,8 @@ zmodload zsh/langinfo # Returns nonzero if encoding failed. # # Usage: -# omz_urlencode [-r] [-m] <string> -# +# omz_urlencode [-r] [-m] [-P] <string> +# # -r causes reserved characters (;/?:@&=+$,) to be escaped # # -m causes "mark" characters (_.!~*''()-) to be escaped @@ -177,8 +186,8 @@ function omz_urlencode() { # URL-decode a string # # Decodes a RFC 2396 URL-encoded (%-escaped) string. -# This decodes the '+' and '%' escapes in the input string, and leaves -# other characters unchanged. Does not enforce that the input is a +# This decodes the '+' and '%' escapes in the input string, and leaves +# other characters unchanged. Does not enforce that the input is a # valid URL-encoded string. This is a convenience to allow callers to # pass in a full URL or similar strings and decode them for human # presentation. @@ -196,7 +205,7 @@ function omz_urldecode { local caller_encoding=$langinfo[CODESET] local LC_ALL=C export LC_ALL - + # Change + back to ' ' local tmp=${encoded_url:gs/+/ /} # Protect other escapes to pass through the printf unchanged @@ -220,4 +229,3 @@ function omz_urldecode { echo -E "$decoded" } - diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh index eb2b58058..0e056dc72 100644 --- a/lib/key-bindings.zsh +++ b/lib/key-bindings.zsh @@ -27,11 +27,17 @@ if [[ "${terminfo[knp]}" != "" ]]; then bindkey "${terminfo[knp]}" down-line-or-history # [PageDown] - Down a line of history fi +# start typing + [Up-Arrow] - fuzzy find history forward if [[ "${terminfo[kcuu1]}" != "" ]]; then - bindkey "${terminfo[kcuu1]}" up-line-or-search # start typing + [Up-Arrow] - fuzzy find history forward + autoload -U up-line-or-beginning-search + zle -N up-line-or-beginning-search + bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search fi +# start typing + [Down-Arrow] - fuzzy find history backward if [[ "${terminfo[kcud1]}" != "" ]]; then - bindkey "${terminfo[kcud1]}" down-line-or-search # start typing + [Down-Arrow] - fuzzy find history backward + autoload -U down-line-or-beginning-search + zle -N down-line-or-beginning-search + bindkey "${terminfo[kcud1]}" down-line-or-beginning-search fi if [[ "${terminfo[khome]}" != "" ]]; then diff --git a/lib/misc.zsh b/lib/misc.zsh index 8ff076e77..c81dab413 100644 --- a/lib/misc.zsh +++ b/lib/misc.zsh @@ -1,14 +1,19 @@ ## Load smart urls if available -for d in $fpath; do - if [[ -e "$d/url-quote-magic" ]]; then - if [[ -e "$d/bracketed-paste-magic" ]]; then - autoload -Uz bracketed-paste-magic - zle -N bracketed-paste bracketed-paste-magic - fi - autoload -U url-quote-magic - zle -N self-insert url-quote-magic - fi -done +# bracketed-paste-magic is known buggy in zsh 5.1.1 (only), so skip it there; see #4434 +autoload -Uz is-at-least +if [[ $ZSH_VERSION != 5.1.1 ]]; then + for d in $fpath; do + if [[ -e "$d/url-quote-magic" ]]; then + if is-at-least 5.1; then + autoload -Uz bracketed-paste-magic + zle -N bracketed-paste bracketed-paste-magic + fi + autoload -Uz url-quote-magic + zle -N self-insert url-quote-magic + break + fi + done +fi ## jobs setopt long_list_jobs @@ -22,8 +27,7 @@ alias _='sudo' alias please='sudo' ## more intelligent acking for ubuntu users -if which ack-grep &> /dev/null; -then +if which ack-grep &> /dev/null; then alias afind='ack-grep -il' else alias afind='ack -il' diff --git a/lib/spectrum.zsh b/lib/spectrum.zsh index b683aca29..87092d8ae 100644 --- a/lib/spectrum.zsh +++ b/lib/spectrum.zsh @@ -3,7 +3,7 @@ # P.C. Shyamshankar <sykora@lucentbeing.com> # Copied from http://github.com/sykora/etc/blob/master/zsh/functions/spectrum/ -typeset -Ag FX FG BG +typeset -AHg FX FG BG FX=( reset "%{[00m%}" @@ -25,13 +25,13 @@ ZSH_SPECTRUM_TEXT=${ZSH_SPECTRUM_TEXT:-Arma virumque cano Troiae qui primus ab o # Show all 256 colors with color number function spectrum_ls() { for code in {000..255}; do - print -P -- "$code: %F{$code}$ZSH_SPECTRUM_TEXT%f" + print -P -- "$code: %{$FG[$code]%}$ZSH_SPECTRUM_TEXT%{$reset_color%}" done } # Show all 256 colors where the background is set to specific color function spectrum_bls() { for code in {000..255}; do - print -P -- "$BG[$code]$code: $ZSH_SPECTRUM_TEXT %{$reset_color%}" + print -P -- "$code: %{$BG[$code]%}$ZSH_SPECTRUM_TEXT%{$reset_color%}" done } diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 5f61fe8ef..871ab28df 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -9,32 +9,50 @@ function title { emulate -L zsh setopt prompt_subst - + [[ "$EMACS" == *term* ]] && return # if $2 is unset use $1 as default # if it is set and empty, leave it as is : ${2=$1} - if [[ "$TERM" == screen* ]]; then - print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars - elif [[ "$TERM" == xterm* ]] || [[ "$TERM" == rxvt* ]] || [[ "$TERM" == ansi ]] || [[ "$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 - fi + case "$TERM" in + cygwin|xterm*|putty*|rxvt*|ansi) + print -Pn "\e]2;$2:q\a" # set window name + print -Pn "\e]1;$1:q\a" # set tab name + ;; + screen*) + print -Pn "\ek$1:q\e\\" # set screen hardstatus + ;; + *) + if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then + print -Pn "\e]2;$2:q\a" # set window name + print -Pn "\e]1;$1:q\a" # set tab name + else + # Try to use terminfo to set the title + # If the feature is available set title + if [[ -n "$terminfo[fsl]" ]] && [[ -n "$terminfo[tsl]" ]]; then + echoti tsl + print -Pn "$1" + echoti fsl + fi + fi + ;; + esac } ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~" # Avoid duplication of directory in terminals with independent dir display -if [[ $TERM_PROGRAM == Apple_Terminal ]]; then +if [[ "$TERM_PROGRAM" == Apple_Terminal ]]; then ZSH_THEME_TERM_TITLE_IDLE="%n@%m" fi # Runs before showing the prompt function omz_termsupport_precmd { emulate -L zsh - if [[ $DISABLE_AUTO_TITLE == true ]]; then + + if [[ "$DISABLE_AUTO_TITLE" == true ]]; then return fi @@ -44,12 +62,12 @@ function omz_termsupport_precmd { # Runs before executing the command function omz_termsupport_preexec { emulate -L zsh - if [[ $DISABLE_AUTO_TITLE == true ]]; then + setopt extended_glob + + if [[ "$DISABLE_AUTO_TITLE" == true ]]; then return fi - setopt extended_glob - # cmd name only, or if this is sudo or ssh, the next cmd local CMD=${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%} local LINE="${2:gs/%/%%}" @@ -66,19 +84,18 @@ preexec_functions+=(omz_termsupport_preexec) # With extra fixes to handle multibyte chars and non-UTF-8 locales if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then - # Emits the control sequence to notify Terminal.app of the cwd + # Identifies the directory using a file: URI scheme, including + # the host name to disambiguate local vs. remote paths. function update_terminalapp_cwd() { emulate -L zsh - # Identify the directory using a "file:" scheme URL, including - # the host name to disambiguate local vs. remote paths. # Percent-encode the pathname. - local URL_PATH=$(omz_urlencode -P $PWD) + local URL_PATH="$(omz_urlencode -P $PWD)" [[ $? != 0 ]] && return 1 - local PWD_URL="file://$HOST$URL_PATH" + # Undocumented Terminal.app-specific control sequence - printf '\e]7;%s\a' $PWD_URL + printf '\e]7;%s\a' "file://$HOST$URL_PATH" } # Use a precmd hook instead of a chpwd hook to avoid contaminating output |