Meu caso de uso para este SE é ter uma caixa em volta da region
face, para que a região destacada transient-mark-mode
seja visível mesmo quando a região se sobrepuser a outras sobreposições:
(set-face-attribute 'region nil
:box '(:line-width -1
:color "gtk_selection_bg_color"
:style nil))
Por exemplo, com iedit-mode
:
Sempre que o texto é destacado com "região em caixa", posso ver a largura do texto descrita piscando.
O truque sujo que encontrei para eliminar essa tremulação é adicionar uma caixa com a cor de fundo à default
face. Infelizmente, esse hack introduziria vários problemas em outros lugares, como uma lacuna adicional entre linhas ou renderização incorreta de widgets de botão (por exemplo, em buffers de personalização).
A solução definitiva é fornecida no seguinte relatório de bug (consulte o patch anexado no final do thread):
Cintilação de texto movendo o cursor com a caixa ao redor do texto ativada
Essa solução afeta os componentes internos do Emacs e requer a criação personalizada do Emacs após a aplicação do patch.
Vou tentar a solução posterior em breve. O problema, no entanto, é que o meu init.el
se tornaria incompatível com as compilações do Emacs e precisará usar alguma lógica adicional para descobrir se o patch acima é aplicado.
Felizmente, depois de alguns testes, esse patch seria aceito na fonte do Emacs ...
Acompanhamento 2019-01-21 :
Parece que o patch mencionado acima não é compatível com o código-fonte Emacs mais recente. Eu tive que fazer algumas alterações para fazê-lo funcionar com o ramo principal do gmac do Emacs atual. Em vez de criar outro patch, fiz um fork no github e criei uma ramificação do upstream com o patch da caixa de face:
face-box-patch
Construir o Emacs a partir desse ramo é o mesmo que o Emacs cria.
A seguir está o init.el
código que deve ser compatível com as versões Emacs com patch e vanilla:
(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)))))
É testado apenas no Linux com GTK +