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-brace
catch
やcondition以外に中括弧のあいだになにもないときに
‘{’を打つと再配置する。
brace-else-brace
else
に続けて‘{’を打ったときに再配置するが、
中括弧とelse
のあいだに空白以外の文字がない場合に限る。
brace-elseif-brace
if
の条件式を除いて、
‘}’と‘{’のあいだに空白以外の文字がない場合に限る。
empty-defun-braces
defun-close-semi
struct
や同様の型宣言のあとのセミコロンを閉じ中括弧と同じ行に再配置する。
セミコロンを打ったときに再配置する。
list-close-comma
scope-operator