このSEの使用例は、region
顔の周りにボックスを配置することです。そのためtransient-mark-mode
、領域が他のオーバーレイと重なっている場合でも、で強調表示された領域が表示されます。
(set-face-attribute 'region nil
:box '(:line-width -1
:color "gtk_selection_bg_color"
:style nil))
たとえば、次のようにiedit-mode
:
テキストが「ボックス領域」で強調表示されるたびに、説明されているテキストの幅がちらつくのがわかります。
このちらつきを解消するために見つけた汚いハックは、背景色のボックスをdefault
顔に追加することです。残念ながら、このようなハッキングは、行間の追加のギャップやボタンウィジェットの不適切なレンダリング(カスタマイズバッファーなど)など、他の場所で多くの問題を引き起こします。
最終的な解決策は、次のバグレポートに記載されています(スレッドの最後にある添付のパッチを参照)。
有効なテキストの周囲のボックスでカーソルが動くカーソルのちらつき
このソリューションはEmacsの内部に影響を及ぼし、パッチを適用した後にEmacsのカスタムビルドが必要です。
私は後の解決策をすぐに試すつもりです。ただし、問題はinit.el
、ストックのEmacsビルドと互換性がなくなり、上記のパッチが適用されているかどうかを確認するために追加のロジックを使用する必要があることです。
うまくいけば、いくつかのテストの後、このパッチはEmacsソースに受け入れられるでしょう...
2019-01-21フォローアップ:
上記のパッチは最新のEmacsソースコードと互換性がないようです。現在のEmacs git masterブランチで動作させるために、いくつか変更を加える必要がありました。別のパッチを作成する代わりに、githubにフォークを作成し、フェイスボックスパッチを使用して上流からブランチを作成しました。
フェイスボックスパッチ
このブランチからEmacsをビルドすることは、ストックEmacsビルドと同じです。
以下は、init.el
パッチが適用されたバージョンとバニラのEmacsバージョンの両方と互換性のあるコードです。
(unwind-protect
(condition-case ex
(set-face-attribute
'region nil
:box '(:line-width (-1 . -1)
:color "gtk_selection_bg_color"
:style nil))
('error
(set-face-attribute
'region nil
:box '(:line-width -1
:color "gtk_selection_bg_color"
:style nil)))))
GTK +を搭載したLinuxでのみテストされています