From a37ffc3374e23b8e6318965d84e408acf7a46b73 Mon Sep 17 00:00:00 2001 From: Harald Kubota Date: Sat, 2 Jan 2021 15:32:15 +0900 Subject: Add first version of zsh completion Don't have duplicate descriptions and put = signs where they belong to zsh completion function now dynamically adjusts for options (e.g. no --apparmor option without AppArmor configured) No EXTRA_CFLAGS for cpp Found main.c which does the argument processing. Moved some arguments into the correct #ifdef blocks Profile selection now much better Not more cpp. Using preproc.awk instead. Updated bash firejail command completion to add profiles ignore bash and zsh dynamically created completion scripts Moved bash/zsh completions out of ALL_ITEMS to fix make install Cleanup --- src/bash_completion/firejail.bash_completion.in | 122 ++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/bash_completion/firejail.bash_completion.in (limited to 'src/bash_completion/firejail.bash_completion.in') diff --git a/src/bash_completion/firejail.bash_completion.in b/src/bash_completion/firejail.bash_completion.in new file mode 100644 index 000000000..00f04c310 --- /dev/null +++ b/src/bash_completion/firejail.bash_completion.in @@ -0,0 +1,122 @@ +# bash completion for firejail -*- shell-script -*- +#******************************************************************** +# Script based on completions/configure script in bash-completion package in +# Debian. The original package is release under GPL v2 license, the webpage is +# http://bash-completion.alioth.debian.org +#******************************************************************* + +__interfaces(){ + cut -f 1 -d ':' /proc/net/dev | tail -n +3 | grep -v lo | xargs +} + +_profiles() { + if [[ -d "$1" ]] ; then + ls -1 $1/*.profile 2>/dev/null | sed -E 's;^.*\/;;g' + fi +} +_all_profiles() { + local sys_profiles=$(_profiles _SYSCONFDIR_/firejail) + local user_profiles=$(_profiles $HOME/.config/firejail) + COMPREPLY=($(compgen -W "${sys_profiles} ${user_profiles}" -- "$cur")) +} + + +_firejail() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --help|--version|-debug-caps|--debug-syscalls|--debug-syscalls32|--list|--tree|--top|--join|--shutdown) + return 0 + ;; + --profile) + _all_profiles + return 0 + ;; + --hosts-file) + _filedir + return 0 + ;; + --chroot) + _filedir -d + return 0 + ;; + --cgroup) + _filedir -d + return 0 + ;; + --tmpfs) + _filedir + return 0 + ;; + --blacklist) + _filedir + return 0 + ;; + --noblacklist) + _filedir + return 0 + ;; + --whitelist) + _filedir + return 0 + ;; + --nowhitelist) + _filedir + return 0 + ;; + --read-only) + _filedir + return 0 + ;; + --read-write) + _filedir + return 0 + ;; + --bind) + _filedir + return 0 + ;; + --private) + _filedir + return 0 + ;; + --netfilter) + _filedir + return 0 + ;; + --shell) + _filedir + return 0 + ;; + --audit) + _filedir + return 0 + ;; + --net) + comps=$(__interfaces) + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 + ;; + esac + + $split && return 0 + + # if $COMP_CONFIGURE_HINTS is not null, then completions of the form + # --option=SETTING will include 'SETTING' as a contextual hint + [[ "$cur" != -* ]] && _command && return 0 + + if [[ -n $COMP_CONFIGURE_HINTS ]]; then + COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \ + awk '/^ --[A-Za-z]/ { print $1; \ + if ($2 ~ /--[A-Za-z]/) print $2 }' | sed -e 's/[[,].*//g' )" \ + -- "$cur" ) ) + [[ $COMPREPLY == *=* ]] && compopt -o nospace + else + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + fi + +} && +complete -F _firejail firejail -- cgit v1.2.3-54-g00ecf