Go to the first, previous, next, last section, table of contents.


憑依モードのカスタマイズ

ここで説明するいろいろな Lisp 変数を設定することで、 憑依モードのふるまいを改造する事ができます。 動作中は M-x set-variableM-x edit-options で調整したり、 適切な setq 文をあなたの `~/.emacs' に書けば永久設定もできます。 (もうひとつは、ファイル末尾でファイル・ローカル変数の設定注釈を使う手があります; see section `Local Variables in Files' in the Emacs manual。)

これらの変数はデフォルトでバッファ・ローカルなので、 どの憑依バッファにもローカルに設定できます。 (`*Calculator*' バッファでの値は決して使われません。)

calc-embedded-open-formula 変数は式開始デリミタの正規表現を保持します。 正規表現の仕組みについては、 see section `Regular Expression Search' in the Emacs manual。 基本的に、正規表現は Calc が探すことのできるパターンです。 開始デリミタとして空行, `$', `$$' を考慮した正規表現は、 "\\`\\|^\n\\|\\$\\$?" です。 この正規表現の意味がよく飲みこめない人のために、 細部まで詳細に見ていきましょう。

両端を囲んでいる `" "' 引用符マークは、その間に挟まれたテキストを Lisp 文字列としてそのまま引用(quote)します。 これを忘れると、set-variableedit-options は、 正規表現の部分を Lisp プログラムとして読もうとしてしまいます。

この正規表現には、やたらバックスラッシュが多いのが判るでしょう。 ここでは実質的に、2つのレベルのバックスラッシュが使われています。 まず、Lisp は引用された文字列を読むと、 バックスラッシュとそれに続く文字の組を特殊文字として認識します。 この段階で、\n が改行文字に、 \\ がひとつのバックスラッシュに替ります。 そのため、Calc が実際に認識する正規表現は、 `\`\|^ (newline) \|\$\$?' です。

次に正規表現は、バックスラッシュとそれに続く文字の組を、 特別な意味を持つものと認識します。 バックスラッシュはしばしば、 何か別の意味を持つ特殊文字の性質を消すために使われます。 例えば `$' 通常「行末」を意味し、 `?' は直前の項が省略可能(optional)であることを意味します。 そのため、`\$\$?' は、(`$' の性質が消されているので) 1個ないし2個のドルマークにマッチします。

この正規表現に使われている他のコードには、 「行頭」にマッチする `^', 「または」を意味する `\|', 「バッファ先頭」にマッチする `\`' があります。 そのため、パターン全体の意味するところは、 「バッファの先頭」「または」「行頭直後の改行(つまり空行)」「または」 「1〜2個のドルマーク」 です。 これを式開始デリミタに設定すると、 「式とは、バッファ先頭か、空行の後か、1〜2個のドルマークの後からはじまる」 という意味になります。

calc-embedded-open-formula のデフォルト値はまさにこの例のとおりで、 さらにいろいろな同種のデリミタを認識するために、 いくつかの選択項が追加されています。

ところで、ブランクラインを示すパターンとして `^\n' を採用し、 `^$'`\n\n' を避けた理由は、 本命のデリミタの一部としてただ1個の改行文字を「消費」し、 その他はそれぞれゼロ個か2個の改行を消費するからです。 Calc はそのようなデリミタを含む式全体を操作せねばならないとき、 本命のパターンが最も自然な挙動を示します。

正規表現についての完全な詳細は Emacs マニュアルを見てください。 ですが便利のために、特殊な意味を消すためにバックスラッシュを付ける必要がある 特殊文字のリストをここに示します: `. * + ? [ ] ^ $ \' (リスト中のバックスラッシュに注目。 例えば `\[' にマッチさせるには、"\\\\\\["としなければなりません。 これら6個のバックスラッシュそれぞれの意味を説明するのは、 ちょっとした練習問題です。(^_^)v

calc-embedded-close-formula は式終端デリミタの正規表現を保持します。 前の例に対応する終端デリミタは、"\\'\\|\n$\\|\\$\\$?" になります。 ほとんど同じですが、`\'' (バッファ末尾) と、 `\n$' (行末の改行。空行を表現するもうひとつの方法で、この場合にふさわしい) の部分が異なります。

calc-embedded-open-word 変数と calc-embedded-close-word 変数は、 M-# e ではなく M-# w を実行したときに使われる、類似の表現です。

calc-embedded-open-plain 変数は、d p モードを使って 「プレーン式」を整形された式の前に置くときに使われる文字列です。 これは実際の文字列であって、正規表現ではないことに注意。 その理由は、Calc はこの文字列の認識のみならず、 バッファへの書込みもできなければならないからです。 デフォルトの文字列は "%%% " です(うしろにスペースがあることに注意)。

calc-embedded-close-plain 変数は、「プレーン式」の末尾に付く文字列です。 デフォルトは " %%%\n" です。最後の改行が無ければ、 後ろに付く「big」式の1行目がズレてしまいます。

calc-embedded-open-new-formula 変数は、M-# f を打ったときに 新しい式の前に挿入される文字列です。 デフォルト値は "\n\n" です。 もしこの文字列が改行文字ではじまって、 かつ行頭でM-# f が打たれた場合、 この最初の改行は飛ばされて、不必要な空行の取込みを回避します。

calc-embedded-close-new-formula 変数は、 新しい式の終端に対応して挿入される文字列です。 そのデフォルト値もやはり "\n\n" です。 行末で M-# f を使うと、最後の改行文字は省略されます。 (結局、空行で M-# f を打つと、前方の開始改行と後方の終端改行の両方が 省略されることになります。)

calc-embedded-announce-formula 変数は、 埋込み式(embedded formula)がその後に来るはずの正規表現です。 M-# a コマンドは、 `=>'`:=' 演算子を探すのと同様に このパターンを探します。 注意: M-# a は、式デリミタで囲まれたものを、 単純に何もかもアクティブ化しているわけではありません。 だって、デフォルトでは空行が式と見なされてしまうじゃないですか! しかし、もしユーザーが使う言語が式の前でのみ出現するデリミタを持っていたなら、 その長所を生かすことができます。 デフォルトのパターンは "%Embed\n\\(% .*\n\\)*" で、 `%Embed' に続いた、 行頭に `%' とスペースがある行(何行でも)にマッチします。 後半部分は、 Calc にモード注釈部をパターンの一部として認識させて、 式の開始デリミタが確実にパターンマッチするためには重要です。

calc-embedded-open-mode 変数は、 モード設定注釈に先行するべき文字列(正規表現ではなく)です。 Calc はこの文字列をスキャンするわけではなく、 設定注釈そのものを探します。 しかし、Calc が自分で設定注釈を書込む際に、 開始カッコの前に挿入される文字列です。 デフォルトは "% " です。

calc-embedded-close-mode 変数は、 Calc が書くモード設定注釈の後ろに来る文字列です。 そのデフォルト値は単なる改行 "\n" です。 もしこれを変更する場合でも、その最後はやはり改行で終らせて、 モード設定注釈が独立した行に現れるようにするのが利口なやりかたです。


Go to the first, previous, next, last section, table of contents.     利用度数