-*- Text -*- $Id: README.25,v 1.12 2001/06/05 16:53:34 simm Exp $ Subject: irchat-pj 2.5.* の変更点 Author: しまだ みつのぶ Organization: irchat-PJ Project / Project Pure ---------------- この文章は, irchat-pj 2.5.* の, 2.4.* 系からの変更点を記述します. irchat-pj 2.5.* は, irchat-pj 2.4.24.18 をベースに, irchat 由来 の関数群を, Project Pure による PURE(*) ライブラリで置換していく 予定で開発を進めております. (*) PURE: Primitive Universal Relay-chat Environment このリリースでの, irchat-pj 2.4.24.18 からの変更点を, 以下の順で 説明します. 1. コード設定に関する変更点 2. 半角カナの扱いに関する変更点 3. モードライン設定に関する変更点 4. CTCP VERSION 関連の変更点 5. DCC 関連の変更点 x. その他内部的な変更点 (おまけ) make 時に強制的に load-path をとおす方法 ---------------- 1.コード設定に関する変更点 2.5.* 系では, 次のような変更があります. 1) 内部処理の大幅変更 2) 送信コード指定変数名の変更 3) 受信コードの指定方法変更 まず 1) ですが, irchat-pj 内部にもっていた文字コード判定モジュー ルを PURE ライブラリに移行しました. 同時に, 判定アルゴリズムも若 干変更しております. 2) は, 2.4.* 系では irchat-pj-string-out-code に文字コードを指定 しておりましたが, 2.5.* 系では変数名を irchat-pj-cs-encode に変 更しました. 文字コードを指定することにはかわりありません. 3) は, 2.4.* 系では irchat-pj-string-in-code に文字コードを指定 しておりましたが, 2.5.* 系では, 文字コード判定関数を指定する方法 に変更しました. 2.5.4cまでと, 2.5.5c以降では設定方法が若干異なり ますので, それぞれ説明します. 3.1) 2.5.4c まで (初期の2.5.5cも含む) の設定方法 判定関数を指定します. バッファの領域を指定すると文字コードを結果 として返す関数で, irchat-pj-cs-detect-function に関数シンボルを 指定します. デフォルトでは pure-cs-detect-jp-region で, これは 8ビット文字が含まれる文字列を日本語と仮定し, 文字コードを判定す るものですが, これを固定シンボルを返すような関数に変更したり, nil にすることも可能です. なお, nil の場合は文字コードを ISO-8859-1 として扱いますので, 日本語は確実に化けます. 3.2) 2.5.5c 以降の設定方法 2.5.5c(pure-0.5c)では, 判定方法を変更しました. まず8ビット文字か どうかを判別し, ない, すなわちすべて7ビット文字であったとすれば, 変数 pure-cs-default-coding-system の値(デフォルトは'ctext)と扱 います. 8ビットの場合は, 変数irchat-pj-cs-8bit-coding-systemを まず確認します. この値が ・non-nilの場合: その値を求める coding-system として扱う ・nil の場合, 変数 irchat-pj-cs-detect-function が示す関数を, regionを引数として呼び, その返り値を coding-system として扱う ものとします. デフォルトは日本語の自動判別が行えるように, ・irchat-pj-cs-8bit-coding-system: nil ・irchat-pj-cs-detect-function: 'pure-cs-japanese-detect-region となっております. EUC-JPは絶対に受けとらない場合は ・irchat-pj-cs-8bit-coding-system: shift_jis ・irchat-pj-cs-detect-function: --- (何でもよい) として問題ありません. ---------------- 2.半角カナの扱いに関する変更点 2.4.* 系では, 送信直前にjisx0201カナをjix0208カナに変換しており ましたが, 2.5.* では, メッセージ入力時 (改行時) に変換するように 変更しました. また, 2.4.*系では irchat-pj-zenkaku-katakana-string を呼んで変換しておりましたが, 2.5.* では PURE ライブラリの pure-cs-japanese-kana-convert-region (*) を呼び出しております. 変換の有無に関しては, 制御変数 irchat-pj-katakana-convert で指定 することに変化はありません. (*) 2.5.4cまではpure-cs-kana-convert-region ---------------- 3.モードライン設定に関する変更点 モードライン設定は, irchat-pj 2.5.3c で大幅に変更しました. 2.5.0c の変更の際に, ファイル名を irchat-pj-mode-line-format.el から irchat-pj-modeline.el に変更し, 内部で利用する変数名もすべ て irchat-pj-modeline- ではじまる変数名に変更しましたが, 構造自 体は irchat-pj 2.4.* のものをそのまま流用しておりました. irchat-pj 2.5.3c 以降のモードラインは, デフォルトではEmacs標準の ものを流用し, 設定次第では独自のモードラインを利用できるようにし てあります. デフォルトでは, Emacs が標準で定義するふたつのバッファローカル変 数 mode-line-modified および mode-line-buffer-identification を 変更し, irchat-pj およびサーバとの接続状況を表示するようにしてお ります. mode-line-modified は, irchat-pj-modeline-{global|local}-status をとります (Channel バッファは local, 他は global). この変数は, away やスクロールロック等のように nil もしくは t で表現できる情報 を各1文字で表現するような値になっております. mode-line-buffer-identification は, irchat-pj-modeline-*-buffer ("*" は, Command, Dialogue, Others, Channel のいずれか) をとり, 主にjoinしているチャネル名を表示するのに利用しております. Command バッファ: nick, 接続サーバホスト, アクティブなチャネル Channel バッファ: アクティブなチャネル Others / Dialogue バッファ: 全チャネル 変数 mode-line-format 自体の値は Emacs デフォルトのままですので, かな漢字変換のモードや, 現時刻, バッテリ残量などを表示する設定が 反映されない, という問題は解決されております. また, 従来のように独自のモードラインを利用したい場合, それぞれ次 の変数に, mode-line-format に与える形で値を設定します. Command バッファ: irchat-pj-modeline-Command Dialogue バッファ: irchat-pj-modeline-Dialogue Others バッファ: irchat-pj-modeline-Others Channel バッファ: irchat-pj-modeline-Channel これらのモードライン定義変数では, irchat-pj がデフォルト値を設定 する際に利用する変数を利用することができます. ---------------- 4.CTCP VERSION 関連の変更点 まず, 外のクライアントからの CTCP VERSION の結果の表示方法を一部 変更しました. 2.4.* 系では, 最初の ":" 以降の文字をすべて切り落 としておりましたが, 2.5.5c以降では切り落とさずにそのまま表示 (*) するように仕様変更しました. (*) 2.5.4cまでは, 最後の ":" 以降の文字を切り落としております 次に, CTCP VERION 要求に対する irchat-pj の返答の際に用いる文字 列ですが, 2.4.* 系では, irchat-pj-specific-*.el で Emacs のバー ジョン文字列を生成し, irchat-pj-version-string.el で irchat-pj のバージョン文字列を生成しておりましたが, 2.5.* では, irchat-pj 自身のバージョン文字列は irchat-vars.el で宣言し, Emacs および PURE のバージョン文字列を PURE ライブラリの pure-vs-make 関数で 生成するように変更しました. なお, Mule のコードネーム等を日本語化するためには rail パッケー ジを利用しますが, irchat-pj 2.5.* の CTCP VERSION を日本語化する ためには, PURE 対応の rail が必要となります. Anonymous CVS のみ での配布ですが, rail-1.3.* では PURE 対応しておりますので, rail をご利用の際は, 開発版ではありますが, こちらをご利用ください. ---------------- 5.DCC 関連の変更点 DCC まわりの実装は irchat-pj 2.5.2c / 2.5.4c / 2.5.5c で, 大幅に 変更しております. 以下, 1) irchat-pj 2.5.2c における DCC 実装の変更点 2) DCC RESUME 対応 3) irchat-pj 2.5.4c における DCC 実装の変更点 4) irchat-pj 2.5.5c における DCC 実装の変更点 の順で説明します. 1) irchat-pj 2.5.2c における DCC 実装の変更点 irchat-pj 2.5.1p までの DCC まわりの実装は, 基本的には irchat-jp の irchat-dcc.el をほぼそのまま利用しておりました. 2.5.2c 実装の 際, 構造を全面的に見直し, dcc.c に依存する部分としない部分に分離 しました. 従来の irchat-dcc.el は廃止し, dcc.c とのインタフェー スを新たに irchat-pj-dcc.el に記述, dcc.c 非依存部分は PURE ライ ブラリの pure-irc-dcc モジュールを利用するように変更しました. 実装変更にともなう設定変数名変更ですが, 基本的には, irchat-dcc-* の形のものを irchat-pj-dcc-* に変更しました. irchat-dcc-auto-get-file -> irchat-pj-dcc-auto-get-file irchat-dcc-directory -> irchat-pj-dcc-directory irchat-dcc-program -> irchat-pj-dcc-program なお, 今のところ, irchat-pj-dcc-auto-get-file は, 変数は用意して ありますが, 自動取得するようにはしておりません. また, DCC CHAT を受ける際の通信方法は, 従来は dcc.c を用いて通信 しておりましたが, 直接 pure-irc-dcc モジュールで行うように変更し ました. なお, 変数 irchat-pj-dcc-chat-client-program を "dcc" に しておけば, 従来どおり dcc.c 利用で DCC CHAT を行います. 2) DCC RESUME 対応 irchat-pj 2.5.2c 以降は, DCC RESUME に対応しております. DCC によ るファイル送受信に際, 何らかの事情により途中で中断してしまった際, 中断個所から再度送受信できる機能のことで, 利用するに際しては, 送 信側, 受信側ともに DCC RESUME に対応したクライアントである必要が あります. irchat-pj では, dcc.c をコンパイルする際に DCC RESUME に対応させることで irchat-pj 自体が DCC RESUME 対応となります. コンパイル時につけるオプション等は, INSTALL に記述しております. DCC RESUME の使い方ですが, ファイル送信に関しては普通のファイル 送信と何らかわりません. C-c C-d s (irchat-Command-dcc-send) を利 用し, 送信してください. DCC RESUME 機能を用いて, ファイルを途中から受信する場合は, C-c C-d r (irchat-Command-dcc-rget) を用います. minibuffer にて ファイル名を入力(基本的にそのまま Enter すれば大丈夫です)します. 送信側が DCC RESUME 対応しておれば, 手元にあるファイルの続きから 受信を開始します. 送信側が対応していない場合は, その旨表示されま すので, 従来どおり C-c C-d g (irchat-Command-dcc-get) を用いて, 最初から受信してください. # なお, DCC RESUME 対応は, yuu@cb3.so-net.ne.jp さん提供の DCC # RESUME 対応版 dcc.c を利用しております. ここに御礼申し上げます. 3) irchat-pj 2.5.4c における DCC 実装の変更点 irchat-pj 2.5.4c では, CTCP メッセージのパースと dcc.c を除き, 完全に PURE ライブラリの pure-irc-dcc モジュールに移管しました. dcc.c の代替機能を提供する外部モジュール (puresv,dccget,dccput) も用意しております. また, DCC 機能実装の際して, 一般的なプロセス 処理やネットワーク処理において使えそうなモジュールを pure-pr モジュールとして作成しました. DCC 実現方法としては, 今回 PURE ライブラリで用意した外部モジュー ルを利用する方法と, irchat 由来の dcc.c を利用する方法が選択でき, 以下に示す変数でどちらの方法を利用するか選択可能です. ファイル送信 : irchat-pj-dcc-file-put-method ファイル受信 : irchat-pj-dcc-file-get-method DCC CHAT送信 : irchat-pj-dcc-chat-server-method DCC CHAT受信 : irchat-pj-dcc-chat-client-method これらの変数はすべて 'pure もしくは 'irchat の値をとり, 'pure の 場合は今回 PURE ライブラリで用意したモジュールを利用, 'irchat の 場合は従来の irchat の方法を利用します. デフォルトはすべて 'pure です. 方法選択変数が 'pure の場合に利用する外部プロセスのファイル名は, それぞれ以下に示す変数の値です(括弧内はデフォルト値). ファイル送信 : irchat-pj-dccput-program ("dccput") ファイル受信 : irchat-pj-dccget-program ("dccget") DCC CHAT送信 : irchat-pj-puresv-program ("puresv") DCC CHAT 受信に関しては, 外部プロセスを利用せずに直接接続します. また, 方法選択変数が 'irchat の場合に利用する外部プロセスは, 変数 irchat-pj-irchat-dcc-program で指定し, デフォルト値は "dcc" です. なお, irchat-pj 2.5.2c で名称変更した変数 irchat-pj-dcc-auto-get-file irchat-pj-dcc-directory に関しては, 1)時点と同じ使用方法です. 4) irchat-pj 2.5.5c における DCC 実装の変更点 DCCプロセスを終了コマンド(irchat-pj-Command-dcc-quit) を追加しま した. C-c C-d q に bind してあります. DCC要求リストに対する, コ マンド(irchat-Command-dcc-kill)と同じような役割のコマンドです. 他の変更点はコードのリファクタリングだけですので, 一般的な使い方 や設定方法は基本的に irchat-pj 2.5.4c と変更ありません. 変更部分 は実装レベルでのものであり, * DCC内部データ処理部分 * 外部プロセスとのインタフェース部分 を完全に分離しました. この副次効果として, * 自作DCC外部プロセスをより簡単に組み込む ことができるようになりました. DCC内部データ処理は, データ構造モジュール pure-ds.el を利用し, pure-irc-dcc-info という型を作成し, それを内部で利用しております. pure-irc-dcc-info 構造に対する処理を pure-irc-dcc-info.el に記述 し, それ以外の DCC 内部データ処理は pure-irc-dcc.el に記述してあ ります. 外部プロセスとのインタフェースは, pure-pr-dcc-*.el にマッチする 名前のファイルで定義してあり, * 部分が外部プロセスの種類を示して います(現状では pure および irchat が存在). このファイルでは * DCC CHAT 待ち受け開始 pure-pr-dcc-*-start-chat-server * DCC CHAT 受信開始 pure-pr-dcc-*-start-chat-client * DCC SEND 待ち受け開始 pure-pr-dcc-*-start-file-server * DCC GET 受信開始 pure-pr-dcc-*-start-file-client * DCC RESUME 可能性判定 pure-pr-dcc-*-resumep * DCC RESUME 受信時処理 pure-pr-dcc-*-resume-accept * DCC RESUME 開始 pure-pr-dcc-*-resume-start * その他, 外部プロセスメッセージパース処理など, 外部プロセスに 依存する処理 を定義してあります. 上記"*"の部分を適当に決め, 上記の関数名にしたがって処理関数を定 義し, ファイル末尾で provide 宣言しておけば, 自作のDCC外部プロセ スを簡単に組み込むことが可能です. ---------------- x.その他内部的な変更点 * サーバへのメッセージ送信方法を変更しました. irchat-pj 2.5.0p までは, メッセージを irchat-send に渡すことで 直接サーバに発信しておりました. 一方, 2.5.1c 以降では, pure-irc-send モジュールを利用して, 1.一旦キューにためる 2.キューにたまったメッセージを, 一定間隔(デフォルト2秒)ごとに サーバへ送信 するように変更しております. また, 受け取った CTCP への返答メッセ ージは, CTCP flood を防ぐために, 送信の際に順序を変更したうえで 送信を行うようにしました. 一定間隔ごとの処理は, GNU Emacs では run-at-time を, XEmacs では add-timeout を利用して実現しており, これらの関数が定義されていな い環境では, これらの処理は行わずに, キューにたまったメッセージは すぐに送信しております. ---------------- (おまけ) make 時に強制的に load-path をとおす方法 この項目は, とくに irchat-pj に限ったことではありません. すくな くとも, PURE を利用するパッケージが他に存在するならば, それらの パッケージにはすべてあてはまります. 普段 ~/.emacs で明示的に設定した load-path の位置に PURE をイン ストールした場合, "Cannot open load file: pure-make" というエラー が出てインストールできません. このようなときは, # make EMACSLOADPATH=(PUREのパス) install のようにすればインストールできますが, 毎回記述するのが面倒だと思 われることでしょう. そういうときは, Emacs デフォルトの site-lisp ディレクトリに site-start.el というファイルを作成し, そこで (setq load-path (cons "PUREのパス" load-path)) といったふうに, load-path を PURE のパスにとおす設定を記述します. site-start.el ファイルは, 普段は ~/.emacs より前に読み込まれ, か つ, Makefile 中のように -q オプションつきで呼び出された場合にお いても読み込まれるファイルです. したがって, ここで load-path の 設定を行う副作用として, 普段の起動時 ~/.emacs で設定する必要があ りません. (setq load-path (append '("irchat-pjのパス" "PUREのパス") load-path)) のようにしておけば, 面倒な load-path 設定なしに irchat-pj を利用 することができます. もちろん, (autoload 'irchat "irchat" "GNUemacs IRC client." t) も site-start.el に記述可能です.