[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本書は、「Programming in Emacs Lisp: An Introduction」 (texinfoファイル`emacs-lisp-intro.texi'、1.05版、更新日1997年10月21日) の翻訳である。 日本語訳ファイルは
http://www.ascii.co.jp/pub/GNU/emacs-lisp-intro-jp.texi |
texi2dvi
などのコマンドで 自前でdviファイルを作成して印刷できる。 また、Muleを用いてバッファに読み込んでから M-x texinfo-format-buffer
を実行すれば、 日本語版のinfoファイルを作成することもできる。 ただし、このようにして作ったinfoファイルでは、 (メニューなどの)info特有の部分は未翻訳であることをあらかじめご了承願いたい。
Mule(Multilingual Enhancement to GNU Emacs)とそのLispは、 多国語を扱うために拡張したため、 GNU EmacsやEmacs Lispと互換ではない部分がある。 詳しくはMuleのディストリビューションに含まれる`mule-jp.texi'や
GNU Emacsが扱う(7ビットの)ASCIIコードの文字は、 コンピュータ内部では1文字を1バイトで表現し、 これらの文字は画面上の表示でも1文字あたり1コラムを占める。 したがって、文字数、内部表現のバイト数、表示コラム数のどれを とっても同じ値である。 また、テキストをファイルに収めたときの文字コードと GNU Emacsのバッファ内での文字コードはまったく同じである。
ところが、多国語を扱うMuleでは、こうはならない。 各国ごとにその国の文字を1バイトあるいは2バイトで表す規格がある。 たとえば、日本には文字コードの規格としてJIS X 0208があり 2バイトで1文字を表す。 また、ローマ字とカタカナの規格としてJIS X 0201があり 1バイトで1文字を表す。
1つのバッファ内に複数の国の文字コードが混在してもよいように、 Muleでは1バイトないしは2バイトの文字コードのまえに識別用に 1バイト(ないしは2バイト)を付加してバッファ内に保持する。 この識別用のバイトをリーディングキャラクタ(leading character)と呼ぶ。 ただし、7ビットのASCIIコードの文字は、GNU Emacsと同じで、 リーディングキャラクタは付加しない。
たとえば、日本語の「あ」は、文字数は1であるが、 内部表現には3バイト必要であり、表示には2コラム必要である。 半角の「ア」は、文字数は1であるが、内部表現には2バイト必要であり、 表示には1コラム必要である。 ASCII文字の「a」は、文字数も内部表現のバイト数も表示コラム数も1である。
このため、Muleでは、関数length
(See 節 7.2.1 リストの長さ:length
)は、 文字列の「文字数」ではなく、 内部表現の「バイト数」を返す。 バッファ内のポイントやマーク (See 節 2.4 バッファサイズとポイントの位置) の位置も、「文字数」ではなく内部表現の「バイト数」が単位である。
一方、関数forward-char
は、その名前から予想されるように、 文字単位でポイントを移動する。 文字列の「文字数」を調べるには関数chars-in-string
を使い、 「表示コラム数」を調べるには関数string-width
を使う。
(length "abcあいう") => 12 (chars-in-string "abcあいう") => 6 (string-width "abcあいう") => 9 |
`.emacs'(See 節 16. 個人用ファイル`.emacs')で Muleの版を区別するには、関数mule-version
が返す文字列を使う。 また、日本語入力に「Wnn」、「sj3」、「かんな」のどれが使えるかを判別し、 それぞれに固有の設定を行うには、 関数featurep
を使ってつぎのようにする。
(if (and (not (featurep 'egg)) (featurep 'canna)) (progn 「かんな」に固有の設定 ... )) (if (and (featurep 'egg) (featurep 'wnn-egg)) (progn 「WNN」に固有の設定 ... )) (if (and (featurep 'egg) (featurep 'sj3-egg)) (progn 「sj3」に固有の設定 ... )) |
MuleがX Window Systemのクライアントとして動作している場合、 変数window-system
には値x
が、 そうでない場合にはnil
が束縛されるので、つぎのように判別できる。
(if (eq window-system 'x) (progn 「X Window System」に固有の設定 ...) 画面端末の場合の設定 ...) |
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |