X-Git-Url: https://git.madduck.net/etc/zsh.git/blobdiff_plain/e45b0db3d66ca9e041622db3d801d026fb4d3724..33230b65afa1076218abff057d0bbcc7486af0a8:/.zsh/zshrc/80-completion diff --git a/.zsh/zshrc/80-completion b/.zsh/zshrc/80-completion new file mode 100644 index 0000000..e45b9fd --- /dev/null +++ b/.zsh/zshrc/80-completion @@ -0,0 +1,223 @@ +# +# Set up completion +# +# Copyright © 1994–2017 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +# Source repository: http://git.madduck.net/v/etc/zsh.git +# + +### INITIALISATION + +zstyle :compinstall filename "$ZDOTDIR/zshrc/80-completion" + +autoload -Uz compinit +compinit -d $ZVARDIR/comp-$HOSTS + +# load fancy completion list and menu handler +zmodload zsh/complist + +# avoid old-style completion (compctl) +zstyle ':completion:*' use-compctl false + +# cache results +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path $ZVARDIR/compcache-${HOST} + +### OPTIONS + +# show the list of completions right away when there's an ambiguous prefix +# note that there's also the 'list' zstyle, which could override this +setopt auto_list +setopt no_list_ambiguous + +# use menu after the second completion request +# cf. also the 'menu' zstyle, which eclipses this +setopt auto_menu + +# these mess with the aforementioned behaviour, make sure they're off +setopt no_menu_complete no_bash_auto_list + +# make the completion list smaller by printing the matches in columns with +# different widths. +setopt list_packed + +# do not recognise exact matches even if they're ambiguous +# (we don't want this because /var/log/sys should also +# offer /var/log/syslog…) +setopt no_rec_exact + +# move cursor to end of word being completed +setopt always_to_end + +# be magic about adding/removing final characters on tab completion +setopt auto_param_keys auto_param_slash auto_remove_slash + +# allow completion to happen in the middle of a word +setopt complete_in_word + +### COMPLETERS + +# set the list of completers +zstyle ':completion:*' completer \ + _expand_alias _expand \ + _complete _prefix:-complete \ + _approximate _prefix:-approximate \ + _match _ignored +zstyle ':completion:*:prefix-complete:*' completer _complete +zstyle ':completion:*:prefix-approximate:*' completer _approximate + +# configure the _expand completer +bindkey '^i' complete-word +zstyle ':completion::expand:*' tag-order 'expansions all-expansions original' + +# do approximated completion, allowing 1 error per three characters +zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' + +### TRIM OUTPUT OF IGNORED PATTERNS + +# functions which start with _ are internal and ignored +zstyle ':completion:*:*:-command-:*' tag-order 'functions:-non-comp' +zstyle ':completion:*:functions-non-comp' ignored-patterns '_*' + +# ignore working and backup copies, and compiled objects +zstyle ':completion:*:argument-rest:' file-patterns ' + *(-/):directories:directories + (*.(ba#k|old)|*~):backup-files:"backup files" + *.(l#[oa]|py[co]|zwc):compiled-files:"compiled files" + *.te#mp:temp-files:"temp files" + .*.sw?:vim-swap-files:"vim swap files" + %p:globbed-files *:all-files + ' +zstyle ':completion:*:argument-rest:(all|globbed)-files' ignored-patterns \ + '((*.(ba#k|old)|*~)|*.(l#[oa]|py[co]|zwc)|*.te#mp|.*.sw?|*(-/))' +#TODO directories not ignored in files output: +#### fishbowl:/tmp/cdt.6kIDed% cat +#### directories +#### foobar/ +#### backup files +#### foo.bk foo.old +#### compiled files +#### foo.a foo.la foo.lo foo.o foo.pyc foo.zwc +#### temp files +#### foo.tmp +#### files +#### foobar/ foo.c foo.txt + +#zstyle ':completion:*:argument*' tag-order " +# globbed-files files all-files +# directories +# backup-files +# compiled-files +# temp-files +# vim-swap-files +# " +zstyle ':completion:*:argument*' group-order \ + vim-swap-files \ + globbed-files files all-files \ + directories \ + backup-files \ + compiled-files \ + temp-files \ +#end +#TODO no effect on ordering yet + +zstyle ':completion:*:argument*' group-order vim-swap-files directories \ + globbed-files files all-files backup-files compiled-files temp-files + +resource() { source $ZDOTDIR/zshrc/80-completion; zle -M "resourced"; } +zle -N resource +bindkey '\er' resource + +# do not offer files already specified on the line +zstyle ':completion:*:rm' ignore-line yes + +# do not offer current directory as completion in ../ +zstyle ':completion:*' ignore-parents parent pwd + +# http://xana.scru.org/2005/08/20#ignorelatexjunk +zstyle -e ':completion:*:*:vim#' ignored-patterns \ + 'texfiles=$(echo ${PREFIX}*.tex); [[ -n "$texfiles" ]] && + reply=(*.(aux|dvi|log|p(s|df)|bbl|toc|lo[tf]|latexmain)) || reply=()' + +### LOOK & FEEL + +# Take advantage of $LS_COLORS for completion as well. +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" + +# List directories first/in a separate group +zstyle ':completion:*' list-dirs-first yes + +# Use a less ambiguous list separator +zstyle ':completion:*' list-separator '::' + +# allow cursor-key navigation through completion set +zstyle ':completion:*' menu select + +# always offer the original string as a completion choice +zstyle ':completion:*:match:*' original true + +# squash multiple slashes to one, which is the unix-style +zstyle ':completion:*' squeeze-slashes true + +# Formatting of completion menu/list +zstyle ':completion:*' verbose yes +zstyle ':completion:*' auto-description 'missing description: %d' +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 $fg[red](errors: %e)$reset_color%b" +#zstyle ':completion:*:matches' group 'yes' +zstyle ':completion:*' group-name '' + +# Handle command-line options a bit differently +zstyle ':completion:*:options' auto-description '%d' +zstyle ':completion:*:options' description 'yes' + +### KEYBINDINGS + +# ^x^h :: provide context help, in addition to ^x h +bindkey '^x^h' _complete_help + +### SPECIFIC COMMAND/CONTEXT HANDLING + +# commands that take commands as arguments +compdef _precommand gdb +compdef _precommand nohup +compdef _precommand strace + +# a couple commands don't yet have -option completion but +# they're generic GNU tools, so… +typeset -la gnu_generic_tools=(mv) +local c +for c ($gnu_generic_tools) compdef _gnu_generic $c + +# custom path when expanding in the sudo context +zstyle ':completion:*:sudo:*' command-path /usr/local/sbin \ + /usr/local/bin \ + /usr/sbin \ + /usr/bin \ + /sbin \ + /bin \ + /usr/X11R6/bin + +# Completion of processes: show all user processes +zstyle ':completion:*:processes' command 'PS="ps -au$USER -o pid,tty,time,pcpu,cmd"; eval $PS | grep -v "$PS"' + +# Integrate directory stack with cd - completion +zstyle ':completion:*:*:cd:*:directory-stack' menu yes select + +# Offer .. as a special-dir to completions +zstyle -e ':completion:*' special-dirs '[[ $PREFIX = (../)#(|.|..) ]] && reply=(..)' +#TODO does not yet work + +# complete manual by their section +zstyle ':completion:*:manuals' separate-sections true +zstyle ':completion:*:manuals.*' insert-sections true +zstyle ':completion:*:man:*' menu yes select + +# debbug #527301 +zstyle ':completion::complete:xmms2:*:values' list-grouped false +zstyle ':completion::complete:xmms2:*:values' sort false + +# vim:ft=zsh