¿Cómo hacer que la cara de la región tenga prioridad sobre la cara `show-paren-mode`?

7

Estoy usando el show-paren-moderesaltado de expresión, cambiando la cara del fondo a un tono más claro que el fondo predeterminado. Me gusta mucho.

El problema es que cuando tengo una marca, la cara de fondo de la expresión paren sobrescribe la cara de fondo de la región marcada, por lo que parece extraño e inconsistente, y es difícil decir visualmente qué es toda la región, de un vistazo.

¿Hay alguna forma de configurar la cara de la región para que tenga una "prioridad" más alta que la cara show-paren-match?

levand
fuente
Esto es más difícil de lo que parece por una serie de razones, ¿estaría de acuerdo con aconsejar show-paren-modeque nunca se muestre algo si la región está activa?
wasamasa
@wasamasa: ¿qué tal establecer una prioridad más baja en la superposición que debería cubrirse? El valor de prioridad de la región definida en simple.eles '(nil . 100)- verredisplay-highlight-region-function
leyes
@wasamasa seguro, supongo que sería un recurso aceptable.
levand
@lawlist La documentación indica que las prioridades solo pueden ser números y cualquier otra cosa es solo para uso interno. Sin embargo, la región utiliza lo que parece ser una prioridad secundaria que no está documentada. He probado valores por debajo de 100, pero no tuvieron ningún efecto a menos que haya establecido la prioridad de show-paren a la nilque tuvo otro efecto secundario: mostrar la expresión resaltada en video inverso.
wasamasa
@lawlist Por supuesto, este podría ser mi tema que especifique algo más que un video inverso para la cara de la región, pero aún así, ese tipo de falla no debería suceder en primer lugar. Por eso propongo un enfoque alternativo.
wasamasa

Respuestas:

9

Opción de personalizar show-paren-prioritypara tener un valor negativo, por ejemplo, -50 .

No, esto no está documentado en ninguna parte. Sí, se presentó un error al respecto. No, el informe de error nunca fue respondido.

Vea los errores de Emacs # 20253 , # 15899 y # 16192 .

Dibujó
fuente
Frio. Esto funciona exactamente como uno esperaría que lo hiciera. Hurra por las características indocumentadas.
levand
2

Como no he encontrado una forma confiable y documentada de alterar las prioridades de superposición respectivas involucradas sin introducir fallas visuales no deseadas, he recurrido a aconsejar show-paren-function:

(defadvice show-paren-function (around inhibit-in-region activate)
  (if (region-active-p)
      (progn
        (delete-overlay show-paren--overlay)
        (delete-overlay show-paren--overlay-1))
    ad-do-it))

Esto simplemente desactiva cualquier resaltado si la región está activa.

wasamasa
fuente