rcmdnk's blog

20130511_screen_small_200_200

仕事で使ってるLinuxのOSアップデートがあったので 色々自分用に再インストールをしましたが、 GNU screenのインストール時にちょっとひっかかったのでメモしておきます。

Sponsored Links

GNU screen開発版(4.1.0)のインストール

基本的に以前やった通りなんですが、 4月にちょっとしたアップデートがあった様で、それによって コンパイルが通らなくなっているようです 1

non-BMPのサポートを入れた際 の恐らくタイポ?なんでしょうけどsrc/anci.cの一箇所 2930行目辺り(パッチを当てた後に見ると2954行目辺り)を 以下の様に訂正します

1
2
3
4
5
6
 # endif
 #endif
 #ifdef UTF8
-      if (p->encoding == UTF8)
+      if (p->w_encoding == UTF8)
        {

取り敢えずこれで後は以前 と同じ様にインストール。

caption/hardstatusの表示

上で参照したページを見ていたら %Eと言うエスケープがcaptionとかで使える様になっている、 というのを見つけて、 screenのgitのコミットメッセージ を見ると1年以上前に実装されていました。

%Eは、コマンド入力待ち状態(C-a等escape文字を押した時)を 判定してくれる、ということです。

ということで、これを含めてcaption及びhardstatusは以下の様にしています。 (hardstatusは%Eを使ってませんが…)

.screenrc
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
### caption for each window
aption always '%?%F%{=d Wk}%:%{=d Kk}%?%?%P%{=d Bk}%?%n %H %L=%h%>%?%P *** copy/paste mode ***%?%?%E *** command mode ***%?%-0='
# %?%F      # if the window has the focus
#  %{=d Wk} #   set attribute = {dim, black(k) on bright Write(W)}
# %:        # else
#  %{=d Kk} #   set attribute = {dim, black(k) on bright Black(K)}
# %?        # end if
# %?%P      # if copy/paste mode
#   %{=d Bk}#   set attribute = {dim, black(k) on bright Blue(B)}
# %?        # end if
# %n        # window number
#           # space
# %H        # hostname of the system
#           # space
# %L=       # Mark the position for the next truncation
# %h        # window' hardstatus
# %>        # Truncate %L= ~ %>
# %?%P      # if copy/paste mode
#   *** copy/paste mode *** # draw this sentence
# %?        # end if
# %?%E      # if copy/paste mode
#   *** command mode *** # draw this sentence
# %?        # end if
# %-0=      # pad the string to the display's width. "-0" means start from
#           # the rightest side 
#           # (e.g. 10=: 10% from left, 010, 10 characters from left
#           # (     -10=: 10% from right)
#           # With %L>, %= above, screen tries to truncates the part 
#           # in the left of "%L>"

### hardstatus
ardstatus alwayslastline "%{= Kk}%-w%40>%{= Wk}%n %t%{-}%+w%-0="
hardstatus alwayslastline "%{= Kk}%-w%{= Wk}%n %H %t%{-}%+w"
# %{= Kk}   # set attribute = {black(k) on bright Black(K)}
# %-w       # windows' list up to the current window (shown as "%n %t")
# %40>      # Mark here as a point to move when truncation
#           # Try to move this point to the 40% point
# %{= Wk}   # set attribute = {black(k) on bright Write(W)}
# %n        # current window number
#           # space
# %t        # current window title
# %{-}      # remove the set from the current attributes
# %+w       # windows' list starting with the window after the current one (shown as "%n %t")

%Eの使い方としては、コマンド入力待機状態の時に *** command mode ***とcaptionに表示させるようにしました。

こんな感じ

最初、copy/paste同様色も変えようかと思ったんですが、 ウィンドウを移動するたびに色が変わると目がチカチカするので 文字を追加するだけにしておきまた。

1つ気になるのが、縦分割をしていると、何故か%Eが横のウィンドウにも有効になって 上の絵にあるように上側両方のウィンドウでcommand mode が表示されてしまっています。

バグなのかどうなのか分かりませんが、 まあ、ウィンドウの情報と言うより全体の情報ですし、 それ程長い時間表示されるものでもないのでとりあえずはこの状態でOKとします。

ちなみに、上のcopy/pasteの部分も随分前にどこかからコピペしたものだったと思ったんですが、 恐らく上で参照したページと同じ方の

Ref: 開発版GNU Screenでコピペを極める(ターミナルマルチプレクサ Advent Calendar 2011 : ATND の24日目)

を参照したみたいです。(毎度参考にさせて頂いてありがとうございます。)

tmux…?

最近GNU screenよりも tmux の方が流行ってる感もあって、何度か 乗り換えようと試してみたんですが、どうしてもtmux出来ないことがあって 乗り換えられません。

screenだと、ウィンドウを適当に分割した後、それぞれのウィンドウに 適時好きなウィンドウを持ってこれます。

これがtmuxだと、windowと言うのが1つのタブみたいな感じで、 それぞれでpaneと呼ばれる領域に分けることが出来ます。

このpaneと言う単位を、screenで言うところのウィンドウの様に扱いたくて、 別のwindowに行った時に他のwindowからpaneを自由に取ってきたい、 と思うんですが、これが簡単じゃありません。

丁度、Advent Calenderの上の記事の前の日に、

Ref: tmuxのペイン切り替えをscreenみたくする(ターミナルマルチプレクサ Advent Calendar 2011 23日目)

という記事があってまさにこのことを記事にしてありました。

ですが、これだと前後のwindowの決まったpaneしか取ってこれない上に 交換的な事をしてるので、やっぱりscreenとは違う感じになってしまいます。 (この辺windowだとかpaneという言葉が正確でなかったらすいません。)

もうこの辺はツール自体の思想の問題で、 tmux的な動作になれてしまえばそっちの方が便利だ、と言う人もいるんだと思うんですが、 やっぱり暫くはscreenにとどまることになりそうです。

しかしtmuxの方が良い、という感じの話のが多いのは何でなんでしょう…? (以前は画面分割の面で大分tmuxの方が先を言ってた感じですかね? 今でもGNU screenの安定版は縦分割出来ない訳で…)

tmuxの最大の利点はググる時にtmuxと売っただけでもちゃんとtmux関連の 話を検索してくれることかもしれません… (screenだと一般的単語過ぎてしまうのでGNU screenとかしますが、 これだとGNUを書いてない記事とかで結構ためになる話を後ろに回してしまったり…)

byobu

byobuはGNU screenのラッパーツールみたいな感じで、 中でGNU screenを起動しますが、設定変更を行う簡単なインターフェースがあるので、 直接.screenrcを書かなくても指示に従って好きな物を選んであげれば簡単に好きな 設定を作ることが出来る、と言う感じでしょうか?

tmuxにも対応していて、screenの代わりに使う事も出来ます。

既に自分で.screenrc等をがしがし書いている場合には必要無いですが、 始めてGNU screenやtmuxを使う人にはとても便利なものだと思います。

以前、外国人の同僚に

“byobuっていう便利なものがあるよ”

って言われて、 最初何のことだか良く分からなかったけどどうやらターミナルで使う物で GNU screenとかと同じ様なものだな、と理解。 それで、byobuってなんでそんな変な名前?と思ってたら

“日本のものでしょ?”

って言われて始めて屏風だったのか、と知ったという。

byobuは殆ど使ったことがないのですが、 ちょっとこの話を思い出したので最後に紹介してみました。

Sponsored Links
Sponsored Links

« コマンドラインでGoole Taks(ToDoリスト)を表示する方法 Topへ戻るボタンの設置 »