remove dependency on oh-my-zsh and do my own zsh management
This commit is contained in:
parent
dde64abad2
commit
69b4bb63b8
14
zsh/README
Normal file
14
zsh/README
Normal file
@ -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`.
|
125
zsh/completions/_rg
Normal file
125
zsh/completions/_rg
Normal file
@ -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 "$@"
|
60
zsh/functions/omz_compfix.zsh
Normal file
60
zsh/functions/omz_compfix.zsh
Normal file
@ -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
|
||||||
|
}
|
70
zsh/functions/omz_completion.zsh
Normal file
70
zsh/functions/omz_completion.zsh
Normal file
@ -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
|
34
zsh/functions/omz_directories.zsh
Normal file
34
zsh/functions/omz_directories.zsh
Normal file
@ -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'
|
231
zsh/functions/omz_functions.zsh
Normal file
231
zsh/functions/omz_functions.zsh
Normal file
@ -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"
|
||||||
|
}
|
28
zsh/functions/omz_grep.zsh
Normal file
28
zsh/functions/omz_grep.zsh
Normal file
@ -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
|
24
zsh/functions/omz_history.zsh
Normal file
24
zsh/functions/omz_history.zsh
Normal file
@ -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
|
66
zsh/functions/omz_key-bindings.zsh
Normal file
66
zsh/functions/omz_key-bindings.zsh
Normal file
@ -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
|
37
zsh/functions/omz_spectrum.zsh
Normal file
37
zsh/functions/omz_spectrum.zsh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#! /bin/zsh
|
||||||
|
# A script to make using 256 colors in zsh less painful.
|
||||||
|
# P.C. Shyamshankar <sykora@lucentbeing.com>
|
||||||
|
# Copied from http://github.com/sykora/etc/blob/master/zsh/functions/spectrum/
|
||||||
|
|
||||||
|
typeset -AHg FX FG BG
|
||||||
|
|
||||||
|
FX=(
|
||||||
|
reset "%{[00m%}"
|
||||||
|
bold "%{[01m%}" no-bold "%{[22m%}"
|
||||||
|
italic "%{[03m%}" no-italic "%{[23m%}"
|
||||||
|
underline "%{[04m%}" no-underline "%{[24m%}"
|
||||||
|
blink "%{[05m%}" no-blink "%{[25m%}"
|
||||||
|
reverse "%{[07m%}" no-reverse "%{[27m%}"
|
||||||
|
)
|
||||||
|
|
||||||
|
for color in {000..255}; do
|
||||||
|
FG[$color]="%{[38;5;${color}m%}"
|
||||||
|
BG[$color]="%{[48;5;${color}m%}"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
ZSH_SPECTRUM_TEXT=${ZSH_SPECTRUM_TEXT:-Arma virumque cano Troiae qui primus ab oris}
|
||||||
|
|
||||||
|
# Show all 256 colors with color number
|
||||||
|
function spectrum_ls() {
|
||||||
|
for code in {000..255}; do
|
||||||
|
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 -- "$code: %{$BG[$code]%}$ZSH_SPECTRUM_TEXT%{$reset_color%}"
|
||||||
|
done
|
||||||
|
}
|
55
zsh/functions/omz_theme-and-appearance.zsh
Normal file
55
zsh/functions/omz_theme-and-appearance.zsh
Normal file
@ -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
|
14
zsh/load.sh
Normal file
14
zsh/load.sh
Normal file
@ -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"
|
1
zsh/zsh-syntax-highlighting
Submodule
1
zsh/zsh-syntax-highlighting
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit ad522a091429ba180c930f84b2a023b40de4dbcc
|
19
zshrc
19
zshrc
@ -1,17 +1,5 @@
|
|||||||
# Path to your oh-my-zsh configuration.
|
# load my zsh configs
|
||||||
ZSH=$HOME/.oh-my-zsh
|
source ~/.zsh/load.sh
|
||||||
|
|
||||||
# Set name of the theme to load.
|
|
||||||
# Look in ~/.oh-my-zsh/themes/
|
|
||||||
#ZSH_THEME="robbyrussell"
|
|
||||||
|
|
||||||
# Comment this out to disable weekly auto-update checks
|
|
||||||
# DISABLE_AUTO_UPDATE="true"
|
|
||||||
|
|
||||||
# Plugins to load
|
|
||||||
plugins=(git go osx zsh-syntax-highlighting)
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
|
||||||
|
|
||||||
# turn off mostly unhelpful autocorrect
|
# turn off mostly unhelpful autocorrect
|
||||||
unsetopt correct_all
|
unsetopt correct_all
|
||||||
@ -48,3 +36,6 @@ export GOPATH=$HOME/Projects/go
|
|||||||
export PATH=$HOME/bin:$GOPATH/bin:$PATH
|
export PATH=$HOME/bin:$GOPATH/bin:$PATH
|
||||||
export PATH=/home/mike/.gem/ruby/2.3.0/bin:$PATH
|
export PATH=/home/mike/.gem/ruby/2.3.0/bin:$PATH
|
||||||
export PATH=/opt/android-studio/bin:/home/mike/.cargo/bin:$PATH
|
export PATH=/opt/android-studio/bin:/home/mike/.cargo/bin:$PATH
|
||||||
|
|
||||||
|
# source zsh-syntax-highlighting last
|
||||||
|
source $ZSH/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
Loading…
Reference in New Issue
Block a user