GNU screen で沢山の window を選択する

GNU screen は 11 個以上の window を開くと window の選択が面倒になる。0 から 9 番目までの window は「C-a 0」や「C-a 9」で選択できるが、10 番目以降の window は「C-a '」で番号を入力して Enter を入力する必要があり、直感的な操作が出来なくなるからだ。

この対策として screen の man にも例が載っている以下の設定を使う方法がある。例えば「C-a - 0」で window 10 を選択する。これで 20 個までの window を選択可能になる。

bind - command -c minus
bind -c minus 0 select 10
bind -c minus 1 select 11
bind -c minus 2 select 12
bind -c minus 3 select 13
bind -c minus 4 select 14
bind -c minus 5 select 15
bind -c minus 6 select 16
bind -c minus 7 select 17
bind -c minus 8 select 18
bind -c minus 9 select 19

この設定で長く満足していたけど、最近 20 個でも window が足りなくなる状況が出てきたので、21 個以上の window を選択できる方法を模索してみた。

最初は 9 の次は 16 進数で a かなと思い、以下のような定義を試してみた。例えば「C-a - a」で window 20 を選択する。しかし f を超えた辺りから番号が分からなくなってくるので使用を断念…。

bind -c minus a select 20
bind -c minus b select 21
bind -c minus c select 22
bind -c minus d select 23
bind -c minus e select 24
bind -c minus f select 25
bind -c minus g select 26
bind -c minus h select 27
bind -c minus i select 28
bind -c minus j select 29

色々と試行錯誤した結果、以下のような定義を使うことにしてみた。例えば「C-a - - 0」で window 20 を選択する。これで 30 個までの windows を選択可能になる。

bind - command -c minus
bind -c minus 0 select 10
...中略...
bind -c minus 9 select 19
bind -c minus - command -c minus2

bind -c minus2 0 select 20
bind -c minus2 1 select 21
bind -c minus2 2 select 22
bind -c minus2 3 select 23
bind -c minus2 4 select 24
bind -c minus2 5 select 25
bind -c minus2 6 select 26
bind -c minus2 7 select 27
bind -c minus2 8 select 28
bind -c minus2 9 select 29

つまり、ひとつの - が +10 を表すわけだ。同じように - を増やしていくことで 31 個以上の window を選択できるようにも可能だが、さすがに window の状態を把握できなくなりそうなので止めといた。しばらくは、この設定で使ってみる予定。

ちなみに、上の説明では C-a を使ったけど、個人的には C-t を使ってる。