irssiで良い感じにlingrができる irssi-lingr

最近、

Perlの話題を日本語で – Lingr

お気軽なかんじで、Perl に関する話題をしましょう。 初心者のかたでも御気軽にPerl の質問など、もりもりしてください♪

というLingrの部屋が盛りあがってる。

最初はブラウザで見ていたんだけど、だんだんつらくなってきたので、APIを使ってirssiでLingrチャットができるのを作りました。

https://github.com/typester/irssi-lingr

~/.irssi/scripts に置いて、 irssi内から、

/run lingr
/set lingr_user your_lingr_username
/set lingr_password your_lingr_password
/set lingr_api_key your_api_key  # オプション
/lingr start

lingr/* というwindowができてそこで普通に会話できる。

irssi-lingr

lingrはtwitterみたいに、@username という形で発言するとその人に通知がいく(iPhoneクライアントだけ?)機能があるので、 その機能を簡単に使えるように、nick補完すると自動的に @ を付与する機能も付けておいた。

tmux + irssi + canything で Anything 風チャンネル切り替えする

で使ってる channel-socket プラグインも、このirssi-lingrのチャンネル郡も切り替えられるようにアップデートしてあるので、もしつかっているひとがいたらアップデートすると良いです。

by typester / at 2013-03-22T10:20:00 / irssi / Comment

tmux + irssi + canything で Anything 風チャンネル切り替えする

irssi 環境を prgmr.com からさくら VPS に移行したついでに irssi のプラグインを見直していて、そのときに nicklist.pl というのをいれたわけですが、これがなかなか hackish な実装になっており(笑)、named pipe なファイルつくってそれを cat しておくと irssi がそこに nicklist を書き込むというような感じになってて、基本的に GNU screen などの縦分割と一緒に使うように設計されている。

で、僕はリモートサーバー上の GNU screen 上で irssi を動かしているので、それをつかうために縦分割をためしてみたわけですが、window 分割したときにでる caption を GNU screen では消すことができず、ローカルで使っている screen の hardstatus の上に、リモート screen の caption が出るという大変いやなかんじになってしまう。

設定見てもどうにも消せないっぽいので、screen 競合として名高い tmux を見てみると普通に消せたのでとりあえずリモートだけ tmux に移行をしてみた。

リモートだけのつもりが tmux をいじっているうちにこれはなかなか良いものだと言うことになり、ローカルも乗り換えるに至った。

まず、tmux をおすすめしてる記事はこれまでもよく目にしてきたがピンとこなかったのは、ほとんどの記事が GNU screen をハードに使ってる人のものではなかったからである。 GNU screen をハードに使ってる人のために僕が tmux の良いところを上げると、

  • tmux 内外問わず、すべての操作をコマンドから行える
  • window 増やさなくても window の中に分割窓(pane)をおける

他にもいろいろあるのだが、この二つは大きい。

tmux 内外問わず、すべての操作をコマンドから行える

これは script 的に動作を拡張しようとしたときに重要になる。 GNU screen でもまぁ screen -X でできるのだが、tmux に比べるとできることが限られており、ちょっと込み入ったことをやろうとするとすぐに screen にパッチを当てる、みたいなことになるw

window 増やさなくても window の中に分割窓(pane)をおける

tmux は window 分割の概念が screen とは異なっている。tmux では分割された小窓は pane とよばれ、window とは定義が違ったものが存在する。それによって window を増やすことなく画面を分割でき、それぞれの window が分割 pane のレイアウトを別々に管理することが可能になっている。

これは好みの問題もあるかもしれないが、僕は tmux 方式が気に入った。

これによって GNU screen 利用時より分割を積極的につかうようになった。特にライフチェンジングだなとおもったのは、分割窓を Emacs でいうところの popwin.el 的に使う方法だ。man をチラ見したり、辞書を引いたりそういうレベルで気軽にpaneをつくれ、man を終了するとpaneが自動で閉じるといった具合に便利に使える。

canything

Emacs 使いが分割窓を popwin 的に使うようになったらまず思いつくのがやっぱり Anything だ。コマンドラインベースのがあったら tmux と相性いいだろうなとおもったらすぐに見つかりました。

canything: CUIでAnything

上記サイトにも乗っているけれど、

$ tmux lsw | canything | cut -d":" -f 1 | xargs tmux select-window -t

とかすれば tmux ウィンドウを anything 風切り替えできるのですが、これを分割窓と組み合わせて、

# .tmux.conf
bind-key b split-window 'tmux lsw | canything | cut -d":" -f 1 | xargs tmux select-window -t'

みたいに設定すると、C-z b (僕はprefixキーz派) で Emacs っぽく画面分割され anything 風しぼりこみインタフェースで window 切り替えできる。すばらしい。

irssi で anything 風チャンネル切り替え

となるとやっぱり真っ先に思いつくのがこれでしょう。まず irssi プラグインを書き、コマンドラインから irssi のチャンネルリストを取得、チャンネル切り替えをできるようにするものを書いた。

channel-socket.pl

これを読み込んで、

/channel-socket start

とすると /tmp/irssi-channels.sock/tmp/irssi-set-channel.sock という二つの UNIX ドメインソケットが作られる。それぞれチャンネル取得用ソケットと、チャンネル切り替え用ソケットだ。

具体的には

$ nc -U /tmp/irssi-channels.sock

でチャンネル一覧取得でき、

$ echo '#emacs-ja' | nc -U /tmp/irssi-set-channel.sock

でチャンネルを切り替えられるっていう具合だ。

これを連結させて

$ nc -U /tmp/irssi-channels.sock | canything | nc -U /tmp/irssi-set-channel.sock

で、anything 風 チャンネル切り替えのできあがり。

これを tmux の分割窓とくみあわせれば完璧。さっきの tmux ウィンドウ切り替えみたいに tmux 側で bind しても良いが、irssi 側でやるのがより自然かなと思う。僕はこんな感じにした。

/bind meta-b command exec - tmux split-window 'nc -U /tmp/irssi-channels.sock | canything -i | nc -U /tmp/irssi-set-channel.sock'

これで irssi 上で M-b すればチャンネル一覧の anything 窓がでる。

Anything like incremental channel switching at irssi

こんな感じ。他にもいろんなことにつかえそうですね!

by typester / at 2012-03-26T06:53:00 / irssi · tmux / Comment

ssh経由でサーバー上のGNU screen上のirssiを一発で開くコマンド

IRCはssh経由でやっていて、毎回sshでつないだあとに手動でscreen attachとかめんどくさいなーと思っていたのですが、

$ ssh example.com -t screen -xR irssi

みたいな感じにすればssh接続と同時にscreen attachするようにできた。便利! (ここでのirssiはコマンド名ではなく、GNU screenのセッション名です。念のため)

irssiっていうalias貼ったらローカルで実行してるような雰囲気になって良い。(実際にはローカルにもirssiいれているのでircというaliasにした)

by typester / at 2012-03-22T14:46:00 / irssi / Comment

AnyEventでirssiプラグインを書く

AnyEvent はその名の通りさまざまなイベントインタフェースに対応していて、その中に irssi が使用している Glib も含まれているため、irssiのプラグインの中で普通に AnyEvent を使用することができます。

キーワード反応を im.kayac.com で自分の IM に通知する higlith2im.pl プラグインを AnyEvent を使用するように書き換えたのが以下です。

use strict;
use warnings;

use Glib;

use Irssi;
use AnyEvent::HTTP;

use HTTP::Request::Common;

our $VERSION = '0.1';

our %IRSSI = (
    name        => 'hilight2im',
    description => 'notify hilight message to IM via im.kayac.com api',
    authors     => 'Daisuke Murase',
);

sub sig_printtext {
    my ($dest, $text, $stripped) = @_;

    if ( $dest->{level} & MSGLEVEL_HILIGHT ) {
        my $user = Irssi::settings_get_str('im_kayac_com_username') or return;
        my $msg  = sprintf('[irssi] %s', $stripped);

        my $req = POST "http://im.kayac.com/api/post/$user", [ message => $msg ];
        my %headers = map { $_ => $req->header($_), } $req->headers->header_field_names;

        my $r;
        $r = http_post $req->uri, $req->content, headers => \%headers, sub { undef $r };
    }
}

Irssi::signal_add('print text' => \&sig_printtext);
Irssi::settings_add_str('im_kayac_com', 'im_kayac_com_username', '');

fork する必要がなくなってシンプルですね!

...とおもいきや現状の AnyEvent::HTTP はなんと HTTP::Request オブジェクトからのリクエスト送信に対応していないため、自分ですべてのリクエストを組み立てる必要があるようです。これは不便。。

ですが、irssi の中で普通に AnyEvent を使うことができるのはなかなか便利です。お試しあれ!

AnyEvent 版は github にあげた。

by typester / at 2009-07-13T23:30:00 / perl · irssi / Comment

irssiからOutputzに文字数を投げる

EmacsからOutputzに文字数を投げる - antipop

を見て、早速インストールして使ってみたら激しくおもしろい!

irssiでもやりたくなったので、irssiで発言した文字数をOutputzに投げるプラグインを書いた。

http://github.com/typester/irssi-plugins/tree/master/outputz.pl

~/.irssi/scripts にファイルをおいて、irssi内で

/run outputz.pl

して

/set outputz_key あなたの復活の呪文
/set outputz_uri 適当なURI

すると設定完了で、あとは自動で発言数が投稿されます。

`outputz_uri` に `%s` をいれるとその部分はIRCのチャンネル名に置換されます。

outputz_uriURI::Template 形式で指定できるようにしました。

デフォルトは irc://{server}:{port}/{channel} です。

つかえる変数は

  • server: サーバーアドレス
  • port: サーバーポート番号
  • channel: 発言したチャンネル名
  • server_tag: irssiでのサーバーのユニークタグ
  • nick: そのサーバーでのあなたのニックネーム

となっております。

こないだ作った PoCo::Client::HTTPDeferred つかってるのでそのサンプルとしてもいいとおもいます。

しかし、emacsよりirssiの方が文字数いってそうで集計を見るのが怖いです。。。

by typester / at 2008-11-21T16:00:00 / web · irssi / Comment

irssi-proxy++

通常 IRC は自宅サーバー上の irssi でやってるのだが、イタリアの回線が細いため ssh が重くてイライラする。

tiarra はずさなければよかったなぁと思ったが、irssi にも proxy 機能あった気がするなぁと思い直してそれを使ってみた。

まず、

/load proxy

して proxy モジュールをロード。

するとパスワード設定されてないYO! とかいう警告が出るので

/set irssiproxy_password hogehoge

などとしてパスワードを設定する。

最後に

/set irssiproxy_ports freenode=16667 ircnet-ja=16668 skype=16669 local=16670

とかすれば指定したポートで proxy が立ち上がる。

あとはローカルのIRCクライアントからそこにつなぐだけ! 快適快適。

by typester / at 2008-06-19T19:30:00 / irssi / Comment

dopplrのnickからその人のローカル時間を表示するirssiプラグインを書いた

IRCで話していると、相手は今何時なんだろうと思うことがよくあります。

今日とあるチャンネルでそのことについて話していて、dopplrの情報使ったらいいんじゃないかとひらめいたので早速irssiプラグインを作ってみました。

http://coderepos.org/share/browser/lang/perl/irssi/scripts/dopplr.pl

これを入れた状態で

/clock miyagawa

とか打つとmiyagawaさんがいまどこにいて、そこはいま何時かというのを出してくれます。便利!

23:40 -!- Irssi: typester is at home in Kamakura (03/21 23:40)

という感じの出力です。(これは /clock typester した結果)

使い方は ~/.irssi/scripts 以下にスクリプトをおいて /run dopplr でロード。その後

/set dopplr_token 認証用token

としてtokenを登録したら/clockコマンドが動くようになります。

tokenはまじめに取得するのは面倒なのですが、

http://www.dopplr.com/account/api_session_token

ここからテスト用のtokenを作成できるのでここのを使うと楽です。

もちろんdopplrのAPIを使ってるので、dopplr上で自分がみることができる人の情報しかとってこれませんのであしからず。

by typester / at 2008-03-21T23:38:00 / irssi · dopplr / Comment

mobirc-irssi が実用に耐えうるようになりましたのでお知らせします

この間ちょっと紹介したirssiのプラグインスクリプトとしてmobircをつかうmobirc.plスクリプトですが、実用に耐えうる段階まできましたので再度紹介しておきます。

画面サンプルはこんな感じ。(スクリーンショットが取れるPSPでの画面です)

psp x mobirc x twirc

素のmobircはIRCクライアント機能と、HTTPD機能を両方持ち、tiarraなどのIRCプロクシにつなぐことで使用するものになっていますが、こちらのirssiプラグインではmobircのIRCクライアント機能はirssiプラグインとして実装していますので、irssiさえあれは利用することができます。

イメージ的にはirssiがHTTPDを立てている感じになってます。

またキーワード設定などもirssiのハイライト設定を使用していますので、別途mobirc側でキーワード設定をする必要がないのもちょっとうれしいところです。

実際の使い方(インストールの仕方)としては

  • mobirc.plをirssiのスクリプトディレクトリ (~/.irssi/scripts) にコピーor symlink

  • irssi起動時にmobircのlibパスを環境変数に入れとく

    PERL5LIB=/path/to/mobirc/lib irssi

    とか。同じ意味なら何でも。

  • irssi起動したらmobirc.plをロードする ( /script load mobirc )

    ここで Can't locate XXX.pm in @INC とか言われる場合モジュール足りないのでそれいれる。

  • ロードしたら config.yaml 自分用にいじって、そのパスをirssiで設定する

    /set mobirc_config_path /path/to/config.yaml

  • 設定完了したら /mobirc start すると HTTPD がたちあがる

  • mobirc started ってirssiコンソールに出てればOK。httpでつないで確認する。

とかでOK。

ほか機能としては、

  • /mobirc stop でhttpd停止。
  • /mobirc stop -> /mobirc start でyaml読み直してHTTPD再起
  • /set mobirc_auto_start on しておけば次回から /script load mobirc するだけでHTTPDたちあがる
  • /script load するのさえめんどいというひとはスクリプトを ~/.irssi/scripts におくかわりに ~/.irssi/scripts/autorun におけば irssi 起動時に自動起動する

という感じ。irssi使いには必須のスクリプトかと思います!

Enjoy!

by typester / at 2007-11-01T12:13:00 / perl · irssi / Comment

mobirc クールすぎる

mobirc 0.01 released - TokuLog 改め だまってコードを書けよハゲ

すばらしすぎる!

ソース見ると、IRCクライアント部分とHTTPD部分わかれてるから、IRCクライアント部分を丸々irssiプラグインで置き換えるのも簡単にできそう。

irssi使うようになってからtiarraみたいなプロクシを使わなくなったので、irssiプラグインだけでkeitairc見たいの作りたかったんだよなー。tokuhirom++

てわけで日本シリーズ見ながら作ってみた。

mobirc.pl

こんなんで一応動く。

irssiプラグイン内でPOEセッション(POE::Session::Irssi)作って、その中で Mobirc::HTTPD 動かしてる。

動くことは動くけど、設定決め打ちだし、unloadもできないのでプラグイン再起動イコールirssi再起動で、まだ実用には耐えない。

とりあえず動くことはわかったのであとは暇なときにでも。

by typester / at 2007-10-29T01:49:00 / perl · irssi / Comment

IRCで呼ばれたらIMで通知するirssiスクリプト

僕は以前からIRCでキーワード反応した時に GNU screen のステータスコードに通知を出すようにしている のだけど、ターミナル見てないときがつかないので、またまた im.kayac.com をつかって、IMに通知する irssi のスクリプトを書いてみた。

http://coderepos.org/share/browser/lang/perl/irssi/scripts/hilight2im.pl

使い方は

/set im_kayac_com_username ユーザー名

で自分のim.kayac.comユーザー名をセットするだけ!

あとはirssiで設定したキーワード(irssiではhilightという)を含んだメッセージを受信するとIMに通知される。

by typester / at 2007-10-20T15:30:00 / perl · irssi / Comment

« Prev 1 2

(Page 1 of 2)