From c995f10832647da20a9764be328216ee01c99f52 Mon Sep 17 00:00:00 2001 From: Freddy Vulto Date: Mon, 16 Mar 2009 21:57:12 +0100 Subject: Improved vncviewer completion - Split vncviewer completion in _tightvncviewer() and _xvn4viewer() - Vncviewer completion automatically selects right completion at run-time. Default is _tightvncviewer(). - Added _realcommand() global function --- bash_completion | 48 ++++++++------------ contrib/vncviewer | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++ to_review/vncviewer | 71 ----------------------------- 3 files changed, 145 insertions(+), 100 deletions(-) create mode 100644 contrib/vncviewer delete mode 100644 to_review/vncviewer diff --git a/bash_completion b/bash_completion index 3b02cde7..c66f54e5 100644 --- a/bash_completion +++ b/bash_completion @@ -540,6 +540,25 @@ _usergroup() fi } + +# Get real command. +# - arg: $1 Command +# - stdout: Filename of command in PATH with possible symbolic links resolved. +# Empty string if command not found. +# - return: True (0) if command found, False (> 0) if not. +_realcommand() { + type -P "$1" > /dev/null && { + if type -p realpath > /dev/null; then + realpath "$(type -P "$1")" + elif type -p readlink > /dev/null; then + readlink -f "$(type -P "$1")" + else + type -P "$1" + fi + } +} + + # this function count the number of mandatory args # _count_args() @@ -9063,35 +9082,6 @@ _smartctl() complete -F _smartctl smartctl } -# vncviewer(1) completion -# -have vncviewer && -_vncviewer() -{ - local cur prev - local -a config - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -via) - _known_hosts -a - ;; - *) - # ssh into the the server, find and ping the broadcast address, then - # sort and show the results. - COMPREPLY=( $( ssh -o 'Batchmode yes' $prev \ - "ping -bnc 4 255.255.255.255" 2>/dev/null | \ - awk -F ' ' '{print $4}' | \ - sort -n | uniq | egrep '[0-9]+\.[0-9]+\.' 2>/dev/null ) ) - esac - - return 0 -} && -complete -F _vncviewer vncviewer - # sysctl(8) completion # have sysctl && diff --git a/contrib/vncviewer b/contrib/vncviewer new file mode 100644 index 00000000..933783a4 --- /dev/null +++ b/contrib/vncviewer @@ -0,0 +1,126 @@ +# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- +# ex: ts=8 sw=8 noet filetype=sh +# +# bash completion for vncviewer + + +_vncviewer_bootstrap() { + local fname + case "$(_realcommand vncviewer)" in + # If `vncviewer' not installed, default file-dir completion + '') _filedir `_get_cword` ;; + *xvnc4viewer) fname=_xvnc4viewer ;; + *tightvncviewer|*) fname=_tightvncviewer ;; + esac + if [ $fname ]; then + # Install real completion for subsequent completions + complete -F $fname vncviewer + $fname # Generate completions once for now + unset -f _vncviewer_bootstrap + fi +} && +complete -F _vncviewer_bootstrap vncviewer + + +_tightvncviewer() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -passwd) + _filedir + return 0 + ;; + -encodings) + COMPREPLY=( $( compgen -W 'copyrect tight hextile zlib \ + corre rre raw' -- $cur ) ) + return 0 + ;; + -via) + _known_hosts + 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 + fi +} && +complete -F _tightvncviewer tightvncviewer + + +# NOTE: - VNC Viewer options are case-insensivite. Preferred case is taken from -help. +# - Both single dash (-) and double dash (--) are allowed as option prefix +_xvnc4viewer() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + # 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 + 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 | 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"* ]] && echo $dash$option + done ) ) + eval "$oldNoCaseMatch" 2> /dev/null + else + # Variable 'nocasematch' isn't available; + # Convert completions to lowercase + COMPREPLY=( $( compgen -W "$( + echo ${options[@]/#/$dash} | tr [:upper:] [:lower:] + )" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) ) + fi + else + _known_hosts + fi +} && +complete -F _xvnc4viewer xvnc4viewer diff --git a/to_review/vncviewer b/to_review/vncviewer deleted file mode 100644 index 24d90124..00000000 --- a/to_review/vncviewer +++ /dev/null @@ -1,71 +0,0 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# -# bash completion for vncviewer (4.1.1) - - -# NOTE: - VNC Viewer options are case-insensivite. Preferred case is taken from -help. -# - Both single dash (-) and double dash (--) are allowed as option prefix -have vncviewer && -_vncviewer() -{ - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - # 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 - 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 | 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"* ]] && echo $dash$option - done ) ) - eval "$oldNoCaseMatch" 2> /dev/null - else - # Variable 'nocasematch' isn't available; - # Convert completions to lowercase - COMPREPLY=( $( compgen -W "$( - echo ${options[@]/#/$dash} | tr [:upper:] [:lower:] - )" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) ) - fi - else - _known_hosts - fi -} && -complete -F _vncviewer vncviewer -- cgit v1.2.1 From edd120e212ccd54d8fbcf87ec7c55210a8353bb6 Mon Sep 17 00:00:00 2001 From: David Paleino Date: Thu, 19 Mar 2009 19:42:04 +0100 Subject: Re-sync with debian/changelog --- CHANGES | 3 ++- debian/changelog | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 9b4ecf0f..5c360718 100644 --- a/CHANGES +++ b/CHANGES @@ -76,6 +76,7 @@ bash-completion (1.0) go. After it gets accepted, the completion would go into contrib/. * Remove unused UNAME local variable in _info() (Closes: #501843) * AUTHORS added + * Make _alias() use _get_cword * Merge from Gentoo: - fix 'find' completion so that it properly completes on -?(i)whilename. Patch by Ciaran McCreesh. @@ -153,7 +154,7 @@ bash-completion (1.0) [ Santiago M. Mola ] * Add .ape to mplayer supported extensions (Alioth#311510). - -- David Paleino Tue, 17 Feb 2009 09:14:09 +0100 + -- David Paleino Thu, 19 Mar 2009 19:41:38 +0100 bash-completion (20080705) unstable; urgency=low diff --git a/debian/changelog b/debian/changelog index 4621061b..be7e1aae 100644 --- a/debian/changelog +++ b/debian/changelog @@ -154,7 +154,7 @@ bash-completion (1:1.0-1) UNRELEASED; urgency=low [ Santiago M. Mola ] * Add .ape to mplayer supported extensions (Alioth#311510). - -- Freddy Vulto Wed, 25 Feb 2009 21:16:46 +0100 + -- David Paleino Thu, 19 Mar 2009 19:41:38 +0100 bash-completion (20080705) unstable; urgency=low -- cgit v1.2.1