2

(この質問のタイトルが正しいかどうかはわかりません)

'色'を同時に変更するいくつかのマイナーモードを使用する場合、どのモードが何を表示するかをどの順序で決定するのですか?たとえば、私は両方highlight-changes-modeとを使用しようとしています:http rainbow-mode: //julien.danjou.info/projects/emacs-packages

私が抱えている問題は、バッファに新しい色(たとえば#306090)を入力すると、#306090文字の背景色がレインボーモードで表示されるのではなく、(行全体)変更されたとおり(私が使用しているため、私はとてもhighlight-changes-mode気に入っています)。

私の質問はちょっと一般的なものです:ここでどの「順序」の競合が解決されるかを決定するものは何ですか?さまざまなモードのロード順序に依存しますか?

4

1 に答える 1

6

モードのロード順序には依存しません。モードが面を適用するために使用するそれぞれのメカニズムによって異なります。

rainbow-modeを使用font-lockしてテキストを強調表示し、いわゆるテキスト プロパティを使用します。テキスト プロパティは、文字列オブジェクトの固有のプロパティであり、どのバッファーにも含まれていない文字列オブジェクトに属することができます。(したがって、テキスト プロパティは、たとえば、切り取りと貼り付けを行っても存続します。)

highlight-changes-mode対照的に、仮想テキスト プロパティと考えることができる「オーバーレイ」を使用します。オーバーレイが指定できるプロパティの中に顔があります。オーバーレイ プロパティは、文字列自体のプロパティではありません (そのため、切り取りと貼り付けには耐えられません)。

バッファ部分文字列の text プロパティとその部分文字列を覆うオーバーレイによって互換性のない面属性が指定されている場合、オーバーレイが優先されます。(テキスト プロパティが前景色を指定し、背景色を指定せず、オーバーレイが単に背景色を指定する場合のように、面の属性に互換性がない場合は、予想どおりにマージされます。)

一般に、面をマージするための規則は複雑です。オーバーレイ自体が、バッファ位置に表示する文字列を指定でき、その文字列が独自のテキスト プロパティを持つことができ、そのような場合はさまざまな規則で管理されるためです。また、マウス ハイライトやモード ライン フェースなどの特定の組み込みフェースは、独自の規則によって管理されます。詳細については、情報ノード「(elisp) Faces」および「(elisp) Overlays」を参照してください。完全なストーリーについては、表示ルーチンのソース コードを確認する必要があります (おそらく、xdisp.c の handle_face_prop と xfaces.c の face_at_string_position から始まります)。

于 2012-07-19T01:46:14.357 に答える