Next: , Previous: , Up: キー設定   [Contents][Index]


5.6.3 閉じ括弧の自動入力

通常、‘「’ を入力したら、‘」’ を後で入力する必要があります。‘「’ の入 力時点で、対になる文字を自動挿入してくれると打鍵数を減らすことができます し、同時に入力忘れの防止にもなるでしょう。

そのために変数 skk-auto-insert-paren が用意されています。この値を non-nil にすると、上記の自動挿入を行います。

------ Buffer: foo ------
彼はこう言った∗
------ Buffer: foo ------

[

------ Buffer: foo ------
彼はこう言った「∗」
------ Buffer: foo ------

上記のように ‘「’ の入力時点で対となる‘」’を自動挿入し、‘「’と‘」’の間に ポイントを再配置するので、その位置からかぎかっこに囲まれた文字列を即始め ることができます。

ユーザ変数: skk-auto-paren-string-alist

自動挿入すべきペアの文字列を指定します。デフォルトは下記のとおり。

(("「" . "」") ("『" . "』") ("(" . ")") ("(" . ")") ("{" . "}")
 ("{" . "}") ("〈" . "〉") ("《" . "》") ("[" . "]") ("[" . "]")
 ("〔" . "〕") ("【" . "】") ("\"" . "\"") ("“" . "”") ("`" . "'"))

これは、ひと言でまとめると、「開き括弧と閉じ括弧とのコンスセルを集めたリ スト」です。各コンスセルの car にある文字列を挿入したときに、 cdr にある文字列が自動挿入されます。 66 67

キーとなる文字が挿入されても、その挿入後のポイントに自動挿入すべき文字が 既に存在している場合には、自動挿入されないように設計されています。

------ Buffer: foo ------
∗」
------ Buffer: foo ------

[

------ Buffer: foo ------
「∗」
------ Buffer: foo ------

対になる文字を複数挿入したい場合は、引数を渡して文字を指定します。

C-u 2 [

------ Buffer: foo ------
「「∗」」
------ Buffer: foo ------

yatex-mode など、既に同様の機能が付いているモードがあります。その ようなモードにおいてもこの自動挿入の機能が邪魔になることはないでしょうが、 特定のモードに限って自動入力機能をオフにしたい場合は、当該モードに入った ときにコールされるフック変数を利用して設定することができます。

(add-hook 'yatex-mode-hook
          (lambda ()
              (when skk-auto-insert-paren
                (make-local-variable 'skk-auto-insert-paren)
                (setq skk-auto-insert-paren nil))))

特定のモードにおいて、自動挿入すべき文字を変更したい場合にも同様にフック 変数を用いて操作できます。

(add-hook 'tex-mode-hook
          (lambda ()
              (when skk-auto-insert-paren
                (make-local-variable 'skk-auto-paren-string-alist)
                (setq skk-auto-paren-string-alist
                      (cons '("$" . "$") skk-auto-paren-string-alist)))))

同様に、特定のペアを削除したい場合は、例えば下記のように設定します。

(add-hook 'tex-mode-hook
          (lambda ()
              (when skk-auto-insert-paren
                (make-local-variable 'skk-auto-paren-string-alist)
                (setq skk-auto-paren-string-alist
                      (delete
                       '("$" . "$")
                       (copy-sequence skk-auto-paren-string-alist))))))

Footnotes

(66)

このリストの各要素の car の文字列は、必ず変数 skk-rom-kana-rule-list の規則によって入力されなければなりません。 例えば、‘(’ に対する ‘)’ を自動挿入するには

(setq skk-rom-kana-rule-list
      (append skk-rom-kana-rule-list
              '(("(" nil "("))))

のように設定する必要があります。

(67)

既に SKK モードになっているバッファで変数 skk-auto-paren-string-alist を変更した場合は、C-x C-j もし くは C-x j を 2 度タイプして skk-mode もしくは skk-auto-fill-mode を起動し直す必要があります。