unknownplace.org

# 2007-06-29

あれ、

screen

hardstatus って 15 まで行くと折り返すのか。

これって何か設定あるのかな? 10 くらいにしたい。

# 2006-12-21

mutt の表示がおかしいの直った

前にmutt使っていたときに表示がずれるのよねーとかいってたとき、33rpmさんにslang使えば直るかもとかコメントもらったんだけど、slangにしてもおかしいから放置してたんだけど、どうやらscreenのせいだったっぽい。

screenなしでmutt起動してみたら全然正常だった。。くっそう。

で、そのscreenなんだけど、

screen install memo

ここで配布されているパッチ当てたらmuttまともになった。すばらしー。

ついでにmuttを新しくしてみた。以下作業ログ

mutt:

sudo aptitude install libslang1-utf8-dev
wget http://www.emaillab.org/mutt/1.5.13/mutt-1.5.13.tar.gz
wget http://www.emaillab.org/mutt/1.5.13/patch-1.5.13.mutt-j.ja.1.gz
tar -zxvf mutt-1.5.13.tar.gz
gzip -d patch-1.5.13.mutt-j.ja.1.gz
cd mutt-1.5.13
patch -p1 < ../patch-1.5.13.mutt-j.ja.1
./configure --prefix=/usr/local/mutt --without-wc-funcs --with-slang --enable-default-japanese --enable-hcache
make
sudo make install

screen:

wget ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-4.0.2.tar.gz
wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-deadlock-patch
wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-hankanacopy-patch
wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-patch-cjkwidth-cvs-2006052001
tar -zxvf screen-4.0.2.tar.gz
cd screen-4.0.2
patch < ../screen-4.0.2-deadlock-patch
patch < ../screen-4.0.2-hankanacopy-patch
patch < ../screen-4.0.2-patch-cjkwidth-cvs-2006052001
./configure --prefix=/usr/local/screen --enable-colors256
# エラーった
sudo apt-get build-dep screen
./configure --prefix=/usr/local/screen --enable-colors256
# まだエラーったconfig.logみる
sudo aptitude install libncurses5-dev
./configure --prefix=/usr/local/screen --enable-colors256
make
sudo make install

# 2006-09-14

vbell off なときでもうっかり ^Z^G, ^Zg してしまうことがあって、激しくうざいので

bind ^G
bind g

とかした。

# 2006-03-20

256色PuTTY with screen

でけた。

ごろさんのやり方を参考にいろいろ

subtechグループ - 'hceT'.sub(/\Z/,'bus').reverse - putty 256色

  1. screen の --enable-colors256 のコメントアウトをハズして debuild る
  2. ncurses-term を入れて /etc/terminfo を れて/usr/share/terminfo の symlink にする←これって大変微妙
  3. putty の xterm-256 を使うのチェックを入れる
  4. putty の端末タイプの文字列を xterm-256color に

1やって、2は ncurses-term (terminfo/xterm-256colors用) いれただけ。symlinkはいらねぽい。

3やって、4 は screen しかつかわなかったら変えなくてOk。

これで screen 上で 256color2.pl は通るようになる。

でも emacs, vim ともに TERM=xterm-256colors して起動しないと256にならん。こういうもんかね。

あと、このままだと背景色関係などおかしな部分が出るので .screenrc に

defbce on

