日本語 MicroEMACS(kemacs) リリース・ノート ********************************************************************** (C)opyright 1987 by Daniel M. Lawrence MicroEMACS 3.8 can be copied and distributed freely for any non-commercial purposes. MicroEMACS 3.8 can only be incorporated into commercial software with the permission of the current author. ( Notice the copyright.....a number of large companies decided to use MicroEMACS 3.7 and 3.7i as the shell of their products, and several of the ones I contacted were not even courteos enough to send me their product for my personal use. I am not out to make a fortune on this, but a little common courtesy would be appreciated.) **********************************************************************  kemacs は、Daniel M. Lawrence 氏が Copyright を所 有する、MicroEMACS 3.8i をもとにして作成されました。  kemacs のリリースに関しては、原著者の了解を得てあ りますが、そのための条件として上記の Copyright に示 された条件を遵守することが必要です。  なお、上記の文章における、"current author" とは、 kemacs の場合、Lawrence 氏と私 (sanewo) の両者を指す ものとします(これでいーのかなぁ?)。 **********************************************************************  このファイルは、Readme の内容のうち、kemacs に関係 の深い部分を日本語訳したものを含んでいます。内容につ いては簡略化した部分もありますので、できれば Readme も読むとよいでしょう。 ********************************************************************** ・旧バージョンから変わった点  ここでは、MicroEMACS での変更点と、kemacs 固有の変更点とがまとめて書 いてあります。個々の変更内容については、eversion.H にあるログを見て下 さい。 1. プリフィックスを再定義できるようになった。  以下のコマンドをキーにバインドする事で、各種のプリフィックスを変更で きる。 meta-prefix ^[ ctlx-prefix ^X universal-argument ^U quote-character ^Q abort-character ^G 2. コマンドを検索する機能が付いた  apropos コマンド(M-A)で、文字列を指定すると、その文字列を含むコマ ンドのリストが作成される。ただし、検索に正規表現は使えない。 3. 暗号化機能が付いた  ファイルを暗号化したり、復号化したりすることができるようになった。コ マンドラインで -k とすると、最初のファイルがこのキー を用いて復号されてからエディットされる。暗号化のためには、バッファを CRYPT モードにする。set-encryption-key(M-E)コマンドで、バッファに対 して暗号化キーを指定する。このバッファの内容がファイルにセーブされると きに、暗号化が行なわれる。暗号化されたファイルを読むには、まずバッファ を用意し、CRYPT モードにした後、キーをセットしてからファイルを読むと、 復号化されてバッファに読み込まれる。 [注意]現在の所、暗号化機能は漢字には適用されません。どーしたらいーの かなぁ。 3. キーボードマクロの中で、インタラクティブなコマンドも使えるように なった。  コマンドへの入力をすべて覚えており、自動実行時にはその値が用いられる。 4. 機能を制限することができるようになった。  -r オプションを付けて起動すると、コマンドラインで指定したファイルを エディットする事以外のことができなくなる。 [あんまり役には立たない…] 5. 単語の追込み(word wrapping)の処理がより柔軟に行えるようになっ た  単語の追込みが起こる時点で、そのとき M-FNW にバインドされているコマ ンドが実行される。デフォルトでは、これには wrap-word コマンドがバイン ドされているが、これをユーザがバインドし直すことで、別の動作を行なわせ ることもできる。 6. 括弧の対応を付けるコマンドができた  goto-matching-fence(M-^F)コマンドを実行すると、そのときのカーソル の位置にある文字とマッチする括弧に移動する。もし対応する括弧がなければ、 ベルを鳴らす。 7. スクリーンのサイズを動的に変化させることができるようになった。  change-screen-size(M-^S) と change-screen-width(M-^T) を用いて、 EMACS の使用する画面の大きさを変更できる。 8. マクロの機能が拡張された。  マクロは、機能が大幅に拡張され、かなり自由度の高い設定が行える。  [注意] 旧バージョンの kemacs と新バージョンの kemacs とでは、マク  ロのシンタックスに互換性がありません。 8−1 エディタ環境変数  エディタ環境変数は、エディタの各種の動作をコントロールする。その値は、 set コマンド(^X-A)によって設定でき、またマクロの中では $変数名 によっ て参照される。変数には以下のものがある。括弧内は変数の種類(N: 数値、 S: 文字列、B: TRUE/FALSE)を表す。なお、* のついた変数は読みだし専用で、 値を設定しようとするとエラーになる。 $fillcol (N) 追込みを行うカラム位置。この変数に値をセットす ることと、set-fill-column コマンド(^X-F)を実 行することとは同等である。 $pagelen (N) kemacs で使用する行数。この変数に値をセットす ることと、change-screen-size コマンド(M-^S) を実行することとは同等である。 $curwidth (N) kemacs で使用するカラム数。この変数に値をセッ トすることと、change-screen-width コマンド(M-^T) を実行することとは同等である。 $curcol (N) カーソルのあるカラム位置。行の先頭を1と数える。 $curline (N) カーソルのある行の、先頭からの行数。 $cbufname (S) 現在のバッファ名。この変数に値をセットすること と、name-bufferコマンド(M-^N)を実行すること とは同等である。 $cfname (S) 現在のファイル名。この変数に値をセットすること と、change-file-nameコマンド(^X-N)を実行する こととは同等である。 $debug (B) マクロのデバッグ機能をコントロールする。値が TRUE ならば、マクロの各行が実行される前に、コ マンドラインに表示され、ユーザからの入力を待っ て実行される。アボートキャラクタ(デフォルトは ^G)を入力すると、マクロの実行は中止される。 $status (B) 直前のコマンドの実行結果を保持する。成功ならば TRUE、失敗ならば FALSE である。この変数に値を セットすることは、エラーではないがあまり意味を 成さない。 $kanji (B) メッセージを漢字で表示するかどうかをコントロー ルする。 $fcode (S) ファイル・コードのデフォルト。その値は、"UJIS"、 "SJIS"、"JIS-X-Y" のいずれかである。ここで、X は、"NEW" または "OLD" であり、Y は "ASCII"、 "ROMAJI"、"BOGUS" のいずれかである。セットする 場合は、各々の文字列は、最初の一文字のみで認識 される。JIS の場合、ハイフン以降は省略できる。 $tcode (S) 端末の漢字コード。値は $focde と同じ形式を持つ。 $bcode (S) バッファのファイル・コード。 $asave (N) 自動保存を行う場合の間隔。デフォルトは 256 文 字。ASAVE モード参照。 $acount (N) 次に保存を行うまでの文字数。1文字挿入される毎 に減らされ、0 になると保存が行われて、$asave の値が再セットされる。ASAVE モード参照。 $lastkey (N) 直前に入力されたキー。 $curchar (N) カーソルの下にあるキャラクタ。 $progname (S*) プログラムの名前を返す。kemacs の場合、$kanji が TRUE なら、"日本語 uEMACS"、そうでなければ、 "KEMACS" が返される。 $version (S*) バージョンを示す文字列を返す。 $revdate (S*) 最後に更新された日付を返す。 $discmd (B) メッセージの表示をコントロールする。FALSE なら ば、write-message コマンドによるもの以外のメッ セージを表示しない。マクロやスタートアップファ イルの中で使うと便利。 $disinp (B) コマンドラインからの入力の表示をコントロールす る。パスワードのようなものを入力させるときに使 う(?)。 $seed (N) 乱数の初期値。 $gmodeline (S) モードラインの書式の省略値(モードラインの項参照) $bmodeline (S) バッファ毎のモードラインの書式 $cperiod (N) インターバル・タイマの間隔(タイマの項参照) $time (S) 現在の時刻(hh:mmxx xx=pm/am) 8−2 ユーザ定義変数  ユーザが任意に値を設定したり参照したりできる変数。%変数名 の形式をし ている。 8−3 バッファ変数  バッファの内容を取り出す。#バッファ名 と書くと、バッファの一行分(カー ソル位置から行末まで)を値として返し、バッファのカーソル位置を一行分先 に進める。 8−3 入力変数  ユーザからの入力を値とする変数。@プロンプト の形式。 8−4 マクロ関数  &関数名 の形式で、各種の関数が定義されている。関数名は、大文字でも小 文字でもよく、最初の3文字のみ有効である。以下で、括弧の中は、その関数 がとる引数の型および数を示す。 &ADD (N,N) 加算 &SUB (N,N) 減算 &TIMes (N,N) 乗算 &DIVide (N,N) 除算 &MOD (N,N) 余り &NEGate (N) 負数 &CATinate (S,S) 文字列の連結 &LEFt (S,N) 文字列の左部分 &RIGht (S,N) 文字列の右部分 &MIDdle (S,N,N) 文字列の指定された位置から指定された長 さを持つ部分 &NOT (B) 論理否定 &EQUal (N,N) 等値(数値) &LESs (N,N) より小さい(数値) &GREater (N,N) より大きい(数値) &SEQual (S,S) 等値(文字列) &SLEss (S,S) より小さい(文字列) &SGReater (S,S) より大きい(文字列) &INDirect (S) 文字列をもう一度評価する。例えば、文字 列の値が "$curcol" なら、変数 $curcol の値が返される &ENVironment (S) 文字列を UNIX の環境変数とみなし、その 値を返す &LENgth (S) 文字列の長さ &AND (B,B) 論理積 &OR (B,B) 論理和 &UPPercase (S) 大文字にする &LOWercase (S) 小文字にする &TRUth (N) 大宇宙の真理であるかどうか(:-)) &ASCii (S) 最初の文字のコード &CHR (N) コードに対応する文字 >Key () 一文字入力し、それを値とする &RND (N) 与えられた範囲の乱数 &ABSolute (N) 絶対値 8−5 マクロ定義  番号および名前で呼び出せるマクロを定義することができる。番号付きマク ロは、番号を引数として store-macro コマンドを呼び出すことで定義される。 名前付きマクロは、マクロ名を引数として、store-procedure コマンドを呼び 出す。いずれも、その次の行から、!endm を含む行までがマクロとして定義さ れる。  番号付きマクロの実行は、execute-macro- は、1 から 40 までの 数)あるいは、番号を引数として、execute-macro-n コマンドを実行すること によってなされる。マクロの定義は、"[[<番号を2桁の数字で表したもの>]]" というバッファ(普段は表示されない)に保持されている。  名前付きマクロの実行は、マクロ名を引数として、execute-procedure コマ ンド(M-^E)を実行することによりなされる。定義は、"[[<マクロ名>]]" と いうバッファに保持されている。  マクロの定義の中では、!if !then !endif、ラベル(*ラベル名 の形式)、 !goto、!return などの命令によって、プログラムを作成することができる。  詳しくは、マクロについてのマニュアル(Macros)を参照のこと。 9. 正規表現による探索ができるようになった。  MAGIC モードのバッファで探索(および置換)を行なうときは、探索文字列 として正規表現(の簡略版)を用いることができる。 10. コマンドが追加された。 trim-line (^X^T) entab-line (^X^E) detab-line (^X^D) clear-kill-buffer キルバッファの内容をクリアする。 no-op 何もしない。 chdir ワーキングディレクトリを変える。 chdir "" で、ホーム・ディレクトリに移る。 auto-mode-for-file ファイル名によって、自動的にモードを設 定する。例えば、 auto-mode-for-file WRAP ".*\.[ch]" で、C のソースに対して、モードを設定できる(これは、デ フォルトで既に設定済み)。 update-modeline モードラインの更新を行う。モードラインに 時刻を表示させている場合で、自動更新オプションが設定さ れていない場合などに用いる。 11. ファイル名の展開を行なうようにした。  csh の '~' substitution をシミュレートするようにした。ファイル名およ びパス名(cd で指定)に対して使用できる。 12. 複数のコード系に対応できる。  kemacs は、JIS, SJIS, UJIS の三つのコード系に対応することができる。 また、この他に、漢字としての解釈を一切行わないことも可能となっている。 コード系は、ターミナルとの入出力と、ファイルとの入出力で別々に設定でき る。  デフォルトで使用するコード系は、econfig.h の中で指定する。ここではま た、ターミナルのコード系を TERMCAP 環境変数から取り出すかどうかを指定 することもできる。また、起動時のオプションとして、コード系を指定するこ ともできる。  実行時に動的に設定を変更することもできる。このときは、変更は2段階に 分かれている。まず、漢字としての解釈を行うかどうかは、各バッファのモー ドとして管理される。BINARY というモードをセットすると、漢字としての解 釈を行わず、0から255までのすべての値が入力できる。他のモードと同じ く、グローバルに設定することもできる。  漢字のコード系の指定には、各バッファに設けられた、$bcode という変数 を用いる。この変数の値を変更することで、コード系を変更できる。変数の値 としては、 JIS-X-Y (X=NEW/OLD, Y=ROMAJI/ASCII/BOGUS) SJIS UJIS の3通り(細かくは、JIS はさらに6通りに設定できる)を持つことができる。 設定する場合には、頭文字だけでも良い(JIS の場合は、J-N-A などとする)。 さらに、グローバルな変数として、$fcode があり、これによって新しくバッ ファが作成されるときのデフォルトを指定する。また、ターミナルのコードに 対する変数として、$tcode も用意されている。  $bcode の値はモードライン上に表示され、また、Buffer List には、$fcode の値も表示される。  ファイルを読み込む場合(find-file, read-file および view-file)には、 入力するデータの内容によって自動的にコード系を判別し、$bcode を再設定 する。入力データだけでは曖昧な場合には、その時のバッファのコード系をデ フォルトとする。insert-file の場合には、$bcode は変更されない。  ファイルの書き出しでは、$bcode の値にしたがって、それぞれのコード系 でデータが出力される。バッファが BINARY モードの場合には、内部コード (16ビット)の下位8ビットが出力される。 13. モードラインのカスタム化  バッファ毎に、モードラインの書式を設定することができる。書式は、変数 $bmodeline に文字列として設定する。バッファが作成され、$bmodeline に何 も値が設定されていないと、$gmodeline の値が用いられる。モードの場合と 違って、$bmodeline の設定されていないバッファのモードラインは、 $gmodeline が変更されるとそれにともなって変更される。  設定された内容は、以下の制御コードを除いて、そのままモードラインに表 示される。 %b -- バッファ名 %F -- ファイル名のフルパス %f -- ファイル名のディレクトリ部分を除いたもの %* -- VIEW モードなら %、変更されていれば *、そうでなければ %= と同じ。 %M -- モード名のリスト。括弧は含まれない。 %m -- モード名の頭文字(バッファリストで表示される)のリスト。 %< -- リカーシブエディットのレベル数だけの < 。%> も同様。 %= -- カレントバッファなら =、そうでなければ空白。 %- -- モードラインの最後までを %= で埋める。 %p -- プログラム名。$kanji の値に影響される。 %v -- プログラムのバージョン。 %c -- バッファ・コード。バイナリ・モードの時は、空文字列。 %t -- 現在の時刻。タイマの項参照。 %% -- % 自身。これ以外にも、上記以外の文字が % の後にくると、 その文字そのものが表示される。 14. インターバルタイマを設定できる。  ある間隔($cperiod 秒)毎に、特定の動作(M-FNT にバインドされた関数 の実行)を行うようにすることができる。デフォルトでは、$cperiod = 30 で あり、M-FNT は、update-modeline にバインドされ、モードライン上の時刻の 更新に使用している。  なお、動作の起動は、$cperiod 秒経過後の最初のキー入力の直後、あるいは、 さらに $cperiod 秒経過した時点(シグナルハンドラの中から呼ばれる。まず いかなぁ)で行われる。  タイマの動作は、$cperiod = 0 とすることによって停止できる。あるいは、 M-FNT を、no-op にバインドしてもよい。  注意:インターバルタイマを有効にした場合、もしかしたら、何か不都合が 起こるかも知れない(使用経験が少ないため、十分に確認できていな い)。 15. 関連文書の日本語化  現在、emacs.hlp、emacs.tut の二つが日本語化されている。オリジナルは、 名前を変え、それぞれ emacs.HLP、emacs.TUT とした。 ・MicroEMACS と比較しての注意事項  kemacs は、基本的に、UNIX 対応であり、かつ、BSD と SystemV 以外のバー ジョンには対応しない。さらに、SystemV に対する対応は、かなりいい加減で ある。  また、それに伴い、MicroEMACS で行われていたような、特定の端末、メモ リ・マップドVRAM等に対する最適化も行わず、termcap で対応している。 ・おわりに  kemacs の機能アップについては、多くの方から有用な示唆をいただきまし た。この場を借りてお礼申し上げます。  kemacs が少しでもお役に立てば幸いです。