This file describes Riece.

Copyright (C) 2003,2004,2005 Daiki Ueno.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the license is included in the section entitled "GNU Free Documentation License".

Riece user's manual
*******************

このマニュアルでは、Riece バージョン 1.0.8 について解説します。このマニュアルの他にも、Riece に関する情報は Riece の公式ホームページ http://www.nongnu.org/riece/ から得られるかもしれません。

Overview
********

Riece は IRC (Internet Relay Chat) でチャットを楽しむためのユーザインターフェースです。Riece は「りーす」と読みます。

Riece の主な特長は以下の通りです。

  * 複数の IRC サーバに同時に接続可能

  * アドオンにより機能の追加や取り外しが容易

  * 他の elisp パッケージに依存しないため、インストールが簡単

  * 設定が簡単で、前回起動時の設定を記録・復元する仕組みを提供

  * 段階的な操作説明書が附属

  * 最新の IRC のクライアントプロトコル (RFC2812) に準拠

Getting started
***************

Riece を起動する手順は次の通りです。

 1. M-x load-library riece

 2. M-x riece

もし (1) で Cannot open load file: riece のエラーが発生する場合にはインストールに失敗しています。自分でソースからインストールした場合には README をもう一度読み直してください。OS・ディストリビューションのパッケージからインストールした場合には、パッケージに含まれる文書をご確認ください。

Riece を起動すると、IRC サーバの名前を聞かれます。公共に利用可能な IRC サーバの一覧は Web ページなどから得ることができます。

  * http://irc.kyoto-u.ac.jp

  * http://freenode.net

また、以下のようなメッセージが表示されるかもしれません。

     Nickname "ueno" already in use.  Choose a new one:

IRC では、参加者を表すのにニックネームと呼ばれる短い呼称が使われます。もしニックネームが他の誰かに使用されている場合、別のニックネームを選ぶ必要があります。

無事に接続できたら、次は会話をしてみましょう。IRC ではチャンネルと呼ばれる仮想的な会議室に参加して会話を行ないます。チャンネルに入るには C-c j とタイプします。参加するチャンネル名を尋ねられたら、適切なチャンネル名を入力しましょう。IRCnet には #Riece というチャンネルがあるので、テストをしたい場合には自由にお使いください。

チャンネルに入ると、下の図に示すような 5 つのウィンドウ (まぎらわしいですが、Emacs の世界ではバッファを表示する領域をウィンドウと呼びます。)からなる画面に切り替わります。

     +-----+-----------------+
     |     |                 |
     |     |                 |
     | (1) |       (2)       |
     |     |                 |
     |     |                 |
     +-----+-----------------+
     |     |       (4)       |
     |     +-----------------+
     | (3) |                 |
     |     |       (5)       |
     |     |                 |
     +-----+-----------------+

(4) のウィンドウに表示されるバッファに文章を入力してリターンキーを押すと発言できます。他の参加者の発言は (2) のウィンドウに表示されます。

Basic usage
***********

Windows
=======

     +-----+-----------------+
     |     |                 |
     |     |                 |
     | (1) |       (2)       |
     |     |                 |
     |     |                 |
     +-----+-----------------+
     |     |       (4)       |
     |     +-----------------+
     | (3) |                 |
     |     |       (5)       |
     |     |                 |
     +-----+-----------------+

各ウィンドウに表示されるバッファの役割は以下の通りです。

 1. ユーザリストバッファ ( *Users*)。チャンネルに参加しているユーザのニックネームの一覧が表示されます。

 2. チャンネルバッファ ( *Channel:XXX*)。チャンネル内の会話が表示されます。

 3. チャンネルリストバッファ ( *Channels*)。自分が参加しているチャンネルの一覧が表示されます。

 4. コマンドバッファ (*Command*)。文章やコマンドを送信するために使います。

 5. アザーズバッファ ( *Others*)。現在選択中のチャンネル以外の会話が流れます。

Indicators
==========

モードラインの左端には、現在の自分の状態を示す印が表示されます。 (もし画像を表示できる Emacs をお使いなら、左端に "R" のアイコンが表示されます。)

     Riece: ---- ueno #Riece [n]

ここで、---- の部分には左から順に以下の意味があります。

 1. 離席状態 (離席していれば A)

 2. IRC オペレータ状態 (IRC ネットワークの管理者権限を持っていれば O)

 3. ウィンドウの自動スクロールの禁止 (完全に禁止していれば F、自分の次回の発言まで禁止しているのであれば f)

 4. チャンネルオペレータ状態 (チャンネルの管理者権限を持っていれば @)

