綾小路龍之介の素人思考

[weechat] fifoモジュールを使ってWeeChatプロセスの外部から命令を出す。

WeeChatの持つ機能のうち、かなり感動した部類に入るfifoモジュール。プロセス間通信として最もシンプルな名前付きパイプを生成してくれるので、このパイプに命令を流し込むことでWeeChatプロセスの外からWeechatに命令を出すことが出来る。

fifoモジュールの作る名前付きパイプは~/.weechat/ディレクトリの中にある。ファイル名はweechat_fifo_xxxxで、xxxxにはプロセス番号が入る。このファイルに対して適当な構文でweechatコマンドを書き込むと、結果がWeeChatに返される。結果を取り出せないのは問題あるかもしれないが、とりあえず命令だけは出せる。

$ ls ~/.weechat/weechat_fifo_* -la
prw------- 1 **** **** 0 2011-02-07 16:54 /*******/.weechat/weechat_fifo_8039

例えば以下の例は、irc.freenode.#weechat バッファでhelloと入力したことと等価である。

$ echo 'irc.freenode.#weechat *hello' >~/.weechat/weechat_fifo_8039

複数のコマンドを送ることも出来る。例えば以下の例は、irc.freenode.#weechat バッファでhelloと入力し、その後にguysと入力したことと等価である。この場合はechoコマンドに-eオプションをつけ、各コマンドの間を\nで繋げる。-eオプションはエスケープ文字の解釈を行うオプション

$ echo -e 'irc.freenode.#weechat *hello\nirc.freenode.#weechat *guys' >~/.weechat/weechat_fifo_8039

名前付きオプションが何処にあるかいちいち指定するのが面倒な場合は、以下のようなシェルスクリプトで~/.weechat/weechat_fifo_*にマッチするパイプにメッセージを送るように出来る。

$ cat ./auto_weechat_command
#!/bin/sh
if [ $# -eq 1 ]; then
    for fifo in ~/.weechat/weechat_fifo_*
    do
        echo -e "$1" >$fifo
    done
fi

前回同様、irc.freenode.#weechat バッファでhelloと入力するには、以下のようにする。

$ ./auto_weechat_command 'irc.freenode.#weechat *hello'

リファレンス

  1. WeeChat User’s Guide
  2. echo manpage - Google 検索
  3. Manpage of ECHO

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-09-23T17:10:12+09:00
  2. Modified: 2009-09-23T17:10:12+09:00
  3. Generated: 2017-09-07T23:09:20+09:00