summaryrefslogtreecommitdiff
path: root/contrib/vncviewer
blob: 7e9c00da54e7209771848e96425e507f53d19d72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# bash completion for vncviewer

have 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

have tightvncviewer &&
_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_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-insensivite.  Preferred case is taken from -help.
#       - Both single dash (-) and double dash (--) are allowed as option prefix
have xvnc4viewer &&
_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_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 | 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_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