Commands
========

Basic usageで文章を入力したバッファはコマンドバッファと呼ばれます。コマンドバッファからは文章を送信する以外に、様々なコマンドを発行することができます。以下に一部を挙げます。

最初はなかなか覚えにくいですが、C-h b (M-x describe-bindings) で使用可能なキー操作の一覧が表示されるので少しずつ覚えていくと良いでしょう。

IRC commands
------------

RET
     文章を送ります(riece-command-enter-message)

C-RET
     文章を NOTICE として送ります(riece-command-enter-message-as-notice)

C-c j
     チャンネルに参加します(riece-command-join)

C-c C-p
     チャンネルから離脱します(riece-command-part)

C-c p
     宛先を指定して現在の行を送ります(riece-command-enter-message-to-user)

C-c q
     IRC をやめます(riece-command-quit)

C-c n
     自分のニックネームを変更します(riece-command-change-nickname)

C-c f
     ユーザの情報を調べます(riece-command-finger)

C-c C-k
     ユーザをチャンネルから蹴り出します(riece-command-kick)

C-c i
     ユーザをチャンネルに招待します(riece-command-invite)

C-c l
     パターンに対して LIST を発行します(riece-command-list)

C-c C-n
     パターンに対して NAMES を発行します(riece-command-names)

C-c w
     パターンに対して WHO を発行します(riece-command-who)

C-c t
     チャンネルのトピックを設定します(riece-command-topic)

C-c C-m
     チャンネルのモードを設定します(riece-command-change-mode)

C-c o
     ユーザにチャンネルの管理者権限を与えます。C-u C-c o では逆に、ユーザからチャンネルの管理者権限を奪います(riece-command-set-operators)

C-c v
     ユーザにチャンネルでの発言権を与えます。C-u C-c v では逆に、ユーザからチャンネルでの発言権を奪います(riece-command-set-speakers)

C-c V
     Riece のバージョンを表示します。(C-u C-c V) で、より詳細な情報を表示します。

C-c /
     IRC コマンドを直接送ります(riece-command-raw)

Window manipulating commands
----------------------------

C-c r
     フレーム全体を再描画します(riece-command-configure-windows)

C-c C-j または C-c >
     チャンネル一覧で次のチャンネルを選択します(riece-command-next-channel)

C-c <
     チャンネル一覧で前のチャンネルを選択します(riece-command-previous-channel)

C-c ^
     アドオンの一覧を表示します(riece-command-list-addons)

C-c 数字
     チャンネル一覧で N番目のチャンネルを選択します(riece-command-switch-to-channel-by-number)

C-c C-c 数字
     チャンネル一覧で N + 10番目のチャンネルを選択します(riece-command-switch-to-channel-by-number)

C-c Home
     チャンネルバッファ、またはダイアログバッファを上端までスクロールします(riece-command-beginning-of-buffer)

C-c $
     チャンネルバッファ、またはダイアログバッファを下端までスクロールします(riece-command-end-of-buffer)

C-c SPC
     チャンネルバッファ、またはダイアログバッファを上方向にスクロールします(riece-command-scroll-up)

C-c DEL
     チャンネルバッファ、またはダイアログバッファを下方向にスクロールします(riece-command-scroll-down)

Status toggle commands
----------------------

C-c C-t c
     チャンネルバッファの表示・非表示を切り替えます(riece-command-toggle-channel-buffer-mode)

C-c C-t C
     チャンネルリストバッファの表示・非表示を切り替えます(riece-command-toggle-channel-list-buffer-mode)

C-c C-t u
     ユーザリストバッファの表示・非表示を切り替えます(riece-command-toggle-user-list-buffer-mode)

C-c C-t f
     チャンネルバッファ、またはダイアログバッファの自動スクロールを禁止します(riece-command-toggle-freeze)

C-c C-t o
     チャンネルバッファ、またはダイアログバッファを、自分が発言するまで、自動スクロールを禁止します(riece-command-toggle-own-freeze)

C-c C-t a
     自分の離席状態を切り替えます(riece-command-toggle-away)

Advanced usage
**************

この章では、もっと進んだ使い方を解説します。

Startup file
============

