# kicad-cli(1) completion -*- shell-script -*- __kicad_relevant_files () { # choose files that make sense for the command case $1 in fp) _filedir -d return ;; sym) _filedir '@(kicad_sym)' return ;; pcb | pcbnew) _filedir '@(kicad_pcb)' return ;; sch | eeschema) _filedir '@(kicad_sch)' return ;; pro | kicad) _filedir '@(kicad_pro)' return ;; esac } _have kicad-cli && _comp_kicad_cli () { local cur prev words cword split _init_completion -s || return case $prev in -h | --help | -v | --version) return ;; esac # This exploits that the command/subcommands have to be # arguments 1 and 2 local cmd has_cmd="" if [[ $cword > 1 ]] && [[ ${words[1]} != -* ]]; then cmd="${words[1]}" has_cmd=set fi if [[ ! $has_cmd ]]; then # Prompt for the main command or global options COMPREPLY=($(compgen -W 'fp sym pcb sch version --help' \ -- "$cur")) else local subcmd has_subcmd="" if [[ $cword > 2 ]] && [[ ${words[2]} != -* ]]; then subcmd="${words[2]}" has_subcmd=set fi if [[ ! $has_subcmd ]]; then # Get the relevant subcmds for the main command local available_subcmds=() case $cmd in fp | sym) available_subcmds=('export' 'upgrade') ;; pcb) available_subcmds=('drc' 'export') ;; sch) available_subcmds=('erc' 'export') ;; version) # no futher option return; ;; esac COMPREPLY=($(compgen -W "${available_subcmds[*]}" -- "$cur")) else # Handle the subcommand case $subcmd in upgrade) if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '--force --help' \ -- "$cur")) else __kicad_relevant_files $cmd fi ;; export) local target has_target="" if [[ $cword > 3 ]] && [[ ${words[3]} != -* ]]; then target="${words[3]}" has_target=set fi if [[ ! $has_target ]]; then local available_targets=('svg') COMPREPLY=($(compgen -W "${available_targets[*]}" -- "$cur")) else case $target in svg) if [[ $cur == -* ]]; then # common args local dash_opts=('--help' '--layers' '--define-var' '--fp --theme --black-and-white') case $cmd in 'sch') dash_opts+=( '--exclude-drawing-sheet' '--no-background-color' '--pages') ;; 'pcb') dash_opts+=('--drawing-sheet' '--mirror' '--negative' '--page-size-mode' '--exclude-drawing-sheet' '--drill-shape-opt') ;; esac COMPREPLY=($(compgen -W "${dash_opts[*]}" -- "$cur")) else case $prev in -o | --output) _filedir -d ;; --drill-shape-opt) COMPREPLY=($(compgen -W "0 1 2" -- "$cur")) ;; --page-size-mode) COMPREPLY=($(compgen -W "0 1 2" -- "$cur")) ;; --drawing-sheet) _filedir ;; *) __kicad_relevant_files $cmd ;; esac fi esac fi ;; drc | erc) if [[ $cur == -* ]]; then # common args local dash_opts=('--help' '--output' '--define-var' '--format' '--units' '--serverity-all' '--severity-warning' '--severity-exclusions' '--exit-code-violations' ) if [[ $subcmd == 'drc' ]]; then dash_opts+=( '--all-track-errors' '--schematic-parity') fi COMPREPLY=($(compgen -W "${dash_opts[*]}" -- "$cur")) else case $prev in -o | --output) _filedir ;; --format) COMPREPLY=($(compgen -W 'json report' \ -- "$cur")) ;; --units) COMPREPLY=($(compgen -W 'in mm mils' \ -- "$cur")) ;; *) __kicad_relevant_files $cmd ;; esac fi ;; esac fi return fi } && complete -F _comp_kicad_cli kicad-cli # Completes kicad/pcbnew/eeschema, etc commands with only # the relevant filetypes _comp_kicad_execs () { local cur prev words cword split _init_completion -s || return local execname="${words[0]##*/}" case $execname in pcbnew | eesechema | kicad) __kicad_relevant_files $execname return ;; esac } && complete -F _comp_kicad_execs pcbnew && complete -F _comp_kicad_execs eeschema && complete -F _comp_kicad_execs kicad