aboutsummaryrefslogtreecommitdiff
path: root/ratpoison/window_menu
blob: 416ee1293c9af00212b826f34efa45d1f24a30bc (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
#!/usr/bin/env bash

# Lets you switch between all windows in a way that minimizes keystrokes.

# Two ways to order:
#   - If order=last, the windows are listed in the order that you last visited them in.
#   - If order=sequential, the windows are listed in number order.
order=sequential
ratmenu="~/.ratpoison/ratmenu"

source ~/.colors

# Yes, bash is really necessary, because it's version of printf makes this
# script possible.  Regular bourne shell printf does NOT.

window_index_str=$(ratpoison -c "info" | sed 's/^.*\([0-9]\)(.*$/\1/')
if [ "$window_index_str" = "No window." ]; then
    group_index=$($HOME/.ratpoison/workspace current)
    $ratmenu -style dreary -fg \"$COLOR0\" -bg \"$COLOR0\" "No windows in group $group_index" 
/bin/true
else
    ratpoison -c "echo $window_index_str"
    echo "$window_index_str">/tmp/log
    window_index=$[ $window_index_str + 1 ]
    if [ $order = sequential ]; then
        ( printf "$ratmenu -style dreary -fg \"$COLOR11\" -bg \"$COLOR0\" -io $window_index \
          ";
          ratpoison -c "windows %n %n %t" | sort -n | while read w x z; do
            a=$(printf "%3q" $x); b="ratpoison -c \"select $x\"";
            printf " %q\\ %q %q"  "$a" "$z" "$b";
          done; echo \;) | sh
    elif [ $order = last ]; then
        ( printf "$ratmenu -style dreary -fg \"$COLOR11\" -bg \"$COLOR0\" -io $window_index \
          ";
          ratpoison -c "windows %l %n %t" | sort -rn | while read w x z; do
            a=$(printf "%3q" $x); b="ratpoison -c \"select $x\"";
            printf " %q\\ %q %q"  "$a" "$z" "$b";
          done; echo \;) | sh
    fi
fi