Emacsのshow-paren-modeが好きですが、角かっこを閉じるときの強調表示の動作を本当に変更したいと思います。
つまり、ポイントが閉じ角かっこ上にあるときに、開き角かっこが強調表示されるようにします。デフォルトの動作では、ポイントが閉じ角かっこに続く文字上にある場合、開き角かっこが強調表示されます。
これは簡単に変更できますか?また、show-paren-modeの動作をそのままにしておくことの潜在的なメリットにも興味があります。
Emacs 24.3以降、この機能はShowParenモードでは使用できません。
これは完全にテストされていないコード(ブラウザーに直接入力)で、カーソルの後ではなく前の閉じ括弧に一致するように[かっこを表示]モードを微調整しています。
(defadvice show-paren-function
(around show-paren-closing-before
activate compile)
(if (eq (syntax-class (syntax-after (point))) 5)
(save-excursion
(forward-char)
ad-do-it)
ad-do-it))
これは、カーソルの前の閉じ括弧も取得しますが、カーソルが閉じ括弧に続く閉じ括弧上にある場合は、カーソルの下の閉じ括弧が優先されます。これを修正して、カーソルがトリッキーに見える前に閉じ括弧を決して見ないようにします((flet ((char-syntax …)) ad-do-it)
などの大まかなハックで行うことができます)。
25.1には、次のことを可能にする変数があります。
(setq show-paren-when-point-inside-paren t)
show-paren-data-function
の値として独自の関数を提供できます。
,----
| show-paren-data-function is a variable defined in `paren.el'.
| Its value is show-paren--default
|
| This variable can be risky when used as a file-local variable.
|
| Documentation:
| Function to find the opener/closer at point and its match.
| The function is called with no argument and should return either nil
| if there's no opener/closer at point, or a list of the form
| (HERE-BEG HERE-END THERE-BEG THERE-END MISMATCH)
| Where HERE-BEG..HERE-END is expected to be around point.
----
インスピレーションについては、show-paren--default
の定義を参照してください。
advantage:終了パレンを追加するたびに、一致する開始パレンが表示されます。理にかなっていますね