次: Hungry Delete, 前: Motion in C, 上: C Modes
Cモードとその関連モードでは、ある種の印字文字は『エレクトリック』です。
つまり、その文字自身を挿入することに加えて、
現在行を字下げし直したり、改行も挿入することさえあります。
この機能は、変数c-auto-newlineで制御されます。
『エレクトリック』文字は、{、}、:、#、
;、,、<、>、/、*、(、)です。
自動改行(auto-newline)機能がオン
(モード行のモード名のあとに`/a'と表示される)の場合に限り、
エレクトリック文字は改行を挿入します。
この機能は、変数c-auto-newlineで制御されます。
コマンドC-c C-aでこの機能をオン/オフできます。
c-toggle-auto-state)。
数引数を指定した場合、正ならば自動改行機能をオンにし、
負ならばオフにする。
コロン:はエレクトリックです。 なぜなら、単独のコロンの入力の解釈としてはそれが適切だからです。 しかし、C++で2つの連続するコロンを挿入する場合、 コロンのエレクトリックな動作は不便です。 C-c :と打てば、字下げも改行の挿入も行わずにコロンを2つ挿入できます。
c-scope-operator)。
エレクトリックキー#は、
プリプロセッサ指令の始まりと思われる位置では、行を字下げし直します。
変数c-electric-pound-behaviorの値が(alignleft)のときには、
このようになります。
この機能をオフにするには、
c-electric-pound-behaviorにnilを設定します。
変数c-hanging-braces-alistは、
挿入された中括弧の前/後への改行の挿入を制御します。
これは、(syntactic-symbol . nl-list)の形の要素
から成る連想リストです。
c-offsets-alistに現れるほとんどの構文シンボルは、
ここでも意味を持ちます。
リストnl-listは、シンボルbeforeかafterのいずれか、
あるいはその両方、もしくはnilを含みます。
中括弧が挿入されるときには、その中括弧が定義する構文上の文脈を
c-hanging-braces-alistから探します。
みつかれば、nl-listを使って
中括弧の前/後/前後のどこに改行を挿入するか決定します。
みつからなければ、デフォルトとして中括弧の前後に改行を挿入します。
変数c-hanging-colons-alistは、
挿入されたコロンの前/後への改行の挿入を制御します。
これは、(syntactic-symbol . nl-list)の形の要素
から成る連想リストです。
リストnl-listは、シンボルbeforeかafterのいずれか、
あるいはその両方、もしくはnilを含みます。
コロンが挿入されるときには、そのコロンが定義する構文シンボルを この連想リストから探します。 みつかれば、nl-listを使って コロンの前/後のどこに改行を挿入するか決定します。 みつからなければ、改行を挿入しません。
自動改行機能がオンのときには、エレクトリック文字は自動的に改行を削除します。
この機能により、
改行が不要だと思われるもっとも一般的な場面で改行を削除するので、
自動改行機能をユーザーにより受け入れやすくしています。
Emacsは改行を削除することが望ましいいくつかの場面を認識できますが、
変数c-cleanup-listを設定すれば、どの場面で行うか指定できます。
この変数の値はシンボルのリストです。
各要素は、改行を削除してよい場面を1つ指定します。
以下に指定できるシンボルとその意味を示します。
brace-catch-bracecatchやcondition以外に中括弧のあいだになにもないときに
`{'を打つと再配置する。
brace-else-braceelseに続けて`{'を打ったときに再配置するが、
中括弧とelseのあいだに空白以外の文字がない場合に限る。
brace-elseif-braceifの条件式を除いて、
`}'と`{'のあいだに空白以外の文字がない場合に限る。
empty-defun-bracesdefun-close-semistructや同様の型宣言のあとのセミコロンを閉じ中括弧と同じ行に再配置する。
セミコロンを打ったときに再配置する。
list-close-commascope-operator