]> git.mxchange.org Git - flightgear.git/commitdiff
argument & parameter completion for bash (instructions inside)
authormfranz <mfranz>
Thu, 24 Jul 2008 17:52:04 +0000 (17:52 +0000)
committermfranz <mfranz>
Thu, 24 Jul 2008 17:52:04 +0000 (17:52 +0000)
scripts/tools/fg-completion.bash [new file with mode: 0755]

diff --git a/scripts/tools/fg-completion.bash b/scripts/tools/fg-completion.bash
new file mode 100755 (executable)
index 0000000..f4cc6b2
--- /dev/null
@@ -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
+