0

純粋に目を楽しませるために、モードラインに '((()))' (一重引用符なし) を表示するマイナー モードを 1 つ表示したいと思います。

rainbow-delimiters-modeです。これまでのところ、.emacsに次のものがあり、動作します。

(setq minor-mode-alist (cons '(rainbow-delimiters-mode " ((()))") minor-mode-alist))

ただし、モードライン内の括弧が虹区切りモードの動作を「反映」するように、モードライン内で 3 つの異なる色を使用したいと考えています。

どうすればいいですか?(実際の色と一致する色は気にしませんrainbow-delimiters-mode)

4

1 に答える 1

2

Emacs 24.2.1でテストされた、これはそれを行います:

(setq minor-mode-alist
      `((rainbow-delimiters-mode " ")
        (rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-1-face)))
        (rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-2-face)))
        (rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-3-face)))
        (rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-3-face)))
        (rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-2-face)))
        (rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-1-face)))
        ,@(assq-delete-all 'rainbow-delimiters-mode minor-mode-alist)))

文字列プロパティを使用して、マイナー モード インジケーターに色を追加します。この#("(" 0 1 (face foo-face))"構文では、[0, 1) の範囲のfaceプロパティが設定された 1 文字の文字列を指定します。foo-face

minor-mode-alist文字列は多くのプロパティを持つことができるため、文字ごとに異なる顔を持つ単一のエントリを指定できると期待されます。ただし、おそらく Emacs のバグにより、モード ラインを表示するときに、マイナー モード インジケーターの最初の文字のプロパティのみが考慮されます。これを回避するために、コードは Emacsminor-mode-alistが同じモードの複数のインジケーターをマージするという事実を利用しています。に対して、それぞれ独自の色のいくつかの文字列を指定し、から古い虹の区切り文字エントリを削除するためrainbow-delimiters-modeに使用します。assq-delete-allminor-mode-alist

完全を期すために、単一エントリのコードを次に示します。これは、最初の文字が面を指定していないため、Emacs 24.2.1 では無色に表示されます。

(setq minor-mode-alist
      `((rainbow-delimiters-mode #(" ((()))"
                                   1 2 (face rainbow-delimiters-depth-1-face)
                                   2 3 (face rainbow-delimiters-depth-2-face)
                                   3 4 (face rainbow-delimiters-depth-3-face)
                                   4 5 (face rainbow-delimiters-depth-3-face)
                                   5 6 (face rainbow-delimiters-depth-2-face)
                                   6 7 (face rainbow-delimiters-depth-1-face)))
        ,@(assq-delete-all 'rainbow-delimiters-mode minor-mode-alist)))
于 2012-10-24T22:21:03.867 に答える