この章では、設定ファイルについて解説します。Riece の設定は Emacs の設定支援機能を用いて M-x customize-group riece で行なえますが、 Riece に固有の設定はなるべく ~/.riece/init に書くことを勧めます。

また、Riece を使い始めると ~/.riece/save というファイルが作成されます。このファイルには前回起動時の設定の一部(ウィンドウ構成等)が自動的に保存されます。

起動時には、最初に ~/.riece/save を、次に ~/.riece/initを読み込みます。つまり、前回のセッションで ~/.riece/save に保存された内容は、~/.riece/init の内容で上書きされます。

Server settings
===============

起動時に接続する IRC サーバの名前は変数 riece-server で指定します。

riece-server の形式は次の通りです。

     <サーバのホスト名>:<ポート番号>[:<パスワード>]

riece-server-alist を設定すると、より複雑な指定が可能になります。

以下の例を考えます。

     (setq riece-server-alist
           '(("foo" :host "irc.example.com" :coding shift_jis)
             ("bar" :host "irc.example.net" :nickname "baz")))

     (setq riece-server "foo")

この設定の意味は以下の通りです。

  * foo という名前の IRC サーバのホスト名は irc.example.com で、使用する文字コードは Shift_JIS

  * bar という名前の IRC サーバのホスト名は irc.example.com で、このサーバではニックネーム baz を使う

指定できるキーワードの一覧は以下の通りです。

:host
     サーバのホスト名または IP アドレス

:service
     サーバのサービス名またはポート番号 (デフォルトは 6667)

:nickname
     接続時のニックネーム

:username
     接続時のユーザネーム

:password
     接続時のパスワード

:function
     接続用関数

:coding
     コーディングシステム (デフォルトは riece-default-coding-system の値)

Connecting to multiple servers
==============================

同時に複数のサーバに接続する手順を以下に示します。

既に特定のサーバに接続している状態で、別のサーバに接続するには C-c O (riece-command-open-server) を使います。

別のサーバ上のチャンネルに参加するには、C-c j (riece-command-join)でチャンネル名にサーバ名を続けます。

たとえば、サーバ irc.freenode.net 上の #Riece は次のように表記します。

     #Riece@irc.freenode.net

複数の接続を操作するコマンドを以下にまとめます。

C-c O
     別のサーバに接続します(riece-command-open-server)

C-c C
     サーバとの接続を切断します(riece-command-close-server)

C-c M
     特定のサーバに対して、続くコマンドを発行します(riece-command-universal-server-name-argument)

Add-ons
=======

Riece では、ユーザが新たな機能を追加し、自由に取り外しできるよう、アドオンと呼ばれる機構を用意しています。アドオンは通常の elisp モジュールを拡張したもので、ロードの順番だけではなく、初期化処理の依存関係も記述することができます。

現在、以下のモジュールがアドオンとして実装されています：

riece-highlight
     バッファの色付け

riece-ctcp
     CTCP (Client To Client Protocol)

riece-url
     会話に現れた URL の収集

riece-unread
     発言のあったチャンネルに!マークをつける

riece-rdcc
     DCC (Direct Client to Client protocol) によるファイル転送 (Ruby による実装)

riece-ndcc
     DCC (Direct Client to Client protocol) によるファイル転送 (Emacs 21.3 の make-network-process による実装)

riece-mini
     ミニバッファのみで IRC をする

riece-log
     会話のログの収集

riece-doctor
     doctor.el と連携して精神科医になりすます

riece-alias
     チャンネル名やニックネームの別名を定義

riece-skk-kakutei
     SKK 使用時に変換モードの印を発言から取り除く

riece-foolproof
     チャンネルミスを防ぐ

riece-guess
     色々な方法で移動先のチャンネルを推測

riece-history
     チャンネル移動の履歴管理

riece-button
     ボタンやポップアップメニューの表示

riece-keyword
     キーワードの強調表示

riece-menu
     メニューバーにメニューを登録

riece-async
     Emacs が busy or suspend 状態になることに備え、 PING に応答する local proxy 経由で IRC サーバに接続

riece-lsdb
     アドレス帳 LSDB (Lovely Sister Database) http://lsdb.sourceforge.jp と連携

riece-xface
     ユーザリストバッファにユーザの X-Face を表示

riece-ctlseq
     コントロールシーケンス (^B など) による強調表示

riece-ignore
     指定したユーザの発言を無視

reice-hangman
     チャンネル内で hangman(6) で遊ぶ

