198 lines
7.0 KiB
Bash
198 lines
7.0 KiB
Bash
# 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 |