argument & parameter completion for bash (instructions inside)
This commit is contained in:
parent
a4c23008f4
commit
4bb77f71d4
1 changed files with 296 additions and 0 deletions
296
scripts/tools/fg-completion.bash
Executable file
296
scripts/tools/fg-completion.bash
Executable file
|
@ -0,0 +1,296 @@
|
|||
#!/bin/bash
|
||||
# Tab completion for FlightGear command line options.
|
||||
#
|
||||
# 1. define $FG_HOME (or accept the default "$HOME/.fgfs/")
|
||||
#
|
||||
# 2. run this script to build the $FG_HOME/aircraft.list file and repeat this
|
||||
# step whenever you added an aircraft (or maintain the aircraft list manually):
|
||||
#
|
||||
# $ $FG_HOME/fg-completion.bash
|
||||
#
|
||||
#
|
||||
# 3. source this file from your ~/.bashrc:
|
||||
#
|
||||
# [ -e $FG_HOME/fg-completion.bash ] && source $FG_HOME/fg-completion.bash
|
||||
#
|
||||
__fgfs_scriptname="fg-completion.bash" # adapt this if you renamed this script!
|
||||
|
||||
__fgfs_root=${FG_ROOT:-/usr/local/share/FlightGear}
|
||||
__fgfs_home=${FG_HOME:-$HOME/.fgfs}
|
||||
[ -d "$__fgfs_home" ] || mkdir -p "$__fgfs_home"
|
||||
|
||||
__fgfs_ac_list="$__fgfs_home/aircraft.list"
|
||||
__fgfs_apt_list="$__fgfs_home/airport.list"
|
||||
|
||||
__fgfs_options="
|
||||
--help
|
||||
--verbose
|
||||
--disable-intro-music
|
||||
--enable-intro-music
|
||||
--units-feet
|
||||
--units-meters
|
||||
--disable-sound
|
||||
--enable-sound
|
||||
--disable-panel
|
||||
--enable-panel
|
||||
--disable-hud
|
||||
--enable-hud
|
||||
--disable-anti-alias-hud
|
||||
--enable-anti-alias-hud
|
||||
--disable-hud-3d
|
||||
--enable-hud-3d
|
||||
--hud-tris
|
||||
--hud-culled
|
||||
--disable-random-objects
|
||||
--enable-random-objects
|
||||
--disable-ai-models
|
||||
--enable-ai-models
|
||||
--disable-freeze
|
||||
--enable-freeze
|
||||
--disable-fuel-freeze
|
||||
--enable-fuel-freeze
|
||||
--disable-clock-freeze
|
||||
--enable-clock-freeze
|
||||
--disable-splash-screen
|
||||
--enable-splash-screen
|
||||
--disable-mouse-pointer
|
||||
--enable-mouse-pointer
|
||||
--fog-disable
|
||||
--fog-fastest
|
||||
--fog-nicest
|
||||
--disable-enhanced-lighting
|
||||
--enable-enhanced-lighting
|
||||
--disable-distance-attenuation
|
||||
--enable-distance-attenuation
|
||||
--disable-specular-highlight
|
||||
--enable-specular-highlight
|
||||
--disable-fullscreen
|
||||
--enable-fullscreen
|
||||
--disable-game-mode
|
||||
--enable-game-mode
|
||||
--shading-flat
|
||||
--shading-smooth
|
||||
--disable-skyblend
|
||||
--enable-skyblend
|
||||
--disable-textures
|
||||
--enable-textures
|
||||
--disable-wireframe
|
||||
--enable-wireframe
|
||||
--notrim
|
||||
--on-ground
|
||||
--in-air
|
||||
--enable-auto-coordination
|
||||
--disable-auto-coordination
|
||||
--show-aircraft
|
||||
--time-match-real
|
||||
--time-match-local
|
||||
--disable-real-weather-fetch
|
||||
--enable-real-weather-fetch
|
||||
--disable-horizon-effect
|
||||
--enable-horizon-effect
|
||||
--enable-clouds
|
||||
--disable-clouds
|
||||
--enable-clouds3d
|
||||
--disable-clouds3d
|
||||
--atc610x
|
||||
--enable-save-on-exit
|
||||
--disable-save-on-exit
|
||||
--ai-scenario=
|
||||
--fg-root=
|
||||
--fg-scenery=
|
||||
--language=
|
||||
--control=
|
||||
--browser-app=
|
||||
--config=
|
||||
--failure=
|
||||
--bpp=
|
||||
--fov=
|
||||
--callsign=
|
||||
--aspect-ratio-multiplier=
|
||||
--geometry=
|
||||
--view-offset=
|
||||
--aircraft=
|
||||
--min-status=
|
||||
--fdm=
|
||||
--aero=
|
||||
--model-hz=
|
||||
--speed=
|
||||
--aircraft-dir=
|
||||
--timeofday=
|
||||
--time-offset=
|
||||
--start-date-sys=
|
||||
--start-date-gmt=
|
||||
--start-date-lat=
|
||||
--airport=
|
||||
--runway=
|
||||
--carrier=
|
||||
--parkpos=
|
||||
--vor=
|
||||
--ndb=
|
||||
--fix=
|
||||
--offset-distance=
|
||||
--offset-azimuth=
|
||||
--lon=
|
||||
--lat=
|
||||
--altitude=
|
||||
--heading=
|
||||
--roll=
|
||||
--pitch=
|
||||
--uBody=
|
||||
--vBody=
|
||||
--wBody=
|
||||
--vc=
|
||||
--mach=
|
||||
--glideslope=
|
||||
--roc=
|
||||
--wp=
|
||||
--flight-plan=
|
||||
--nav1=
|
||||
--nav2=
|
||||
--adf=
|
||||
--dme=
|
||||
--visibility=
|
||||
--visibility-miles=
|
||||
--wind=
|
||||
--turbulence=
|
||||
--ceiling=
|
||||
--multiplay=
|
||||
--proxy=
|
||||
--httpd=
|
||||
--telnet=
|
||||
--jpg-httpd=
|
||||
--generic=
|
||||
--garmin=
|
||||
--joyclient=
|
||||
--jsclient=
|
||||
--native-ctrls=
|
||||
--native-fdm=
|
||||
--native=
|
||||
--nmea=
|
||||
--opengc=
|
||||
--props=
|
||||
--pve=
|
||||
--ray=
|
||||
--rul=
|
||||
--log-level=
|
||||
--trace-read=
|
||||
--trace-write=
|
||||
--season=
|
||||
--vehicle=
|
||||
--prop:
|
||||
"
|
||||
|
||||
|
||||
if [ ${BASH_VERSINFO[0]} -eq 2 ] && [[ ${BASH_VERSINFO[1]} = "05b" ]] \
|
||||
|| [ ${BASH_VERSINFO[0]} -gt 2 ]; then
|
||||
__fgfs_nospace="-o nospace"
|
||||
fi
|
||||
|
||||
shopt -s progcomp
|
||||
|
||||
|
||||
__fgfs_make_ac_list() {
|
||||
ls $__fgfs_root/Aircraft/*/*-set.xml|
|
||||
while read i; do
|
||||
i=${i##*/}
|
||||
echo "${i%-set.xml} "
|
||||
done >"$__fgfs_ac_list"
|
||||
}
|
||||
|
||||
|
||||
if [ "${0##*/}" == "$__fgfs_scriptname" ]; then # run explicitly -- not sourced
|
||||
echo "creating list of available aircraft: $__fgfs_ac_list"
|
||||
__fgfs_make_ac_list
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
if [ ! -e "$__fgfs_ac_list" ]; then
|
||||
echo "$0: creating list of available aircraft: $__fgfs_ac_list"
|
||||
__fgfs_make_ac_list
|
||||
fi
|
||||
|
||||
|
||||
__fgfs_ai_scenario() {
|
||||
local i
|
||||
for i in $__fgfs_root/AI/*.xml; do
|
||||
i=${i%.xml}
|
||||
echo ${i##*/}
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
__fgfs_offer() {
|
||||
local i
|
||||
for i in "$@"; do
|
||||
[ "$i" == "${i%=}" ] && i="$i "
|
||||
echo "$i"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
__fgfs_options=$(__fgfs_offer $__fgfs_options)
|
||||
|
||||
|
||||
__fgfs() {
|
||||
COMPREPLY=()
|
||||
local IFS=$'\n'$'\t' cur=${COMP_WORDS[COMP_CWORD]} alt
|
||||
|
||||
case "$cur" in
|
||||
--ai-scenario=*)
|
||||
alt=$(__fgfs_offer $(__fgfs_ai_scenario))
|
||||
;;
|
||||
--aircraft=*|--vehicle=*)
|
||||
alt=$(cat "$__fgfs_ac_list")
|
||||
;;
|
||||
--airport=*)
|
||||
if [ -e "$__fgfs_apt_list" ]; then
|
||||
alt=$(cat "$__fgfs_apt_list")
|
||||
else
|
||||
alt=$(__fgfs_offer khaf kpao koak kmry knuq ksjc kccr ksns krhv klvk o62 lpma)
|
||||
fi
|
||||
;;
|
||||
--carrier=*)
|
||||
alt=$(__fgfs_offer Nimitz Eisenhower Foch)
|
||||
;;
|
||||
--control=*)
|
||||
alt=$(__fgfs_offer joystick keyboard mouse)
|
||||
;;
|
||||
--failure=*)
|
||||
alt=$(__fgfs_offer pitot static vacuum electrical)
|
||||
;;
|
||||
--fdm=*)
|
||||
alt=$(__fgfs_offer jsbsim yasim uiuc larcsim ufo magic)
|
||||
;;
|
||||
--geometry=*)
|
||||
atl=$(__fgfs_offer 640x480 800x600 1024x768 1152x864 1600x1200)
|
||||
;;
|
||||
--log-level=*)
|
||||
alt=$(__fgfs_offer bulk debug info warn alert)
|
||||
;;
|
||||
--min-status=*)
|
||||
alt=$(__fgfs_offer alpha beta early-production production)
|
||||
;;
|
||||
--parkpos=*)
|
||||
alt=$(__fgfs_offer cat-1 cat-2 cat-3 cat-4 park-1)
|
||||
;;
|
||||
--season=*)
|
||||
alt=$(__fgfs_offer summer winter)
|
||||
;;
|
||||
--timeofday=*)
|
||||
alt=$(__fgfs_offer real dawn morning noon afternoon dusk evening midnight)
|
||||
;;
|
||||
--prop:*)
|
||||
return
|
||||
;;
|
||||
*)
|
||||
alt="$__fgfs_options"
|
||||
;;
|
||||
esac
|
||||
|
||||
COMPREPLY=($(compgen -W "$alt" -- ${cur#*=}))
|
||||
}
|
||||
|
||||
|
||||
complete -o default $__fgfs_nospace -F __fgfs fgfs signs fgfsterra
|
||||
|
Loading…
Reference in a new issue