riece-biff
     他のバッファにいる時に発言があるとモードラインに印 ("[R]") を表示

riece-kakasi
     日本語の通らない端末で、日本語をローマ字で表示

riece-yank
     C-c y で kill-ring から文字列を送信

riece-toolbar
     ツールバーを表示

riece-eval
     入力された文字列を lisp オブジェクトとして評価

riece-google
     キーワードを Google で検索

riece-keepalive
     IRC サーバとの接続を保持

これらのうち、riece-highlight と riece-ctcp、 riece-url、 riece-unread、 riece-guess、 riece-history、 riece-button、riece-menu、 riece-ignore、riece-log、riece-alias、 riece-ctlseq、riece-keyword はデフォルトで組み込まれています。

アドオンを組み込むには riece-addons を設定します。たとえば riece-alias を組み込む場合には、~/.riece/init に以下のように記述します。

     (add-to-list 'riece-addons 'riece-alias)

Tips
****

この章では、よく聞かれる質問に対する答えと便利な設定例を紹介します。

チャンネル名「#foo:*.jp」を「%foo」と略記したい
==============================

以下の行を ~/.riece/init に追加します。riece-alias アドオンを使うとチャンネル名やニックネームの別名を定義することができます。

     (add-to-list 'riece-addons 'riece-alias)

直前に選択していたチャンネルに移動したい
====================

