2014年6月17日火曜日

GNU Screenのwindowリストを配列操作するモジュールを書いた

動機

windowを任意の場所に追加できないことが不満だった。歯抜けのwindow番号があるときにwindowを追加すると歯抜けの中で一番若い番号に作成される。作成後に移動できるがコマンドが覚えられないし、手間がかかる。また歯抜け状態を一括で無くしたいとも思っていた。

仕様

windowリストを配列のように操作できること。歯抜けの部分はnullが格納されている要素と考える。メソッドはpush,insert,compactの3種類。
insertは引数を伴わない場合は現在選択しているwindowの番号+1がデフォルト値になる。

実装方法

screen -Q [command] の出力をパースすることで歯抜けの状態や、現在選択しているwindowを知ることができる。この情報を元にwindowリストを操作する。
言語はPerl。コアモジュールのみ使用している。

使い方

インストール
cpanm Term::GnuScreen::WindowArrayLike;
もしくはMinillaを使用しているのでgithubからリポジトリを取得してminil install。 Qオプションがない場合、新しいバージョンのscreenをインストールしてください。
screenから呼び出し

    # .screenrc
    # push is [C-t l p]
    escape ^Tt
    bind  l command -c window_array_like
    bind  -c window_array_like  p exec perl -e 'use Term::GnuScreen::WindowArrayLike; Term::GnuScreen::WindowArrayLike->new->push'
.screenrcを設定して任意のキーに割り当てて使用する。上記はC-t + l + p でpushメソッドが実行される。
このように2キー(lとp)を登録したい場合は、-cで任意のクラス名を割り当てて使用する。

TODO

insertに任意の引数を渡せるようにする.screenrc設定がわからない
screenコマンドが遅い


2014年6月10日火曜日

cpandocをキャッシュするモジュールを書いた

動機

 cpandocはモジュールをインストールしなくても素早くドキュメントや実装が見れて便利だし、cpandoc -c でchangesが見られるのも素晴らしい。
 しかしネット経由なので3秒ほどかかる。1回だけならいいが数分の間に何回も見ることがあるので、そうなると毎回3秒待たされるのは辛い。

仕様

 ローカルマシンにcpandocがfetchしてきた情報をキャッシュします。キャッシュ期限は24時間です。それより早く消したいことも稀にあると思いますが、その場合はキャッシュファイルを削除してください。

使い方

 使い方は、SYNOPSISに書いてある通りですが、

$ cpanm Pod::Cpandoc::Cache
$ ccpandoc Acme::No
$ ccpandoc -m Acme::No
$ ccpandoc -c Acme::No

 # support Pod::Perldoc::Cache
$ ccpandoc -MPod::Perldoc::Cache -w parser=Pod::Text::Color::Delight Acme::No

コマンド名由来

ccpandocという名にした理由は、出来るだけ短い名前が良い、かつmcpandocという名が存在するので合わせた形です。aliasを設定すればいいといえ、各マシンで設定するのは面倒くさいので出来るだけ短いほうが良かった。

追記
metacpanへのリンク