Liece 説明書
*********

この文書では Liece バージョン 1.4 について解説します。 Liece に関する主要な情報は Liece の公式ホームページ (http://www.unixuser.org/~ueno/liece/) に反映されることでしょう。

はじめに
****

Liece は GNU Emacs 上で動作する IRC (Internet Relay Chat, RFC 1459)のクライアント実装です。

Liece の主な特徴は以下の通りです。

  * CHOCOA 1.0 に似た操作感

  * 各 Emacs 毎に最適化された軽快な動作

  * 強力なユーザ補助

  * 簡単な設定と、豊富な API

  * クライアント - クライアント間の暗号化機能

  * 動的に変更可能な、スタイルベースのウィンドウ構成機能

  * 動的に変更された設定の自動保存機能

  * 自動的に話者の動向を調査する擬似アウェアネス機能

  * URL の自動収集機能

動作環境
****

現在のバージョン(1.4)の動作が確認されている環境は以下の通りです。

  * Standard Emacs 20.6 :-)

  * XEmacs 21.2 (beta32)

  * Mule 2.3 (based on Emacs 19.34) with new custom package

入手方法
****

Liece の開発には CVS (Concurrent Versions System) が用いられています。しばしば大規模な変更がなされた場合にのみ、リリースの配布が行われます。配布は HTTP により取得することができます。

リリースの入手方法
=========

  * http://www.unixuser.org/~ueno/liece/liece-VERSION.tar.gz

CVS でのファイルの入手方法
===============

匿名 CVS サーバへのログイン
----------------

     % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login

     CVS password: [CR] # NULL string

モジュールの checkout
---------------

     % cvs -d :pserver:anonymousl@cvs.m17n.org:/cvs/root checkout liece

導入方法
****

準備
==

Liece のインストールには以下の配布が別途必要になります。

APEL (A Portable Emacs Library)
     ftp://ftp.m17n.org/pub/mule/apel/

custom
     http://www.dina.kvl.dk/~abraham/custom/

custom は、最近の Emacs の配布に含まれています。 APEL に関しては、最新のバージョンのご利用をお勧めします。 (リリースの配布には、その時点で対応する最新の APEL が含まれています。)

コンパイル
=====

コンパイルの手順を簡単に説明します。詳しくは同梱の INSTALL を参照してください。

     % ./configure
     % make
     % su
     Password: ultrasecret
     # make install

XEmacs の package としてインストールするには、以下のようにします。

     % ./configure --enable-package --with-emacs=xemacs
     % make
     % su
     Password:
     # make install

[コンパイル時の警告について]

     コンパイル時に `... not found' や `BROKEN FACILITY DETECTED:' などの警告が表示される場合がありますが、特に問題はありません。

.emacs の設定
==========

(XEmacs の package としてインストールした場合には、何も記述する必要はありません。この節は読み飛ばして下さい。)

