1
0
Fork 0
flightgear/scripts/tools/fg-completion.bash
2008-07-24 20:46:30 +00:00

296 lines
5.4 KiB
Bash
Executable file

#!/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=*)
alt=$(__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