From 05f42e9d6e2f59d0af447681d8570accaefd05b7 Mon Sep 17 00:00:00 2001 From: fanyx Date: Thu, 9 Jun 2022 13:53:09 +0200 Subject: [PATCH] Add custom completions to bash --- .config/completions/sv | 27 ++++++++ .config/completions/xbps | 133 +++++++++++++++++++++++++++++++++++++++ .void.bash_aliases | 6 ++ .void.bashrc | 7 +++ 4 files changed, 173 insertions(+) create mode 100644 .config/completions/sv create mode 100644 .config/completions/xbps diff --git a/.config/completions/sv b/.config/completions/sv new file mode 100644 index 0000000..a459de5 --- /dev/null +++ b/.config/completions/sv @@ -0,0 +1,27 @@ +# bash completion for runit sv(1) + +_sv() +{ + local cur prev words cword commands + _init_completion || return + + commands='up down status once pause cont hup alarm interrupt 1 2 term kill exit start stop restart shutdown force-stop force-reload force-restart force-shutdown' + + case $prev in + -w) + return + ;; + -* | sv) + COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) ) + return + ;; + *) + COMPREPLY=( /var/service/* ) + COMPREPLY+=( /home/hendrik/sv/* ) + COMPREPLY=( ${COMPREPLY[@]##*/} ) + COMPREPLY=( $(compgen -W '${COMPREPLY[@]}' -- ${cur}) ) + return + ;; + esac +} +complete -F _sv sv diff --git a/.config/completions/xbps b/.config/completions/xbps new file mode 100644 index 0000000..b824445 --- /dev/null +++ b/.config/completions/xbps @@ -0,0 +1,133 @@ +_xbps_parse_help() { + local IFS line word + + $1 --help 2>&1 | while IFS=$'\n' read -r line; do + [[ $line == *([ $'\t'])-* ]] || continue + + IFS=$' \t,=' + for word in $line; do + [[ $word == -* ]] || continue + printf -- '%s\n' $word + done + done | sort | uniq +} + +_xbps_all_packages() { + xbps-query -Rs "$1*" | sed 's/^... \([^ ]*\)-.* .*/\1/' +} + +_xbps_installed_packages() { + xbps-query -l | sed 's/^.. \([^ ]*\)-.* .*/\1/' +} + +_xbps_all_reply() { + COMPREPLY=( $( compgen -W '$(_xbps_all_packages "$1")' -- "$1") ) +} + +_xbps_installed_reply() { + COMPREPLY=( $( compgen -W '$(_xbps_installed_packages)' -- "$1") ) +} + +_xbps_complete() { + local cur prev words cword + + _init_completion || return + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( _xbps_parse_help "$1" )' -- "$cur") ) + return + fi + + local common='C|-config|r|-rootdir' + local morecommon="$common|c|-cachedir" + + local modes='auto manual hold unhold' + local props='architecture + archive-compression-type + automatic-install + build-options + conf_files + conflicts + filename-sha256 + filename-size + homepage + install-date + install-msg + install-script + installed_size + license + maintainer + metafile-sha256 + packaged-with + pkgver + preserve + provides + remove-msg + remove-script + replaces + repository + shlib-provides + shlib-requires + short_desc + source-revisions + state' + + case $1 in + xbps-dgraph) + if [[ $prev != -@(c|o|r) ]]; then + _xbps_installed_reply $cur + return + fi + ;; + xbps-install | xi) + if [[ $prev != -@($morecommon) ]]; then + _xbps_all_reply $cur + return + fi + ;; + xbps-pkgdb) + if [[ $prev == -@(m|-mode) ]]; then + COMPREPLY=( $( compgen -W "$modes" -- "$cur") ) + return + fi + if [[ $prev != -@($common) ]]; then + _xbps_installed_reply $cur + return + fi + ;; + xbps-query) + if [[ $prev == -@(p|-property) ]]; then + COMPREPLY=( $( compgen -W "$props" -- "$cur") ) + return + fi + if [[ $prev != -@($morecommon|o|-ownedby) ]]; then + local w + for w in "${words[@]}"; do + if [[ "$w" == -@(R|-repository) ]]; then + _xbps_all_reply $cur + return + fi + done + _xbps_installed_reply $cur + return + fi + ;; + xbps-reconfigure) + if [[ $prev != -@($common) ]]; then + _xbps_installed_reply $cur + return + fi + ;; + xbps-remove | xr) + if [[ $prev != -@($morecommon) ]]; then + _xbps_installed_reply $cur + return + fi + ;; + esac + + _filedir +} + +complete -F _xbps_complete xbps-checkvers xbps-create xbps-dgraph xbps-install \ + xbps-pkgdb xbps-query xbps-reconfigure xbps-remove xbps-rindex xi xr diff --git a/.void.bash_aliases b/.void.bash_aliases index bcc75a8..a0254bd 100644 --- a/.void.bash_aliases +++ b/.void.bash_aliases @@ -3,11 +3,17 @@ # import general use aliases [[ -r ~/.alias ]] && . ~/.alias +# config files +alias cb="vim ~/.config/bspwm/bspwmrc" +alias cs="vim ~/.config/sxhkd/sxhkdrc" + # xbps-install # use xtools instead # alias xin="doas xbps-install -S" alias xup="xi -Su" +complete -F _xbps_complete xi + # xbps-query alias xqr="xbps-query" alias xs="xqr -Rs" diff --git a/.void.bashrc b/.void.bashrc index f54d3e9..4131a44 100644 --- a/.void.bashrc +++ b/.void.bashrc @@ -8,6 +8,7 @@ [[ $- != *i* ]] && return PATH=~/.local/bin:$PATH +PATH=~/.luarocks/bin:$PATH ################################# # - bash_aliases @@ -16,6 +17,12 @@ PATH=~/.local/bin:$PATH # always bash-completion first [[ -r /usr/share/bash-completion/bash_completion ]] && . /usr/share/bash-completion/bash_completion +if [[ -d ~/.config/completions ]]; then + for i in ~/.config/completions/*; do + . $i + done +fi + # integrate git prompt functions # will break PS1 if not used [[ -f /usr/share/git/git-prompt.sh ]] && . /usr/share/git/git-prompt.sh