# bash completion for vncviewer have vncviewer && _vncviewer_bootstrap() { local fname case $(_realcommand vncviewer) in *xvnc4viewer) fname=_xvnc4viewer ;; *tightvncviewer) fname=_tightvncviewer ;; *) fname=_known_hosts ;; esac # Install real completion for subsequent completions complete -F $fname vncviewer $fname # Generate completions once for now unset -f _vncviewer_bootstrap } && complete -F _vncviewer_bootstrap vncviewer have tightvncviewer && _tightvncviewer() { local cur prev COMPREPLY=() _get_comp_words_by_ref cur prev case $prev in -passwd) _filedir return 0 ;; -encodings) COMPREPLY=( $( compgen -W 'copyrect tight hextile zlib \ corre rre raw' -- "$cur" ) ) return 0 ;; -via) _known_hosts_real "$cur" return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '-help -listen -via -shared -noshared\ -viewonly -fullscreen -noraiseonbeep -passwd -encodings\ -bgr233 -owncmap -truecolour -truecolor -depth \ -compresslevel -quality -nojpeg -nocursorshape \ -x11cursor' -- $cur ) ) else _known_hosts_real "$cur" fi } && complete -F _tightvncviewer tightvncviewer # NOTE: - VNC Viewer options are case insensitive. # Preferred case is taken from -help. # - Both single dash (-) and double dash (--) are allowed as option prefix have xvnc4viewer && _xvnc4viewer() { local cur prev COMPREPLY=() _get_comp_words_by_ref cur prev # Convert double dash to single dash case ${prev/#--/-} in # -passwd, -PasswordFile -[pP][aA][sS][sS][wW][dD]|-[pP][aA][sS][sS][wW][oO][rR][dD][fF][iI][lL][eE]) _filedir return 0 ;; # -PreferredEncoding -[pP][rR][eE][fF][eE][rR][rR][eE][dD][eE][nN][cC][oO][dD][iI][nN][gG]) COMPREPLY=( $( compgen -W 'zrle hextile raw' -- $cur ) ) return 0 ;; # -via -[vV][iI][aA]) _known_hosts_real "$cur" return 0 ;; esac if [[ "$cur" == -* || "$cur" == --* ]]; then # Default to vncviewer camelcase options, see `vncviewer -help' local dash options=( \ AcceptClipboard AutoSelect DebugDelay display \ DotWhenNoCursor FullColor FullColour FullScreen \ geometry help listen Log \ LowColourLevel MenuKey name Parent \ passwd PasswordFile PointerEventInterval PreferredEncoding \ SendClipboard SendPrimary Shared UseLocalCursor \ via ViewOnly WMDecorationHeight WMDecorationWidth \ ZlibLevel \ ) [[ "$cur" == --* ]] && dash=-- || dash=- # Is a `nocasematch' variable available (bash > v3.1)? if shopt nocasematch 2> /dev/null | command grep -q ^nocasematch; then # Variable `nocasematch' is available # Use vncviewer camelcase options local option oldNoCaseMatch=$(shopt -p nocasematch) shopt -s nocasematch COMPREPLY=( $( for option in "${options[@]}"; do [[ $dash$option == "$cur"* ]] && printf '%s\n' $dash$option done ) ) eval "$oldNoCaseMatch" 2> /dev/null else # Variable 'nocasematch' isn't available; # Convert completions to lowercase COMPREPLY=( $( compgen -W \ "$( tr [:upper:] [:lower:] <<<${options[@]/#/$dash} )" \ -- "$( tr [:upper:] [:lower:] <<<"$cur" )" ) ) fi else _known_hosts_real "$cur" fi } && complete -F _xvnc4viewer xvnc4viewer # Local variables: # mode: shell-script # sh-basic-offset: 4 # sh-indent-comment: t # indent-tabs-mode: nil # End: # ex: ts=4 sw=4 et filetype=sh