Emacs もしくは Mule をお使いなら、APEL 及び Liece を install した場所を subdirs.el に以下のように指定して下さい。

     (normal-top-level-add-to-load-path '("apel" "liece"))

Emacs 20.3 以降の Emacs、もしくは XEmacs をお使いなら、

     (normal-top-level-add-subdirs-to-load-path)

と書くだけで良いでしょう。

Emacs 19 以前のバージョンの Emacs で使用する場合には、より直接的なパスの指定が必要になります。

最後に、以下の一行を加えて下さい。

     (autoload 'liece "liece" nil t)

~/.liece の設定
============

配布中の doc ディレクトリから sample.dot.liece を ~/.liece/init.el としてコピーして編集します。

各種設定の解説はサンプルファイルのコメントを参照してください。ほとんどの設定項目は、M-x customize により設定することもできます。

コマンドラインオプションにより複数の設定ファイルを使い分けるには、以下のようにします。

     % emacs -f liece ~/.liece.local

使用方法
****

既に CHOCOA や liece をお使いになられたことのある方は、大体の操作はお分かりだと思います。

操作は少しずつ異なりますが、irchat の使い方 http://irc.kyoto-u.ac.jp/irchat.html が参考になるかも知れません。

起動と接続
=====

Emacs を立ち上げたら、M-x liece とタイプして Liece を起動します。

接続先のサーバ、自分のニックネーム、自己紹介などの接続に必要な情報が .lieceに設定されていなければ、最初にいくつかの質問をされます。

 -- Variable: liece-server
     接続先サーバ (文字列または plist) Connection types (Connection types)

 -- Variable: liece-service
     ディフォルトのポート番号(整数値)またはサービス名(文字列)通常は LIECE-SERVER の設定により上書きされる

 -- Variable: liece-nickname
     ニックネーム(文字列)

 -- Variable: liece-name
     WHOIS で表示されるユーザ名(文字列) (例: "Daiki Ueno")

 -- Variable: liece-connection-timeout
     接続時のタイムアウト。単位は秒。

挙動を監視する
=======

ある特定のユーザについてその挙動を監視することができます。

C-c C-i a (liece-command-activate-friends)
     監視機能を有効にし、同時に対象ユーザ一覧への登録を行う

C-c C-i d (liece-command-deactivate-friends)
     監視機能を無効化する

C-c C-i s (liece-command-display-friends)
     現在の不在状況を表示

ウィンドウスタイル
=========

Liece ではウィンドウの分割をウィンドウスタイルと呼ばれる機構により柔軟にカスタマイズできます。

ウィンドウスタイル自体は

     liece-window-style-directory

で指定されるディレクトリ内に含まれるファイルであり、その中身は概ね emacs lisp で書かれています。

指定する際には、上述のディレクトリに含まれるファイル名として指定する事になります。

     (setq liece-window-default-style "middle")

ウィンドウスタイルの記述
------------

好みのウィンドウスタイルを作成するには、もとになる適当なウィンドウスタイルを決め、別のファイル名にコピーすることから始めると良いでしょう。(例: "mystyle")

このファイルは elisp のマクロを含む構文で書きます。マクロ

     liece-window-add-style

は新規に状態付きバッファ分割を定義します。

標準で定義されている状態変数は、以下の 4つです。

command-buffer-mode
     チャンネル/プライベート

channel-buffer-mode
     チャンネルバッファの表示/非表示

nick-buffer-mode
     ニック一覧バッファの表示/非表示

channel-list-buffer-mode
     チャンネル一覧バッファの表示/非表示

状態指定の例として以下の設定を示します。

     (command-buffer-mode . any)
     (channel-buffer-mode . t)
     (nick-buffer-mode . t)
     (channel-list-buffer-mode . nil)

この例では、以下の状態でのウィンドウ構成を定義することを示します。

  * プライベートモードの状態は問わず、

  * チャンネルバッファを使用し、

  * ニック一覧バッファを使用し、

  * チャンネル一覧バッファを使用しない

ウィンドウ再編成述語
..........

ウィンドウ構成を再計算した結果が現在のウィンドウ構成と全く同じ場合、ウィンドウの再分割には軽視できないコストがかかります。

そこで、ウィンドウの再編成が必要であるかを調べるガードを状態変数と同列に指定することができます。

     (reconfiguration-predicate . func)

この例で指定された funcは 0引数の関数であり、 liece-window-define-reconfiguration-predicateにより定義がなされます。この定義はスタイルファイルに直接書く事ができます。

ウィンドウ構成
.......

例として一番単純な分割 (ダイアログバッファとコマンドバッファのみ) の記述を示します。

     (configuration (vertical 1.0 (dialogue 1.0) (command 3 point)))

この例では以下のウィンドウ構成を定義したことになります。

 1. ウィンドウ全体を垂直に(vertical)2つに分割し、

 2. ダイアログバッファを上方に作成し、 command バッファを取り去った残りのサイズを割当てる。

 3. その下に、3行(実際には2行)のコマンドバッファを用意し、最終的にカーソルをそのバッファに移動する(point)。

このウィンドウスタイルを選択すると、画面上では以下の構成になります。

     +----------------+
     |                |
     | ダイアログ     |
     |                |
     +----------------+
     | コマンド(3行)  | ← カーソル
     +----------------+

サイズの指定は以下の3種類で可能です。

  * 割合       (例: 0.25)

  * 行(桁)数   (例: 3)

  * 変数の参照 (例: liece-command-buffer-rows)

便利な数字 1.0 を必ず一度は 使用しなくてはなりません。サイズに 1.0 を指定した場合、残りの領域を割り当てる事を意味します。

以下に BNF によるバッファ分割の文法を載せます。

     split       = horizontal | vertical | buffer | form
     horizontal  = "(horizontal " size *split ")"
     vertical    = "(vertical " size *split ")"
     buffer      = "(" buffer-name " " size *[ "point" ] ")"
     size        = number
     buffer-name = command | channel | channel-list | nick ...

コマンドの利用方法
=========

ダイアログモード
--------

ダイアログモードとは、チャンネルでの会話が表示されるバッファ(liece-dialogue-buffer) での主モードです。 Liece は多くの Emacs 上で動作する IRC クライアントと同様に

内部で使われる命名規則
-----------

Liece の挙動を各コマンドに関連付ける前に、内部で用いられる名前空間を簡単に解説します。

チャンネル名の表現にはデータ型としての内部表現とIRC の世界で実際にやりとりされる外部表現の2つがあります。これらは(現在は)、どちらも文字列表現であり、利用者はコマンドの発行を通じて双方にアクセスすることができます。

liece では出会う名前全てを一つの大きな連想リスト (liece-nick-alist)に保存しています。この方法は非常に効率が悪く、補完入力の候補を表示する以外の役割には利用できません。

これに対し、Liece では複数の小さなハッシュ表を用意しています。

チャンネルの内部表現は Liece の内部で用いられるハッシュ表のキーでもあり、特定のチャンネルに関する情報はシンボルのプロパティとして保存または更新されます。

プライベートモード
---------

Liece では、チャンネルごとの会話相手と、プライベートモードでの対話相手を別々の名前空間で管理しています。この方針には反対意見もあり、その一つにはショートカットにより対話相手を切り替える際に多くのストロークを要することが挙げられます。

しかし、多数のチャンネルに参加している場合に特定のチャンネルへの切り替えの方がプライベートモードでの対話相手の切り替えより頻繁に生じるというのは経験的に明らかです。

また、これらを一元管理した場合に、プライベートモードとチャンネルでの発言のミスが起こりやすい点も考慮に入れました。(裏で安全に悪口が言えます。 ^_^;;)

実際に、IRC以外の実時間会議系ではこれらの名前空間を明示的に分割している場合が多く、これらとの連携を考えた場合に都合が良いというのもあります。

プライベートモードでの対話の方法
................

プライベートモードに切り換えるにはC-c P (liece-command-toggle-private)をタイプします。事前に対話相手が決定しているのであればC-c j (liece-command-join)で相手を指定するだけでも構いません。

一時的にプライベートモードから通常の会話に戻るには、もう一度 C-c P とタイプします。

プライベートモードでの操作はは、チャンネル内での会話とほぼ同様です。

C-c 数字 (liece-switch-to-channel-no-数字)

 -- Variable: liece-default-partner-binding

     対話相手を特定の番号に割当てる

カスタマイズ
******

接続方法の指定
=======

Liece では複数の接続方法をサポートしています。 "サーバ名:ポート番号:パスワード" といった文字列表現の他に、 plist を用いた、より詳細な接続パラメタを指定することができます。 LIECE-SERVER に指定できるキーは以下の通りです。

:host
     接続先ホスト名(文字列)

:service
     サービスエントリ(整数または文字列)

:password
     パスワード(文字列)

:type
     接続方法 (network, program, ssl, rlogin のいずれか)

:prescript
     接続前処理コマンド (関数または shell command 文字列)

:relay
     中継ホスト名 (文字列)

外部プログラムを介した接続
-------------

IPv6 経由の接続を行いたい、socks 越しに接続したいなどの何らかの理由で Emacs のネットワーク機能を利用したくない場合、 Liece では外部プログラムによる接続が可能です。

この方法で接続を行うためには、外部プログラムとして Liece の配布に附属する "tcp" が必要となります。

liece-server の :type パラメタに program を指定するか、もしくは以下の変数を設定することにより、この方法が用いられます。

 -- Variable: liece-tcp-default-connection-type

     ディフォルトの接続方法を指定する

 -- Variable: liece-tcp-program-name

     外部プログラムを明示的に指定する

SSL を介した接続
----------

SSLeay または OpenSSL に附属する s_client を利用して接続を行う方法も用意されています。

この方法で接続を行うためには、外部ライブラリとして Emacs/W3 に附属する ssl.el が必要になります。

 -- Variable: liece-tcp-ssl-protocol-version

     SSL プロトコルのバージョンを指定します。liece-tcp-ssl-protocol-version が "2" でないならば、最初に SSL プロトコルのバージョン 3 で接続を試み、失敗した場合にはSSL プロトコルのバージョン 2 で接続を試みます。

rlogin を介した接続
-------------

 -- Variable: liece-tcp-rlogin-program
     rlogin (rsh, ssh) を用いたリレー接続時に使用するプログラム

 -- Variable: liece-tcp-rlogin-user-name
     rlogin (rsh, ssh) を用いたリレー接続時に使用するユーザ名

タイマ変数
=====

 -- Variable: liece-keepalive-interval
     IRC サーバに対して定期的に PING を送る間隔

 -- Variable: liece-poll-names-interval
     参加しているチャンネルに対し、定期的に名前一覧を取得する間隔

 -- Variable: liece-poll-friends-interval

     LIECE-FRIENDS に指定したユーザに対し、定期的に存在確認を行う間隔

Programming hooks
=================

Liece では複雑な hook を書くためのマクロを用意しています。

 -- Function: liece-current-nickname
     現在の自分のニックネームを取得

 -- Function: liece-current-channel
     現在会話中のチャンネル名を取得

 -- Function: liece-current-channels
     参加しているチャンネルのリストを取得

 -- Function: liece-current-chat-partner
     現在会話中の対話相手を取得

 -- Function: liece-current-chat-partners
     会話中の対話相手のリストを取得

 -- Function: liece-channel-get-nicks &optional chnl
     CHNL のメンバ一覧を取得

 -- Function: liece-channel-get-operators &optional chnl
     CHNL のチャンネル管理者リストを取得

 -- Function: liece-channel-get-voices &optional chnl
     CHNL で発言権のあるメンバのリストを取得

 -- Function: liece-channel-get-topic &optional chnl
     CHNL のトピックを取得

 -- Function: liece-channel-get-modes &optional chnl
     CHNL のモードを取得

 -- Function: liece-channel-get-bans &optional chnl
     CHNL の ban リストを取得

 -- Function: liece-channel-get-exceptions &optional chnl
     CHNL の ban 例外リストを取得

 -- Function: liece-channel-get-invites &optional chnl
     CHNL の招待者リストを取得

付録
**

変数索引
****