parent
dde64abad2
commit
69b4bb63b8
@ -0,0 +1,14 @@ |
|||||||
|
# My ZSH configs |
||||||
|
|
||||||
|
All the files prefixed with `omz_` are default configs from oh-my-zsh. |
||||||
|
I'm in the process of migrating off of oh-my-zsh but I'm used to -- and |
||||||
|
like -- some of those default configs. I'm slowly looking into each one |
||||||
|
and deciding if I want to keep it or remove it. |
||||||
|
|
||||||
|
## Completions |
||||||
|
|
||||||
|
Put completions in `~/.zsh/completions`. |
||||||
|
|
||||||
|
## Functions |
||||||
|
|
||||||
|
Put functions in `~/.zsh/functions`. |
@ -0,0 +1,125 @@ |
|||||||
|
#compdef rg |
||||||
|
|
||||||
|
_rg() { |
||||||
|
typeset -A opt_args |
||||||
|
local ret=1 |
||||||
|
|
||||||
|
local context curcontext="$curcontext" state line |
||||||
|
_arguments -s -S -C \ |
||||||
|
"*-e+[A regular expression used for searching.]" \ |
||||||
|
"*--regexp+[A regular expression used for searching.]" \ |
||||||
|
"--color+[When to use color. \[default: auto\]]: :(never auto always ansi)" \ |
||||||
|
"*--colors+[Configure color settings and styles.]" \ |
||||||
|
"-E+[Specify the text encoding of files to search.]" \ |
||||||
|
"--encoding+[Specify the text encoding of files to search.]" \ |
||||||
|
"*-g+[Include or exclude files/directories.]" \ |
||||||
|
"*--glob+[Include or exclude files/directories.]" \ |
||||||
|
"*-t+[Only search files matching TYPE.]" \ |
||||||
|
"*--type+[Only search files matching TYPE.]" \ |
||||||
|
"*-T+[Do not search files matching TYPE.]" \ |
||||||
|
"*--type-not+[Do not search files matching TYPE.]" \ |
||||||
|
"-A+[Show NUM lines after each match.]" \ |
||||||
|
"--after-context+[Show NUM lines after each match.]" \ |
||||||
|
"-B+[Show NUM lines before each match.]" \ |
||||||
|
"--before-context+[Show NUM lines before each match.]" \ |
||||||
|
"-C+[Show NUM lines before and after each match.]" \ |
||||||
|
"--context+[Show NUM lines before and after each match.]" \ |
||||||
|
"--context-separator+[Set the context separator string. \[default: --\]]" \ |
||||||
|
"--dfa-size-limit+[The upper size limit of the generated dfa.]" \ |
||||||
|
"*-f+[Search for patterns from the given file.]" \ |
||||||
|
"*--file+[Search for patterns from the given file.]" \ |
||||||
|
"*--ignore-file+[Specify additional ignore files.]" \ |
||||||
|
"-m+[Limit the number of matches.]" \ |
||||||
|
"--max-count+[Limit the number of matches.]" \ |
||||||
|
"--max-filesize+[Ignore files larger than NUM in size.]" \ |
||||||
|
"--maxdepth+[Descend at most NUM directories.]" \ |
||||||
|
"--path-separator+[Path separator to use when printing file paths.]" \ |
||||||
|
"-r+[Replace matches with string given.]" \ |
||||||
|
"--replace+[Replace matches with string given.]" \ |
||||||
|
"--regex-size-limit+[The upper size limit of the compiled regex.]" \ |
||||||
|
"-j+[The approximate number of threads to use.]" \ |
||||||
|
"--threads+[The approximate number of threads to use.]" \ |
||||||
|
"-M+[Don't print lines longer than this limit in bytes.]" \ |
||||||
|
"--max-columns+[Don't print lines longer than this limit in bytes.]" \ |
||||||
|
"*--type-add+[Add a new glob for a file type.]" \ |
||||||
|
"*--type-clear+[Clear globs for given file type.]" \ |
||||||
|
"(-f --file -e --regexp --type-list)--files[Print each file that would be searched.]" \ |
||||||
|
"(-f --file --files -e --regexp)--type-list[Show all supported file types.]" \ |
||||||
|
"-a[Search binary files as if they were text.]" \ |
||||||
|
"--text[Search binary files as if they were text.]" \ |
||||||
|
"-c[Only show count of matches for each file.]" \ |
||||||
|
"--count[Only show count of matches for each file.]" \ |
||||||
|
"-F[Treat the pattern as a literal string.]" \ |
||||||
|
"--fixed-strings[Treat the pattern as a literal string.]" \ |
||||||
|
"-i[Case insensitive search.]" \ |
||||||
|
"--ignore-case[Case insensitive search.]" \ |
||||||
|
"-n[Show line numbers.]" \ |
||||||
|
"--line-number[Show line numbers.]" \ |
||||||
|
"-N[Suppress line numbers.]" \ |
||||||
|
"--no-line-number[Suppress line numbers.]" \ |
||||||
|
"-q[Do not print anything to stdout.]" \ |
||||||
|
"--quiet[Do not print anything to stdout.]" \ |
||||||
|
"*-u[Reduce the level of "smart" searching.]" \ |
||||||
|
"*--unrestricted[Reduce the level of "smart" searching.]" \ |
||||||
|
"-v[Invert matching.]" \ |
||||||
|
"--invert-match[Invert matching.]" \ |
||||||
|
"-w[Only show matches surrounded by word boundaries.]" \ |
||||||
|
"--word-regexp[Only show matches surrounded by word boundaries.]" \ |
||||||
|
"--column[Show column numbers]" \ |
||||||
|
"--debug[Show debug messages.]" \ |
||||||
|
"-l[Only show the paths with at least one match.]" \ |
||||||
|
"--files-with-matches[Only show the paths with at least one match.]" \ |
||||||
|
"--files-without-match[Only show the paths that contains zero matches.]" \ |
||||||
|
"-H[Show file name for each match.]" \ |
||||||
|
"--with-filename[Show file name for each match.]" \ |
||||||
|
"--no-filename[Never show the file name for a match.]" \ |
||||||
|
"--heading[Show matches grouped by each file.]" \ |
||||||
|
"--no-heading[Don't group matches by each file.]" \ |
||||||
|
"--hidden[Search hidden files and directories.]" \ |
||||||
|
"-L[Follow symbolic links.]" \ |
||||||
|
"--follow[Follow symbolic links.]" \ |
||||||
|
"--mmap[Searching using memory maps when possible.]" \ |
||||||
|
"--no-messages[Suppress all error messages.]" \ |
||||||
|
"--no-mmap[Never use memory maps.]" \ |
||||||
|
"--no-ignore[Don't respect ignore files.]" \ |
||||||
|
"--no-ignore-parent[Don't respect ignore files in parent directories.]" \ |
||||||
|
"--no-ignore-vcs[Don't respect VCS ignore files]" \ |
||||||
|
"-0[Print NUL byte after file names]" \ |
||||||
|
"--null[Print NUL byte after file names]" \ |
||||||
|
"(-r --replace)-o[Print only matched parts of a line.]" \ |
||||||
|
"(-r --replace)--only-matching[Print only matched parts of a line.]" \ |
||||||
|
"-p[Alias for --color always --heading -n.]" \ |
||||||
|
"--pretty[Alias for --color always --heading -n.]" \ |
||||||
|
"-s[Search case sensitively.]" \ |
||||||
|
"--case-sensitive[Search case sensitively.]" \ |
||||||
|
"-S[Smart case search.]" \ |
||||||
|
"--smart-case[Smart case search.]" \ |
||||||
|
"--sort-files[Sort results by file path. Implies --threads=1.]" \ |
||||||
|
"--vimgrep[Show results in vim compatible format.]" \ |
||||||
|
"-h[Prints help information. Use --help for more details.]" \ |
||||||
|
"--help[Prints help information. Use --help for more details.]" \ |
||||||
|
"-V[Prints version information]" \ |
||||||
|
"--version[Prints version information]" \ |
||||||
|
"1:: :_rg_commands" \ |
||||||
|
&& ret=0 |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
(( $+functions[_rg_commands] )) || |
||||||
|
_rg_commands() { |
||||||
|
local commands; commands=( |
||||||
|
"PATTERN:A regular expression used for searching." \ |
||||||
|
"PATH:A file or directory to search." \ |
||||||
|
) |
||||||
|
_describe -t commands 'rg commands' commands "$@" |
||||||
|
} |
||||||
|
(( $+functions[_rg_commands] )) || |
||||||
|
_rg_commands() { |
||||||
|
local commands; commands=( |
||||||
|
"PATTERN:A regular expression used for searching." \ |
||||||
|
"PATH:A file or directory to search." \ |
||||||
|
) |
||||||
|
_describe -t commands 'rg commands' commands "$@" |
||||||
|
} |
||||||
|
|
||||||
|
_rg "$@" |
@ -0,0 +1,60 @@ |
|||||||
|
# Handle completions insecurities (i.e., completion-dependent directories with |
||||||
|
# insecure ownership or permissions) by: |
||||||
|
# |
||||||
|
# * Human-readably notifying the user of these insecurities. |
||||||
|
# * Moving away all existing completion caches to a temporary directory. Since |
||||||
|
# any of these caches may have been generated from insecure directories, they |
||||||
|
# are all suspect now. Failing to do so typically causes subsequent compinit() |
||||||
|
# calls to fail with "command not found: compdef" errors. (That's bad.) |
||||||
|
function handle_completion_insecurities() { |
||||||
|
# List of the absolute paths of all unique insecure directories, split on |
||||||
|
# newline from compaudit()'s output resembling: |
||||||
|
# |
||||||
|
# There are insecure directories: |
||||||
|
# /usr/share/zsh/site-functions |
||||||
|
# /usr/share/zsh/5.0.6/functions |
||||||
|
# /usr/share/zsh |
||||||
|
# /usr/share/zsh/5.0.6 |
||||||
|
# |
||||||
|
# Since the ignorable first line is printed to stderr and thus not captured, |
||||||
|
# stderr is squelched to prevent this output from leaking to the user. |
||||||
|
local -aU insecure_dirs |
||||||
|
insecure_dirs=( ${(f@):-"$(compaudit 2>/dev/null)"} ) |
||||||
|
|
||||||
|
# If no such directories exist, get us out of here. |
||||||
|
if (( ! ${#insecure_dirs} )); then |
||||||
|
print "[oh-my-zsh] No insecure completion-dependent directories detected." |
||||||
|
return |
||||||
|
fi |
||||||
|
|
||||||
|
# List ownership and permissions of all insecure directories. |
||||||
|
print "[oh-my-zsh] Insecure completion-dependent directories detected:" |
||||||
|
ls -ld "${(@)insecure_dirs}" |
||||||
|
print "[oh-my-zsh] For safety, completions will be disabled until you manually fix all" |
||||||
|
print "[oh-my-zsh] insecure directory permissions and ownership and restart oh-my-zsh." |
||||||
|
print "[oh-my-zsh] See the above list for directories with group or other writability.\n" |
||||||
|
|
||||||
|
# Locally enable the "NULL_GLOB" option, thus removing unmatched filename |
||||||
|
# globs from argument lists *AND* printing no warning when doing so. Failing |
||||||
|
# to do so prints an unreadable warning if no completion caches exist below. |
||||||
|
setopt local_options null_glob |
||||||
|
|
||||||
|
# List of the absolute paths of all unique existing completion caches. |
||||||
|
local -aU zcompdump_files |
||||||
|
zcompdump_files=( "${ZSH_COMPDUMP}"(.) "${ZDOTDIR:-${HOME}}"/.zcompdump* ) |
||||||
|
|
||||||
|
# Move such caches to a temporary directory. |
||||||
|
if (( ${#zcompdump_files} )); then |
||||||
|
# Absolute path of the directory to which such files will be moved. |
||||||
|
local ZSH_ZCOMPDUMP_BAD_DIR="${ZSH_CACHE_DIR}/zcompdump-bad" |
||||||
|
|
||||||
|
# List such files first. |
||||||
|
print "[oh-my-zsh] Insecure completion caches also detected:" |
||||||
|
ls -l "${(@)zcompdump_files}" |
||||||
|
|
||||||
|
# For safety, move rather than permanently remove such files. |
||||||
|
print "[oh-my-zsh] Moving to \"${ZSH_ZCOMPDUMP_BAD_DIR}/\"...\n" |
||||||
|
mkdir -p "${ZSH_ZCOMPDUMP_BAD_DIR}" |
||||||
|
mv "${(@)zcompdump_files}" "${ZSH_ZCOMPDUMP_BAD_DIR}/" |
||||||
|
fi |
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
# fixme - the load process here seems a bit bizarre |
||||||
|
zmodload -i zsh/complist |
||||||
|
|
||||||
|
WORDCHARS='' |
||||||
|
|
||||||
|
unsetopt menu_complete # do not autoselect the first completion entry |
||||||
|
unsetopt flowcontrol |
||||||
|
setopt auto_menu # show completion menu on successive tab press |
||||||
|
setopt complete_in_word |
||||||
|
setopt always_to_end |
||||||
|
|
||||||
|
# should this be in keybindings? |
||||||
|
bindkey -M menuselect '^o' accept-and-infer-next-history |
||||||
|
zstyle ':completion:*:*:*:*:*' menu select |
||||||
|
|
||||||
|
# case insensitive (all), partial-word and substring completion |
||||||
|
if [[ "$CASE_SENSITIVE" = true ]]; then |
||||||
|
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' |
||||||
|
else |
||||||
|
if [[ "$HYPHEN_INSENSITIVE" = true ]]; then |
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*' |
||||||
|
else |
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' |
||||||
|
fi |
||||||
|
fi |
||||||
|
unset CASE_SENSITIVE HYPHEN_INSENSITIVE |
||||||
|
|
||||||
|
zstyle ':completion:*' list-colors '' |
||||||
|
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01' |
||||||
|
|
||||||
|
if [[ "$OSTYPE" = solaris* ]]; then |
||||||
|
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm" |
||||||
|
else |
||||||
|
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w" |
||||||
|
fi |
||||||
|
|
||||||
|
# disable named-directories autocompletion |
||||||
|
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories |
||||||
|
|
||||||
|
# Use caching so that commands like apt and dpkg complete are useable |
||||||
|
zstyle ':completion::complete:*' use-cache 1 |
||||||
|
zstyle ':completion::complete:*' cache-path $ZSH_CACHE_DIR |
||||||
|
|
||||||
|
# Don't complete uninteresting users |
||||||
|
zstyle ':completion:*:*:*:users' ignored-patterns \ |
||||||
|
adm amanda apache at avahi avahi-autoipd beaglidx bin cacti canna \ |
||||||
|
clamav daemon dbus distcache dnsmasq dovecot fax ftp games gdm \ |
||||||
|
gkrellmd gopher hacluster haldaemon halt hsqldb ident junkbust kdm \ |
||||||
|
ldap lp mail mailman mailnull man messagebus mldonkey mysql nagios \ |
||||||
|
named netdump news nfsnobody nobody nscd ntp nut nx obsrun openvpn \ |
||||||
|
operator pcap polkitd postfix postgres privoxy pulse pvm quagga radvd \ |
||||||
|
rpc rpcuser rpm rtkit scard shutdown squid sshd statd svn sync tftp \ |
||||||
|
usbmux uucp vcsa wwwrun xfs '_*' |
||||||
|
|
||||||
|
# ... unless we really want to. |
||||||
|
zstyle '*' single-ignored show |
||||||
|
|
||||||
|
if [[ $COMPLETION_WAITING_DOTS = true ]]; then |
||||||
|
expand-or-complete-with-dots() { |
||||||
|
# toggle line-wrapping off and back on again |
||||||
|
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti rmam |
||||||
|
print -Pn "%{%F{red}......%f%}" |
||||||
|
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti smam |
||||||
|
|
||||||
|
zle expand-or-complete |
||||||
|
zle redisplay |
||||||
|
} |
||||||
|
zle -N expand-or-complete-with-dots |
||||||
|
bindkey "^I" expand-or-complete-with-dots |
||||||
|
fi |
@ -0,0 +1,34 @@ |
|||||||
|
# Changing/making/removing directory |
||||||
|
setopt auto_pushd |
||||||
|
setopt pushd_ignore_dups |
||||||
|
setopt pushdminus |
||||||
|
|
||||||
|
alias -g ...='../..' |
||||||
|
alias -g ....='../../..' |
||||||
|
alias -g .....='../../../..' |
||||||
|
alias -g ......='../../../../..' |
||||||
|
|
||||||
|
alias -- -='cd -' |
||||||
|
alias 1='cd -' |
||||||
|
alias 2='cd -2' |
||||||
|
alias 3='cd -3' |
||||||
|
alias 4='cd -4' |
||||||
|
alias 5='cd -5' |
||||||
|
alias 6='cd -6' |
||||||
|
alias 7='cd -7' |
||||||
|
alias 8='cd -8' |
||||||
|
alias 9='cd -9' |
||||||
|
|
||||||
|
alias md='mkdir -p' |
||||||
|
alias rd=rmdir |
||||||
|
alias d='dirs -v | head -10' |
||||||
|
|
||||||
|
# List directory contents |
||||||
|
alias lsa='ls -lah' |
||||||
|
alias l='ls -lah' |
||||||
|
alias ll='ls -lh' |
||||||
|
alias la='ls -lAh' |
||||||
|
|
||||||
|
# Push and pop directories on directory stack |
||||||
|
alias pu='pushd' |
||||||
|
alias po='popd' |
@ -0,0 +1,231 @@ |
|||||||
|
function zsh_stats() { |
||||||
|
fc -l 1 | 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() { |
||||||
|
env ZSH=$ZSH sh $ZSH/tools/uninstall.sh |
||||||
|
} |
||||||
|
|
||||||
|
function upgrade_oh_my_zsh() { |
||||||
|
env ZSH=$ZSH sh $ZSH/tools/upgrade.sh |
||||||
|
} |
||||||
|
|
||||||
|
function take() { |
||||||
|
mkdir -p $1 |
||||||
|
cd $1 |
||||||
|
} |
||||||
|
|
||||||
|
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' ;; |
||||||
|
msys*) open_cmd='start ""' ;; |
||||||
|
*) echo "Platform $OSTYPE not supported" |
||||||
|
return 1 |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# don't use nohup on OSX |
||||||
|
if [[ "$OSTYPE" == darwin* ]]; then |
||||||
|
$open_cmd "$@" &>/dev/null |
||||||
|
else |
||||||
|
nohup $open_cmd "$@" &>/dev/null |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# |
||||||
|
# Get the value of an alias. |
||||||
|
# |
||||||
|
# Arguments: |
||||||
|
# 1. alias - The alias to get its value from |
||||||
|
# STDOUT: |
||||||
|
# The value of alias $1 (if it has one). |
||||||
|
# Return value: |
||||||
|
# 0 if the alias was found, |
||||||
|
# 1 if it does not exist |
||||||
|
# |
||||||
|
function alias_value() { |
||||||
|
alias "$1" | sed "s/^$1='\(.*\)'$/\1/" |
||||||
|
test $(alias "$1") |
||||||
|
} |
||||||
|
|
||||||
|
# |
||||||
|
# Try to get the value of an alias, |
||||||
|
# otherwise return the input. |
||||||
|
# |
||||||
|
# Arguments: |
||||||
|
# 1. alias - The alias to get its value from |
||||||
|
# STDOUT: |
||||||
|
# The value of alias $1, or $1 if there is no alias $1. |
||||||
|
# Return value: |
||||||
|
# Always 0 |
||||||
|
# |
||||||
|
function try_alias_value() { |
||||||
|
alias_value "$1" || echo "$1" |
||||||
|
} |
||||||
|
|
||||||
|
# |
||||||
|
# Set variable "$1" to default value "$2" if "$1" is not yet defined. |
||||||
|
# |
||||||
|
# Arguments: |
||||||
|
# 1. name - The variable to set |
||||||
|
# 2. val - The default value |
||||||
|
# Return value: |
||||||
|
# 0 if the variable exists, 3 if it was set |
||||||
|
# |
||||||
|
function default() { |
||||||
|
test `typeset +m "$1"` && return 0 |
||||||
|
typeset -g "$1"="$2" && return 3 |
||||||
|
} |
||||||
|
|
||||||
|
# |
||||||
|
# Set environment variable "$1" to default value "$2" if "$1" is not yet defined. |
||||||
|
# |
||||||
|
# Arguments: |
||||||
|
# 1. name - The env variable to set |
||||||
|
# 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 |
||||||
|
export "$1=$2" && return 3 |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
# Required for $langinfo |
||||||
|
zmodload zsh/langinfo |
||||||
|
|
||||||
|
# URL-encode a string |
||||||
|
# |
||||||
|
# Encodes a string using RFC 2396 URL-encoding (%-escaped). |
||||||
|
# See: https://www.ietf.org/rfc/rfc2396.txt |
||||||
|
# |
||||||
|
# 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 |
||||||
|
# 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 |
||||||
|
# embedding inside URLs, where reserved characters might be misinterpreted. |
||||||
|
# |
||||||
|
# Prints the encoded string on stdout. |
||||||
|
# Returns nonzero if encoding failed. |
||||||
|
# |
||||||
|
# Usage: |
||||||
|
# omz_urlencode [-r] [-m] [-P] <string> |
||||||
|
# |
||||||
|
# -r causes reserved characters (;/?:@&=+$,) to be escaped |
||||||
|
# |
||||||
|
# -m causes "mark" characters (_.!~*''()-) to be escaped |
||||||
|
# |
||||||
|
# -P causes spaces to be encoded as '%20' instead of '+' |
||||||
|
function omz_urlencode() { |
||||||
|
emulate -L zsh |
||||||
|
zparseopts -D -E -a opts r m P |
||||||
|
|
||||||
|
local in_str=$1 |
||||||
|
local url_str="" |
||||||
|
local spaces_as_plus |
||||||
|
if [[ -z $opts[(r)-P] ]]; then spaces_as_plus=1; fi |
||||||
|
local str="$in_str" |
||||||
|
|
||||||
|
# URLs must use UTF-8 encoding; convert str to UTF-8 if required |
||||||
|
local encoding=$langinfo[CODESET] |
||||||
|
local safe_encodings |
||||||
|
safe_encodings=(UTF-8 utf8 US-ASCII) |
||||||
|
if [[ -z ${safe_encodings[(r)$encoding]} ]]; then |
||||||
|
str=$(echo -E "$str" | iconv -f $encoding -t UTF-8) |
||||||
|
if [[ $? != 0 ]]; then |
||||||
|
echo "Error converting string from $encoding to UTF-8" >&2 |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# Use LC_CTYPE=C to process text byte-by-byte |
||||||
|
local i byte ord LC_ALL=C |
||||||
|
export LC_ALL |
||||||
|
local reserved=';/?:@&=+$,' |
||||||
|
local mark='_.!~*''()-' |
||||||
|
local dont_escape="[A-Za-z0-9" |
||||||
|
if [[ -z $opts[(r)-r] ]]; then |
||||||
|
dont_escape+=$reserved |
||||||
|
fi |
||||||
|
# $mark must be last because of the "-" |
||||||
|
if [[ -z $opts[(r)-m] ]]; then |
||||||
|
dont_escape+=$mark |
||||||
|
fi |
||||||
|
dont_escape+="]" |
||||||
|
|
||||||
|
# Implemented to use a single printf call and avoid subshells in the loop, |
||||||
|
# for performance (primarily on Windows). |
||||||
|
local url_str="" |
||||||
|
for (( i = 1; i <= ${#str}; ++i )); do |
||||||
|
byte="$str[i]" |
||||||
|
if [[ "$byte" =~ "$dont_escape" ]]; then |
||||||
|
url_str+="$byte" |
||||||
|
else |
||||||
|
if [[ "$byte" == " " && -n $spaces_as_plus ]]; then |
||||||
|
url_str+="+" |
||||||
|
else |
||||||
|
ord=$(( [##16] #byte )) |
||||||
|
url_str+="%$ord" |
||||||
|
fi |
||||||
|
fi |
||||||
|
done |
||||||
|
echo -E "$url_str" |
||||||
|
} |
||||||
|
|
||||||
|
# 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 |
||||||
|
# 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. |
||||||
|
# |
||||||
|
# Outputs the encoded string on stdout. |
||||||
|
# Returns nonzero if encoding failed. |
||||||
|
# |
||||||
|
# Usage: |
||||||
|
# omz_urldecode <urlstring> - prints decoded string followed by a newline |
||||||
|
function omz_urldecode { |
||||||
|
emulate -L zsh |
||||||
|
local encoded_url=$1 |
||||||
|
|
||||||
|
# Work bytewise, since URLs escape UTF-8 octets |
||||||
|
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 |
||||||
|
tmp=${tmp:gs/\\/\\\\/} |
||||||
|
# Handle %-escapes by turning them into `\xXX` printf escapes |
||||||
|
tmp=${tmp:gs/%/\\x/} |
||||||
|
local decoded |
||||||
|
eval "decoded=\$'$tmp'" |
||||||
|
|
||||||
|
# Now we have a UTF-8 encoded string in the variable. We need to re-encode |
||||||
|
# it if caller is in a non-UTF-8 locale. |
||||||
|
local safe_encodings |
||||||
|
safe_encodings=(UTF-8 utf8 US-ASCII) |
||||||
|
if [[ -z ${safe_encodings[(r)$caller_encoding]} ]]; then |
||||||
|
decoded=$(echo -E "$decoded" | iconv -f UTF-8 -t $caller_encoding) |
||||||
|
if [[ $? != 0 ]]; then |
||||||
|
echo "Error converting string from UTF-8 to $caller_encoding" >&2 |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
echo -E "$decoded" |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
# is x grep argument available? |
||||||
|
grep-flag-available() { |
||||||
|
echo | grep $1 "" >/dev/null 2>&1 |
||||||
|
} |
||||||
|
|
||||||
|
GREP_OPTIONS="" |
||||||
|
|
||||||
|
# color grep results |
||||||
|
if grep-flag-available --color=auto; then |
||||||
|
GREP_OPTIONS+=" --color=auto" |
||||||
|
fi |
||||||
|
|
||||||
|
# ignore VCS folders (if the necessary grep flags are available) |
||||||
|
VCS_FOLDERS="{.bzr,CVS,.git,.hg,.svn}" |
||||||
|
|
||||||
|
if grep-flag-available --exclude-dir=.cvs; then |
||||||
|
GREP_OPTIONS+=" --exclude-dir=$VCS_FOLDERS" |
||||||
|
elif grep-flag-available --exclude=.cvs; then |
||||||
|
GREP_OPTIONS+=" --exclude=$VCS_FOLDERS" |
||||||
|
fi |
||||||
|
|
||||||
|
# export grep settings |
||||||
|
alias grep="grep $GREP_OPTIONS" |
||||||
|
|
||||||
|
# clean up |
||||||
|
unset GREP_OPTIONS |
||||||
|
unset VCS_FOLDERS |
||||||
|
unfunction grep-flag-available |
@ -0,0 +1,24 @@ |
|||||||
|
## Command history configuration |
||||||
|
if [ -z "$HISTFILE" ]; then |
||||||
|
HISTFILE=$HOME/.zsh_history |
||||||
|
fi |
||||||
|
|
||||||
|
HISTSIZE=10000 |
||||||
|
SAVEHIST=10000 |
||||||
|
|
||||||
|
# Show history |
||||||
|
case $HIST_STAMPS in |
||||||
|
"mm/dd/yyyy") alias history='fc -fl 1' ;; |
||||||
|
"dd.mm.yyyy") alias history='fc -El 1' ;; |
||||||
|
"yyyy-mm-dd") alias history='fc -il 1' ;; |
||||||
|
*) alias history='fc -l 1' ;; |
||||||
|
esac |
||||||
|
|
||||||
|
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 hist_verify |
||||||
|
setopt inc_append_history |
||||||
|
setopt share_history # share command history data |
@ -0,0 +1,66 @@ |
|||||||
|
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html |
||||||
|
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Builtins |
||||||
|
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Standard-Widgets |
||||||
|
|
||||||
|
# Make sure that the terminal is in application mode when zle is active, since |
||||||
|
# only then values from $terminfo are valid |
||||||
|
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then |
||||||
|
function zle-line-init() { |
||||||
|
echoti smkx |
||||||
|
} |
||||||
|
function zle-line-finish() { |
||||||
|
echoti rmkx |
||||||
|
} |
||||||
|
zle -N zle-line-init |
||||||
|
zle -N zle-line-finish |
||||||
|
fi |
||||||
|
|
||||||
|
bindkey -e # Use emacs key bindings |
||||||
|
|
||||||
|
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark |
||||||
|
bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls |
||||||
|
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line. |
||||||
|
if [[ "${terminfo[kpp]}" != "" ]]; then |
||||||
|
bindkey "${terminfo[kpp]}" up-line-or-history # [PageUp] - Up a line of history |
||||||
|
fi |
||||||
|
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 |
||||||
|
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 |
||||||
|
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 |
||||||
|
bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line |
||||||
|
fi |
||||||
|
if [[ "${terminfo[kend]}" != "" ]]; then |
||||||
|
bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line |
||||||
|
fi |
||||||
|
|
||||||
|
bindkey ' ' magic-space # [Space] - do history expansion |
||||||
|
|
||||||
|
bindkey '^[[1;5C' forward-word # [Ctrl-RightArrow] - move forward one word |
||||||
|
bindkey '^[[1;5D' backward-word # [Ctrl-LeftArrow] - move backward one word |
||||||
|
|
||||||
|
if [[ "${terminfo[kcbt]}" != "" ]]; then |
||||||
|
bindkey "${terminfo[kcbt]}" reverse-menu-complete # [Shift-Tab] - move through the completion menu backwards |
||||||
|
fi |
||||||
|
|
||||||
|
bindkey '^?' backward-delete-char # [Backspace] - delete backward |
||||||
|
if [[ "${terminfo[kdch1]}" != "" ]]; then |
||||||
|
bindkey "${terminfo[kdch1]}" delete-char # [Delete] - delete forward |
||||||
|
else |
||||||
|
bindkey "^[[3~" delete-char |
||||||
|
bindkey "^[3;5~" delete-char |
||||||
|
bindkey "\e[3~" delete-char |
||||||
|
fi |
@ -0,0 +1,55 @@ |
|||||||
|
# ls colors |
||||||
|
autoload -U colors && colors |
||||||
|
|
||||||
|
# Enable ls colors |
||||||
|
export LSCOLORS="Gxfxcxdxbxegedabagacad" |
||||||
|
|
||||||
|
# TODO organise this chaotic logic |
||||||
|
|
||||||
|
if [[ "$DISABLE_LS_COLORS" != "true" ]]; then |
||||||
|
# Find the option for using colors in ls, depending on the version |
||||||
|
if [[ "$OSTYPE" == netbsd* ]]; then |
||||||
|
# On NetBSD, test if "gls" (GNU ls) is installed (this one supports colors); |
||||||
|
# otherwise, leave ls as is, because NetBSD's ls doesn't support -G |
||||||
|
gls --color -d . &>/dev/null && alias ls='gls --color=tty' |
||||||
|
elif [[ "$OSTYPE" == openbsd* ]]; then |
||||||
|
# On OpenBSD, "gls" (ls from GNU coreutils) and "colorls" (ls from base, |
||||||
|
# with color and multibyte support) are available from ports. "colorls" |
||||||
|
# will be installed on purpose and can't be pulled in by installing |
||||||
|
# coreutils, so prefer it to "gls". |
||||||
|
gls --color -d . &>/dev/null && alias ls='gls --color=tty' |
||||||
|
colorls -G -d . &>/dev/null && alias ls='colorls -G' |
||||||
|
elif [[ "$OSTYPE" == darwin* ]]; then |
||||||
|
# this is a good alias, it works by default just using $LSCOLORS |
||||||
|
ls -G . &>/dev/null && alias ls='ls -G' |
||||||
|
|
||||||
|
# only use coreutils ls if there is a dircolors customization present ($LS_COLORS or .dircolors file) |
||||||
|
# otherwise, gls will use the default color scheme which is ugly af |
||||||
|
[[ -n "$LS_COLORS" || -f "$HOME/.dircolors" ]] && gls --color -d . &>/dev/null && alias ls='gls --color=tty' |
||||||
|
else |
||||||
|
# For GNU ls, we use the default ls color theme. They can later be overwritten by themes. |
||||||
|
if [[ -z "$LS_COLORS" ]]; then |
||||||
|
(( $+commands[dircolors] )) && eval "$(dircolors -b)" |
||||||
|
fi |
||||||
|
|
||||||
|
ls --color -d . &>/dev/null && alias ls='ls --color=tty' || { ls -G . &>/dev/null && alias ls='ls -G' } |
||||||
|
|
||||||
|
# Take advantage of $LS_COLORS for completion as well. |
||||||
|
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
setopt auto_cd |
||||||
|
setopt multios |
||||||
|
setopt prompt_subst |
||||||
|
|
||||||
|
[[ -n "$WINDOW" ]] && SCREEN_NO="%B$WINDOW%b " || SCREEN_NO="" |
||||||
|
|
||||||
|
# Apply theming defaults |
||||||
|
PS1="%n@%m:%~%# " |
||||||
|
|
||||||
|
# git theming default: Variables for theming the git info prompt |
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name |
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt |
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty |
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean |
@ -0,0 +1,14 @@ |
|||||||
|
# path to my zsh configs |
||||||
|
ZSH=$HOME/.zsh |
||||||
|
|
||||||
|
# load the things |
||||||
|
fpath=($ZSH/functions $ZSH/completions $fpath) |
||||||
|
autoload -U compaudit compinit |
||||||
|
|
||||||
|
# Load all of the config files in ~/oh-my-zsh that end in .zsh |
||||||
|
# TIP: Add files you don't want in git to .gitignore |
||||||
|
for config_file ($ZSH/functions/*.zsh); do |
||||||
|
source $config_file |
||||||
|
done |
||||||
|
|
||||||
|
compinit -d "${ZSH_COMPDUMP}/cache" |
@ -0,0 +1 @@ |
|||||||
|
Subproject commit ad522a091429ba180c930f84b2a023b40de4dbcc |
Loading…
Reference in new issue