以下の行を ~/.riece/init に追加することで、C-c g で履歴を辿りつつ移動できます。riece-guess アドオンは、チャンネル選択の履歴や未読メッセージの有無などから次に選択するチャンネルを推測してくれるアドオンです。

     (add-hook 'riece-guess-channel-try-functions
               'riece-guess-channel-from-history)

発言があるとバッファがスクロールするのを止めたい
========================

C-c C-t f です。toggle freeze と覚えると良いでしょう。

装飾を抑制したい
========

riece-addons から装飾のためのアドオンを除外します。通常有効になっている装飾のためのアドオンは次の通りです。

  * 色付け (riece-highlight)

  * ボタン表示 (riece-button)

  * アイコン画像の表示 (riece-icon)

たとえば色付けをやめたいのであれば、以下の行を ~/.riece/init に追加します：

     (setq riece-addons (delq 'riece-highlight riece-addons))

特定の文字列を受信したら音を鳴らしたい
===================

以下の設定を ~/.riece/init に加えます。riece-keywords アドオンを使うと特定の文字列を受信した際の動作を指定できます。

     (setq riece-keywords '("ほげ" "ふが"))
     (add-hook 'riece-keyword-notify-functions
               (lambda (keyword message) (ding)))

SKK を使っていて、変換中の印 (▽) を送信してしまうことがある
==================================

以下の行を ~/.riece/init に追加します。

     (add-to-list 'riece-addons 'riece-skk-kakutei)

チャンネル一覧の並び順を固定したい
=================

以下の行を ~/.riece/init に追加します。

     (setq riece-default-channel-binding
          '("#Riece" "#emacsen" nil "#debianjp"))

この設定例では、チャンネル一覧の並び順は次のようになります。

 1. #Riece

 2. #emacsen

 3. なし

 4. #debianjp

3 番目のチャンネルが空席となっていることにご注意ください。新たなチャンネルに参加した場合、そのチャンネルが 3 番目の位置に割当てられます。

起動時に自動的にチャンネルに参加したい
===================

変数 riece-startup-channel-list を設定します。

     (setq riece-startup-channel-list
          '("#Riece" "#public"))

この設定例は、#Riece と #public に参加することを意味しています。チャンネルに参加する際にパスワードが必要な場合には次のように設定します。

     (setq riece-startup-channel-list
          '("#Riece" "#public" ("#private" "password")))

起動時に、複数の IRC サーバのチャンネルに参加する場合には、変数 riece-startup-server-list も同時に設定する必要があります。

起動時に自動的に複数の IRC サーバに接続したい
=========================

変数 riece-startup-server-list を設定します。

     (setq riece-server "ircnet"
           riece-server-alist '(("ircnet" :host "irc.tokyo.wide.ad.jp")
                                ("freenode" :host "irc.ipv6.freenode.net")))

この設定例では、起動時に "ircnet" に接続します。 riece-startup-server-list を以下のように設定すると、 "freenode" にも接続するようになります。

     (setq riece-startup-server-list '("freenode"))

起動時に、複数の IRC サーバのチャンネルに参加する場合には、変数 riece-startup-channel-list も同時に設定する必要があります。

HTTP プロキシを介して IRC サーバに接続したい
===========================

relay.el と connect.c を使うと、 HTTP プロキシを介して IRC サーバに接続することができます。

relay.el
     http://www.taiyo.co.jp/~gotoh/lisp/relay.el

connect.c
     http://www.taiyo.co.jp/~gotoh/ssh/connect.html

たとえば、proxy.example.com:8080 経由で irc.tokyo.wide.ad.jp に接続する場合には、以下の行を ~/.riece/init に追加します。

     (require 'relay)
     (setq relay-command-alist (cons '("^irc\.tokyo\.wide\.ad\.jp$"
                                       "connect" "-H" "proxy.example.com:8080"
                                       host service)
                                     relay-command-alist)
           riece-server-alist (cons '("proxy-tokyo" :host "irc.tokyo.wide.ad.jp"
                                      :function relay-open-network-stream)
                                    riece-server-alist))

会話のログをファイルに保存したい
================

以下の行を ~/.riece/init に追加します。riece-log アドオンを使うと、会話のログをファイルに保存し、再起動時に参照できます。

     (add-to-list 'riece-addons 'riece-log)

通常は ~/.riece/log の下に IRC サーバの名前、チャンネル名のディレクリが作成され、その中に日にち毎に分別されて保存されます。

ディレクトリ名が文字化けする場合には、 file-name-coding-system の値を適切に設定するか、あるいは riece-log-directory-map を使ってチャンネル名を US-ASCII 文字列に変換する必要があります。

     (setq riece-log-directory-map '(("#りーす" . "riece")))

ウィンドウ間を自由に移動したい
===============

GNU Emacs に附属の windmove.el を使うと便利です。詳細は windmove.el のコメントを参照ください。windmove.el は作者のページ (http://hovav.net/elisp/) からも取得できます。

Development
***********

この章では、Riece の開発プロセスや内部構造など、開発に必要な情報をまとめています。開発に参加していただける方を募集しています。

CVS
===

Riece の開発は CVS を利用して行っています。CVS サーバから最新のスナップショットを取得するには以下のようにします。

 1. CVS サーバへのログイン

          cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
          CVS password: [CR] # NULL string

 2. モジュールのチェックアウト

          cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root checkout riece

 3. configure の生成

          autoreconf -f -i -v

Debugging
=========

riece-debug を t に設定すると、デバッグ出力が有効になります。また、サーバからの生の出力が " *IRC*[<サーバ名>]" バッファに消されずに残ります。

Modules
=======

基本的に依存関係の上位にあるものから：

riece-globals
     大域変数の定義

riece-options
     ユーザオプションの定義

riece-version
     バージョンの定義

riece-coding
     コーディングシステム関連の関数の定義

riece-complete
     ミニバッファでの補完を助ける関数の定義

riece-addon
     アドオン管理

riece-mode
     channel/user のモード管理

riece-identity
     channel/user object の大域表記を操作する関数の定義

riece-channel
     channel object 関連の定義

riece-user
     user object 関連の定義

riece-misc
     雑多な関数の定義

riece-signal
     シグナル(see Signals)管理

riece-layout
     ウィンドウレイアウト管理

riece-display
     表示用バッファの管理

riece-server
     IRCサーバとの接続管理

riece-naming
     名前管理のための mediator のようなもの

riece-message
     message object 関連の定義

riece-filter
     プロセスフィルタのエントリポイント

riece-handle
     通常のメッセージのハンドラ。riece-filter から呼ばれる

riece-000
     000番台の numeric reply のハンドラ。riece-filter から呼ばれる

riece-200
     200番台の numeric reply のハンドラ。riece-filter から呼ばれる

riece-300
     300番台の numeric reply のハンドラ。riece-filter から呼ばれる

riece-400
     400番台の numeric reply のハンドラ。riece-filter から呼ばれる

riece-500
     500番台の numeric reply のハンドラ。riece-filter から呼ばれる

riece-commands
     コマンドの定義

riece-irc
     IRC プロトコルインターフェース

riece
     エントリポイント。各バッファのモード定義など

Namespace management
====================

Riece は複数のサーバに同時に接続するため、サーバ毎に別々の名前空間を管理しています。この名前空間には、サーバのプロセスに結び付けられたバッファのローカル変数を介してアクセスします。

Obtaining server buffer
-----------------------

サーバのプロセスを得るには、まずはじめにサーバの名前を得る必要があります。サーバの名前は以下に挙げるいくつかの方法で取得できます。

 1. 大域変数 riece-overrinding-server-name の値

 2. riece-server-name がカレントバッファのローカル変数であるならば、既にプロセスのバッファにいるとみなせるので、riece-server-name の値そのもの

 3. riece-identity オブジェクトに結び付けられたサーバ名(後述)

こうして得たサーバ名で riece-server-process を呼出し、サーバのプロセスを取得します。

Identity
--------

複数のサーバに繋いだ場合、チャンネル名やニックを(サーバのバッファ上だけではなく)大域的に区別する必要が生じます。このような名前を表現するのが riece-identity オブジェクトです。

riece-identity オブジェクトは以下の 2 つの要素をもつベクターです。

prefix
     サーバローカルな名前

server
     サーバの名前

riece-identity オブジェクトに対する操作には以下のようなものがあります。

 -- Function: riece-make-identity prefix &optional server
     riece-identity オブジェクトを作成します。server が省略された場合には、 riece-find-server-name を使って取得したサーバ名を使います

 -- Function: riece-identity-prefix identity
     riece-identity オブジェクトからサーバローカルな名前を取り出します。

 -- Function: riece-identity-server identity
     riece-identity オブジェクトからサーバの名前を取り出します。

 -- Function: riece-identity-equal ident1 ident2
     2 つのriece-identity オブジェクトが同等か調べます。

 -- Function: riece-identity-equal-no-server ident1 ident2
     2 つのriece-identity オブジェクトのサーバローカルな名前が同等か調べます。

 -- Function: riece-identity-member elt list
     riece-identity オブジェクト ELT が LIST に含まれるか検査します。

Channel and user management
---------------------------

riece-identity オブジェクトによって識別される IRC のチャンネルとユーザはそれぞれ riece-channel オブジェクトと riee-user オブジェクトにより表現されます。

Channels
........

riece-channel は、IRC のチャンネルを表すオブジェクトです。以下の要素を持ちます。

users
     参加しているユーザの名前(局所名)のリスト

operators
     オペレータ権限をもつユーザの名前のリスト

speakers
     発言権をもつユーザの名前のリスト

modes
     チャンネルのモード(文字のリスト)

banned
     MODE +b で指定されたパターンの一覧

invited
     MODE +I で指定されたパターンの一覧

uninvited
     MODE +e で指定されたパターンの一覧

Users
.....

riece-user は、IRC に参加しているユーザを表すオブジェクトです。以下の要素を持ちます。

channels
     参加しているチャンネルの名前(局所名)のリスト

user-at-host
     "<user>@<host>" の形で与えられるユーザの情報

modes
     ユーザのモード(文字のリスト)

away
     AWAY 中かどうか

Mediator
........

チャンネルとユーザの参加・離脱を管理するために、 riece-naming という上位のモジュールを用意しています。これは、デザインパターンでいうところの Mediator パターンに相当するものです。

riece-naming を介することで、前述のチャンネル・ユーザオブジェクトに直接手を触れることなく、名前空間に安全にアクセスすることができます。

提供する主な関数は以下の 3 つです。

 -- Function: riece-naming-assert-join user-name channel-name
     ユーザがチャンネルに参加したことを表明します

 -- Function: riece-naming-assert-part user-name channel-name
     ユーザがチャンネルから離脱したことを表明します

 -- Function: riece-naming-assert-rename old-name new-name
     ユーザの名前が変更されたことを表明します

Signals
=======

画面の再描画を効率良く行うために、イベントと描画対象のオブジェクト(バッファや、モードラインの印 see Indicators)を結び付けるメカニズムを用意しています。

何らかのイベントが発生すると、シグナルが送出されます。シグナルの概念は、 Qt や GTK+ といった GUI ツールキットに用意されているものと同様です。

シグナルを送出するには、riece-emit-signal を使います。

 -- Function: riece-emit-signal signal-name &rest args
     SIGNAL-NAME で指示されるシグナルを、引数 ARGS とともに送出します

シグナルに応答するには、riece-connect-signal を使います。

 -- Function: riece-connect-signal signal-name slot-function &optional filter-function handback
     SIGNAL-NAME で指示されるシグナルに応答する関数 SLOT-FUNCTION を結び付けます。SLOT-FUNCTION に指定された関数は 2 つの引数を取ります。第1の引数ははシグナルを表します。また、第2の引数として、 HANDBACK 引数に与えられたオブジェクトがそのまま渡されます。

     FILTER-FUNCTION は、受信したシグナルに応答すべきかどうかを判定する関数です。この関数は引数としてシグナルオブジェクトを受け取り、nil または t を返すことが期待されます。返り値が nil の場合には、 SLOT-FUNCTION が呼ばれることはありません。

シグナルオブジェクトにアクセスするには、以下の関数を使います。

 -- Function: riece-signal-name
     シグナルの名前(シンボル)を返します。

 -- Function: riece-signal-args
     シグナル送出時に与えられた引数を返します。

現在、以下のシグナルが標準で登録されています：

channel-list-changed
     参加しているチャンネルの一覧の変化

user-list-changed
     チャンネルの参加者一覧の変化 (引数はチャンネルに相当する riece-identity オブジェクト)

channel-switched
     現在のチャンネルを移動

user-joined-channel
     ユーザがチャンネルに参加 (引数は、ユーザおよびチャンネルに相当する riece-identity オブジェクト)

user-left-channel
     ユーザがチャンネルから離脱 (引数は、ユーザおよびチャンネルに相当する riece-identity オブジェクト)

user-renamed
     ユーザが名前を変更 (引数は、以前と現在の名前に相当する riece-identity オブジェクト)

user-away-changed
     ユーザの離席状態の変化 (引数は、ユーザに相当する riece-identity オブジェクト)

user-operator-changed
     ユーザのオペレータ状態の変化 (引数は、ユーザに相当する riece-identity オブジェクト)

channel-topic-changed
     チャンネルのトピックの変化 (引数は、チャンネルに相当する riece-identity オブジェクト)

channel-modes-changed
     チャンネルのモードの変化 (引数は、チャンネルに相当する riece-identity オブジェクト)

channel-operators-changed
     チャンネルでオペレータ権限を持つユーザの一覧の変化 (引数は、チャンネルに相当する riece-identity オブジェクト)

channel-speakers-changed
     チャンネルで発言権を持つユーザの一覧の変化 (引数は、チャンネルに相当する riece-identity オブジェクト)

buffer-freeze-changed
     バッファの凍結状態の変化 (引数はバッファ)

Writing add-ons
===============

アドオンの条件を満たすモジュールは以下の関数を提供します。

<モジュール名>-requires
     依存する他のアドオン(シンボルのリスト)を返します(オプション)

<モジュール名>-insinuate
     初期化処理を行います

また、アドオンの説明を、変数 <モジュール名>-description に設定することもできます。この文字列は M-x riece-command-list-addons によるアドオンの一覧表示に使われます。

有効化・無効化に対応したアドオンは、変数 <モジュール名>-enabled に現在の状態を保持します。値が nil であれば無効、t であれば有効です。加えて、以下の関数を提供します。

<モジュール名>-enable
     アドオンを有効にします

<モジュール名>-disable
     アドオンを無効にします

Riece は起動時に以下の処理を行います。

 1. 変数 riece-addons に列挙されたモジュールを読み込む

 2. それぞれのモジュールに対し、<モジュール名>-requires が用意されていれば呼び出して依存グラフを作る

 3. 依存グラフに対してトポロジカルソート (cf. tsort(1)) を行う

 4. 得られた依存順序に従って <モジュール名>-insinuate 呼び出す

 5. もし、アドオンが有効化・無効化に対応しており、明示的に無効化されていなければ、 <モジュール名>-enableを呼び出す。

作成したアドオンは、load-path の通ったディレクトリ、または riece-addon-directory (デフォルトでは ~/.riece/addons/) に置くことで組み込み可能な状態になります。

Handler hooks
=============

Riece には、ハンドラフックと呼ばれる特殊なフックがあります。これらは IRC のメッセージを受け取った前後で実行されるフックです。

説明のために message を IRC のメッセージ名(PRIVMSG など)を全て小文字にしたものとします。

riece-<message>-hook
     message が届いたときに最初に呼ばれるフック

riece-after-<message>-hook
     message の処理が終わった後に呼ばれるフック

ここで riece-<message>-hook の返り値には意味があり、非 nil を返すものがあれば、その後の処理をおこないません。また、その場合には riece-after-<message>-hook も呼び出されません。

フックの引数は RFC2812 の prefix と Parameters に相当する 2 つの引数が渡ります。