本記事は ターミナルマルチプレクサ Advent Calendar 2011 : ATND の11日目です。10日目は screenでマルチディスプレイモードを利用する - ヌキのやる気のないエンジニアブログ でした。screen ネタが増えてきて嬉しい今日この頃です。それでは 5日目の記事 の続きとして開発版 GNU Screen のレイアウトについて説明します。
レイアウトがどのようなものであるかについては、以前まとめた記事がありますのでそちらをご覧ください。
使用したことがないので確かなことは言えませんが、いくつかのページを確認したところでは tmux でレイアウトに相当する概念はペインになるでしょうか。- 時代はGNU screenからtmuxへ - それ、Gentooだとどうなる?
- Ubuntu Weekly Recipe:第127回 ターミナルマルチプレクサ tmuxを使ってみよう|gihyo.jp … 技術評論社
配置を自在に操作する
いきなりですが以下が現在使用しているレイアウトに関する設定です。Ctrl-A
Ctrl-Y
や Ctrl-A
y
でレイアウト操作モード(仮称)に移行して、レイアウトに関する操作(作成、削除、選択など)を行い、最後にレイアウト一覧を表示します。
レイアウトの操作は layout
サブコマンドを使用しますが、ウィンドウに対するものと同じようなコマンドが多く、割り当てるキーに悩むことになりますので2ストロークキーにまとめた方が使いやすいと思います。このヒントは Re: New screen features available から得たものですが、自分なりに考えてウィンドウに対する操作とほぼ同じキーを割り当てています。また、現時点ではレイアウトの番号や名前を caption
や hardstatus
に指定できませんので、モード移行時や操作後にどのレイアウトにいるのかを明らかにしています。
# trigger for layout sub-commands bind ^Y eval 'command -c layout' 'layout show' bind y eval 'command -c layout' 'layout show' # create/remove layout bind -c layout c eval 'layout new' 'layout show' bind -c layout X eval 'layout remove' 'layout show' # change the current layout title or number bind -c layout A colon 'layout title ' bind -c layout N colon 'layout number ' # switch to the layout identified by number or title (not prefix of a title) bind -c layout \' eval 'layout select' 'layout show' # switch to other layout bind -c layout n eval 'layout next' 'layout show' bind -c layout p eval 'layout prev' 'layout show' bind -c layout 0 eval 'layout select 0' 'layout show' bind -c layout 1 eval 'layout select 1' 'layout show' bind -c layout 2 eval 'layout select 2' 'layout show' bind -c layout 3 eval 'layout select 3' 'layout show' bind -c layout 4 eval 'layout select 4' 'layout show' bind -c layout 5 eval 'layout select 5' 'layout show' bind -c layout 6 eval 'layout select 6' 'layout show' bind -c layout 7 eval 'layout select 7' 'layout show' bind -c layout 8 eval 'layout select 8' 'layout show' bind -c layout 9 eval 'layout select 9' 'layout show' # continuous switch to other layout bind -c layout ^N eval 'layout next' 'command -c layout' 'layout show' bind -c layout ^P eval 'layout prev' 'command -c layout' 'layout show'
レイアウト操作を試してみよう
上記設定に続いて、以下を記述したファイルを用意してください。
source ~/.screenrc # create window screen 0 screen 1 screen 2 screen 3 screen 4 # create layout layout new 0:layout0:vertical layout new 1:layout1:horizontal layout new 2:dummy layout new 3 # setup layout0 layout select 0 split -v select 0 focus right split split select 1 focus next select 2 focus down select 3 split -v focus bottom select 4 focus up # setup layout1 layout select layout1:horizontal select 2 split focus down select 1 split -v split -v split -v focus next select 0 focus right select 3 focus bottom select 4 resize -v -l 20% focus top # setup layout2 layout remove dummy layout select 3 layout number 2 layout title single select 2 stuff "echo here is current window\n" # select layout0 layout select 0 layout showつぎにそのファイルを指定して screen を起動してください。
% ~/local/bin/screen -c ./.screenrc.advent.layout
すると次のように領域を分割したレイアウト0が表示されます。
ここで Ctrl-A
Ctrl-Y
1
と続けて入力するとレイアウト1が表示されます。(Ctrl-A
はお使いの .screenrc で escape
で割り当てているものに読み替えてください)
つぎに Ctrl-A
Ctrl-Y
'
と入力して、プロンプトで 2
を入力すると領域が一つだけのレイアウト2が表示されます。
最後に、次のような操作をしてからアタッチし直してみてください。デタッチ時のレイアウト0が表示されます。
Ctrl-A
Ctrl-Y
でレイアウト操作モード(仮称)に移行Ctrl-P
で一つ前のレイアウト(レイアウト1)を選択(モードはまだ継続中)Ctrl-P
でもう一つ前のレイアウト(レイアウト0)を選択(モードはまだ継続中)ESC
でモードを終了Ctrl-A
d
でデタッチ
おわりに
レイアウトについてご理解いただけましたでしょうか?ローカル端末だけで GNU Screen を使用しているときでも、「あーこの分割した領域ちょっと狭いんで最大化(only
)したいわー。でもそうするとまたこの分割状態に戻すのかったるいわー」というときに、ひとつのウィンドウだけのレイアウトに切り替えられるだけでもかなり違います。そして例に挙げたように、作業でよく使うレイアウトやウィンドウ、その下で実行するコマンドを screen 初回起動時に一括して設定しておくと、素早く端末作業に取りかかれますのでオススメです。
領域の縦分割(split -v
)とレイアウト(layout
)、この2つの新機能だけでも開発版 GNU Screen を使う価値は十分あります。これらに比べると小さな変更ですが、他にも便利なところがいくつかありますので、そのあたりを紹介してゆければと思います。
0 件のコメント:
コメントを投稿