Esto es lo que tengo:
(defun my-show-duplicate-lines ()
(interactive)
(highlight-lines-matching-regexp
(concat "^"
(regexp-quote
(substring-no-properties
(thing-at-point 'line) 0 -1))
"$")
font-lock-warning-face))
Mi intención es agregar esto para post-command-hook
encontrar líneas donde estoy duplicando la lógica, pero cuando ejecuto el comando por segunda vez, es ineficaz (y el bloqueo de fuente antiguo todavía está en vigor).
El segundo problema es causado por el bloqueo de fuente que no se actualiza. Intenté agregar un (font-lock-mode -1) (font-lock-mode 1)
a la definición, pero fue ineficaz.
Sin embargo, no tengo idea de por qué el comando solo sería bueno para una ejecución.
highlight-lines-matching-regexp
interior(let ((hi-lock-mode -1)) .. )
. Lo hice para resolver el mismo problema: github.com/kaushalmodi/.emacs.d/blob/…unhighlight-regexp
también puede ser usado. Independientemente de que esta característica probablemente se implemente mejor utilizando una función de coincidencia de bloqueo de fuente que escanea el búfer en busca de líneas duplicadas y les aplica resaltado. Esto manejaría la falta de resaltado automáticamente una vez que no haya líneas duplicadas.highlight-lines-matching-regexp
debe ser aplicable a este caso, es casi un zapato. (Aunque también pensé en usar superposiciones, pero ese es un concepto con el que estoy menos familiarizado)delete-duplicate-lines
, luego diferir dos búferes.Respuestas:
Eche un vistazo
font-lock-keywords
después de haber llamado a su función. Verá que solo tiene la expresión regular para la primera línea como la expresión regular para fontify. Todo lo que hizo fue tomar una línea determinada y poner unafont-lock-keywords
expresión regular para que coincida con ella , por lo que solo se resaltan los duplicados de esa línea. IOW, la expresión regular para esa primera línea está codificadafont-lock-keywords
.En su lugar, se puede usar una
FUNCTION
enfont-lock-keywords
. Pero solo buscaría en el búfer duplicados de cada línea, a su vez, y no me molestaríafont-lock-keywords
.Aquí hay una solución rápida. Utiliza la función
hlt-highlight-region
de la biblioteca Highlight (highlight.el
), pero puede usar algo más si lo desea.Y aquí hay una versión que funciona en (a) la región activa o (b) el búfer completo si la región no está activa:
Y si desea una cara diferente para cada conjunto de dups , simplemente vincule una variable
face
en ellet
, ysetq
al(hlt-next-face)
lado de dondeline-re
se establece, y reemplacefont-lock-warning-face
conface
. La opciónhlt-auto-face-backgrounds
controla las caras utilizadas.fuente
setq: Symbol's value as variable is void: hlt-highlight-line-dups-ignore-regexp
. ¿Cómo se define esta variable?¿Qué tal usar overlay en lugar de font-lock?
Haga una región y luego
M-x my-highlight-duplicate-lines-in-region
puede borrar todas las superposicionesM-x ov-clear
fuente
Esto es un poco incompleto, pero con algo de esfuerzo (vea C-h f
ediff-buffers
RETla información sobre elHOOK
argumento) podría hacer que se muestre mejor / realizar una limpieza mejor al salir del modo diff:fuente
Mejora en la respuesta anterior por Shingo Fukuyama.
Esta versión busca líneas duplicadas en la región activa, pero si no hay ninguna, busca en todo el búfer.
fuente