subtechグループ - 'hceT'.sub(/\Z/,'bus').reverse - screen emacs風bind
bind -c REGION 2 split bind -c REGION 1 only bind -c REGION 0 remove bind -c REGION o focus bind -c REGION ^ resize bind x command -c REGION
キタコレ! THX!!!!!
最後は bind ^x
のが個人的にはいいな。
はてな GNU screen を使い始めて数ヶ月が経ち、ようやく慣れてきました。それで、screenrc による設定方法などを調べているのですが、「こういうときはこうす・・
encoding ネタを紹介してみた。
で、上記URLで紹介されていた下記バインド
bind 2 split
bind o focus
bind 1 only
bind 0 remove
一瞬便利! とかおもったけど、ちょ、これ 0, 1, 2 のウィンドウセレクトする時どすんだよw
bind ^1 select 1
とか別キー割り当てしてある?とかかしら。
EmacsClient with screen
EmacsWiki に載ってたよ。
emacsclient で emacs のウィンドウをアクティブに
↓の zshrc の case で処理わけているところに
emacsclient)
screen -X eval "select 1"
return
;;
とか追加してみる。僕は emacs は常に window 1 で開くので、select 1 でおk。
んでこのあと C-x #
したら元のウィンドウにもどってくれたらかっけーんだけど、elisp で screen -X other
とかよべばいいかなとか思ったけど、emacs 画面いってからファイル閉じる間にウィンドウ切り替えしたらうまく動かんし。どーやるんだろう。
alias ec='emacsclient -n'
とかしててほとんどこっちしか使わないので戻んなくてもいいのだけど、svn(k) コミット時とかで便利そうだなぁ。
zshで埋まって悲しいとき
ステータスライン - ari's Diary で紹介されているのをつかうと screen の window 名を自動的に最後に実行したコマンドに置き換えてくれる。すっばらしい。昨日ごろさんに教えてもらった。
IRC でよばれたら表示
なんで caution とかいわないで。なんとなく。
んで elisp は 33rpmさん に教えてもらって
(add-hook 'riece-keyword-notify-functions
(lambda (keyword message) (call-process "touch" nil nil nil "/tmp/riece")))
(add-hook 'riece-after-switch-to-channel-functions
(lambda (last) (call-process "rm" nil nil nil "/tmp/riece")))
こんな感じのを .riece/init においておく。これでIRCでキーワード流れると /tmp/riece ができる。 チャンネルかえると消える。
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
while (1) {
if (-e '/tmp/riece') {
print " Caution!! \n";
}
else {
print "\n";
}
sleep 1;
}
こんなんを riece.pl として .screenrc には
hardstatus alwayslastline "[%02c] %0`%-w%{=b bw}%n %t%{-}%+w %= %?%{=b rw}%2`%{-} %?%1`"
backtick 0 0 0 ${HOME}/.screen/backtick.pl
backtick 1 0 0 ${HOME}/.screen/netstat.pl
backtick 2 0 0 ${HOME}/.screen/riece.pl
こんな感じで。%?
でくくられてるところはそのなかのエスケープ文字(この場合 %2` )が展開されるときだけ中を表示するやつ。
んでこれ消すのにチャンネル変えなきゃいけないのはめんどいこともあるとおもうので
#/bin/sh
rm /tmp/riece
とかを delriece.sh とかにして screenrc に
bind r exec $HOME/.screen/delriece.sh
とかしといた。
screenrc 読み込みなおし
:source $HOME/.screenrc
知らなかった。いちいち screen 再起してたよ。。
なんできねーかなとおもって :reload とか適当にいろいろためしてたらみっけた。(man 読みましょう)
通信状態表示
意味ねええええ。ので多分すぐあきる。
#!/usr/bin/perl
use strict;
use warnings;
$|=1;
{
package StatQue;
sub new { bless {}, shift }
sub add {
my $self = shift;
push @{$self->{que}}, shift;
shift @{$self->{que}} if @{$self->{que}} >= 11;
}
sub avg {
my $self = shift;
my $total;
$total += $_ for @{$self->{que}};
$total / @{$self->{que}};
}
}
my $in_que = StatQue->new;
my $out_que = StatQue->new;
my @stats = grep /.+/, split /:|\s/, qx{ cat /proc/net/dev | grep eth0 };
my ( $old_in, $old_out ) = ( $stats[1], $stats[9] );
while (1) {
sleep 1;
@stats = grep /.+/, split /:|\s/, qx{ cat /proc/net/dev | grep eth0 };
my ( $new_in, $new_out ) = ( $stats[1], $stats[9] );
$in_que->add( $new_in - $old_in );
$out_que->add( $new_out - $old_out );
printf("in: %.1fKB/s out: %.1fKB/s\n",
$in_que->avg / 1024,
$out_que->avg / 1024);
$old_in = $new_in;
$old_out = $new_out;
}
こんなのを netstat.pl とかしておいて screenrc に
backtick 1 0 0 ${HOME}/.screen/netstat.pl
とする。hardstatus も
-hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
+hardstatus alwayslastline "[%02c] %0`%-w%{=b bw}%n %t%{-}%+w %= %1`"
こんな感じで。
昨日の backtick.pl が ID0 で netstat.pl が ID1 ってことね。
caption も always
これいい。
caption も hardstatus もどっちも always !
問題
- IRC でキーワード(名前とかね)流れたら hardstatus に出したいけど elisp(riece) わからん。
- → elisp わからんけどログ監視すればできそう
- カレントウィンドウの encoding を常に表示しときたい。
- → まったくわからん
ボスケテ