と書いて bce モードを ON にする。こうすると vim とかの特定の colorschema で背景がおかしくなるのも治る。bce モードが何かは知らない(ぉ

後こうすると TERM が screen-bce とかになるのでいろいろなスクリプトの書き換えが必要、めんどい。

# 2006-03-06

だめだ、すげー重い。

backtick id lifespan autorefresh command

で autorefresh に 0 以外を指定するとその秒数毎に command が実行されるのだけど、実行されてる間 screen が固まるw

plagger でやるなら Notify::Pipe or Notify::File とかでなんかファイルに書き出しておいて

backtick id 0 0 tail -f そのファイル

かなー。

plagger で backtick

plagger のみで backtick れるじゃんと、miyagawaさんにつっこまれたのでやってみた。

まず Plugin::Notify::Stdout を書いた。

package Plagger::Plugin::Notify::Stdout;
use strict;
use warnings;
use base qw/Plagger::Plugin/;

sub register {
    my ( $self, $c ) = @_;
    $c->register_hook(
        $self,
        'publish.feed'     => \&update,
        'publish.finalize' => \&finalize,
    );
    $self->{count} = 0;
}

sub update {
    my ( $self, $c, $args ) = @_;

    $self->{count} += $args->{feed}->count if $args->{feed}->count;
}

sub finalize {
    my ( $self, $c, $args ) = @_;

    if (defined $self->{count}) {
        $self->conf->{format}
            ? printf $self->conf->{format}, $self->{count}
            : print $self->{count};
        print "\n";
    }
}

ので下記のように backtick.yaml を作る

global:
  timezone: Asia/Tokyo
  log:
    level: error

plugins:
  - module: Subscription::Config
    config:
      feed: "https://username:password@mail.google.com/mail/feed/atom/!!Plagger" # !!Plagger はラベル名

  - module: Plagger::Plugin::Aggregator::Simple

  - module: Notify::Stdout
    config:
      format: "Plagger(%d) "

で、あとは .screenrc で

backtick 3 0 60 ${HOME}/plagger/plagger -c ${HOME}/.plagger/config/backtick.yaml

とか書いておけば 60 秒ごとに plagger が実行され、hardstatus とか caption とかで %3` とかけばそこにに plagger の出力が出る。

3 ていうのは backtick で指定した最初の数字 (僕がすでに0 1 2とIDを使ってるので3ってこと)

Gmail の Atom フィードは https + basic 認証

と教えてもらった。!!!

さっき書いたの超意味ない。

#!/usr/bin/perl

use strict;
use warnings;
use Carp;
use LWP::UserAgent;
use MIME::Base64;

our $VERSION = '0.02';

# ---- Configurations ----------------
my $username = 'username';
my $password = 'base64::cGFzc3dvcmQ=';
my $label    = '!!Plagger';

my $interval = 60;
# ------------------------------------

if ( my ($crypt, $pass) = $password =~ /^(\w+)::(.+)$/ ) {
    $password = $crypt eq 'base64' ? decode_base64($pass) : undef;

    croak qq/Invalid password crypt type, "$crypt"/ unless $password;
}

my $ua = LWP::UserAgent->new;

my $feed_request =
    HTTP::Request->new( GET => "https://mail.google.com/mail/feed/atom/$label" );
$feed_request->headers->authorization_basic( $username, $password );

$|=1;
while (1) {
    my $res = $ua->request( $feed_request );

    my ($unread) = $res->content =~ m!<fullcount>(\d+)</fullcount>!m;
    print "Plagger($unread) \n" if defined $unread;

    sleep $interval;
}

これでOKだ。

plagger_backtick.pl

つくた。

plagger backtick

こんな感じ。

#!/usr/bin/perl

use strict;
use warnings;
use Carp;
use WWW::Mechanize;
use HTTP::Cookies;
use MIME::Base64;

our $VERSION = '0.01';

# ---- Configurations ----------------
my $username = 'username';
my $password = 'base64::cGFzc3dvcmQ=';
my $label    = '!!Plagger';

my $interval = 60;
# ------------------------------------

if ( my ($crypt, $pass) = $password =~ /^(\w+)::(.+)$/ ) {
    $password = $crypt eq 'base64' ? decode_base64($pass) : undef;

    croak qq/Invalid password crypt type, "$crypt"/ unless $password;
}

my $mech = WWW::Mechanize->new( cookie_jar => HTTP::Cookies->new, );
$mech->agent_alias('Windows IE 6');

$|=1;
while (1) {
    $mech->get('http://mail.google.com/');
    if ( $mech->content =~ /ServiceLoginAuth/ ) {
        $mech->submit_form(
            fields => {
                Email  => $username,
                Passwd => $password,
            }
        );

        my ($redirect_url) = $mech->content =~ /url=(.*?)"/;
        $mech->get($redirect_url);
    }
    $mech->get("http://mail.google.com/mail/feed/atom/$label");

    my ($unread) = $mech->content =~ m!<fullcount>(\d+)</fullcount>!m;
    print "Plagger($unread) \n" if defined $unread;

    sleep $interval;
}

これ作ってて見つけたんだけど、Gmail の Atom フィードって URL に Label 名つけるとそれで絞り込めるのね。便利!!

# 2005-12-24

jじゃないほうのnaoyaたんのとこからのアクセスが!!

そこのまとめで紹介されてる id:hideoki 製 ssh 設定

function ssh_screen(){
 eval server=\${$#}
 screen -t $server ssh "$@"
}
if [ x$TERM = xscreen ]; then
  alias ssh=ssh_screen
fi

なんだけど、これいいなぁとか思ったけど、screen で ssh 直起動すっと keychain つかえなくねっすか? というのも zshrc で keychain のスクリプトよんでるので、zsh 上で ssh 起動しないといけない。

つか x$TERM = xscreen て何の意味がw

なので、こないだごろうさんにおしえてもらったのの case cd のところを

cd|ssh)
        if (( $#cmd >= 2)); then
            cmd[1]=$cmd[2]
        fi
        ;&

とかしてみた。これでまぁサーバー名(というかsshコマンドの最初の引数)がウィンドウ名になる。

つかそういえば screen 上での keychain についてちゃんと調べようと思ってたはずなのにすっかり忘れてたw

# 2005-12-17

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 のが個人的にはいいな。

# 2005-12-16

はてな 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 とか別キー割り当てしてある?とかかしら。

# 2005-12-11

EmacsClient with screen

EmacsWiki に載ってたよ。

Using EmacsClient with screen

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 名を自動的に最後に実行したコマンドに置き換えてくれる。すっばらしい。昨日ごろさんに教えてもらった。

# 2005-12-06

IRC でよばれたら表示

GNU screen hardstatus

なんで 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

とかしといた。

Page 1 of 2: 1 2