A documentação de Atributos de face sugere que adicionar um line-width
de -n
ao atributo box
desenhe uma linha de largura n cujas partes superior e inferior ocupem o espaço do texto subjacente, evitando assim qualquer aumento na altura do caractere.
Então, adicionei a seguinte linha ao meu arquivo de tema pessoal para candidatos a isearch ( lazy-highlight
):
`(lazy-highlight ((,class (:box (:line-width -1 :color ,search) :background ,bg1 :foreground ,fg1))))
Isso funciona bem, considerando a altura, no entanto, a largura do texto muda conforme visto no gif abaixo:
Existe alguma maneira de fazer a esquerda e a parte direita da caixa também ocuparem o texto subjacente para que não haja alteração na largura do texto?
Respostas:
Meu caso de uso para este SE é ter uma caixa em volta da
region
face, para que a região destacadatransient-mark-mode
seja visível mesmo quando a região se sobrepuser a outras sobreposições: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:É testado apenas no Linux com GTK +
fonte
eabs (s->face->box_line_width)
paramax (s->face->box_line_width, 0)
e nenhuma outra alteração.