Voici ce que j'ai:
(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))
Mon intention est d'ajouter ceci pour post-command-hook
trouver des lignes où je duplique la logique, mais lorsque j'exécute la commande une deuxième fois, c'est inefficace (et l'ancien verrouillage de police est toujours en vigueur).
Le deuxième problème est dû au fait que le verrouillage des polices ne se rafraîchit pas. J'ai essayé d'ajouter un (font-lock-mode -1) (font-lock-mode 1)
à la définition, mais c'était inefficace.
Je n'ai aucune idée de la raison pour laquelle la commande ne serait valable que pour une seule exécution, cependant.
highlight-lines-matching-regexp
intérieur(let ((hi-lock-mode -1)) .. )
. J'ai fait ça pour résoudre le même problème: github.com/kaushalmodi/.emacs.d/blob/…unhighlight-regexp
peut également être utilisé. Quoi qu'il en soit, cette fonctionnalité est probablement mieux implémentée à l'aide d'une fonction de correspondance de verrouillage de police qui analyse le tampon pour les lignes en double et leur applique une surbrillance. Cela gérerait la mise en surbrillance automatiquement une fois qu'il n'y a pas de lignes en double.highlight-lines-matching-regexp
doit être applicable à ce cas - c'est presque une chaussure. (Bien que j'aie également pensé à utiliser des superpositions, mais c'est un concept que je connais moins bien.)delete-duplicate-lines
, puis différencier deux tampons.Réponses:
Jetez un œil
font-lock-keywords
après avoir appelé votre fonction. Vous verrez qu'il a juste l'expression rationnelle pour la première ligne comme expression rationnelle à polices. Tout ce que vous avez fait était de choisir une ligne donnée et de mettre une expression rationnelle pour la faire correspondrefont-lock-keywords
- donc seuls les doublons de cette ligne sont mis en évidence. IOW, l'expression rationnelle de cette première ligne est codée en durfont-lock-keywords
.Au lieu de cela, vous pouvez utiliser un
FUNCTION
infont-lock-keywords
. Mais je voudrais simplement rechercher dans le tampon des doublons de chaque ligne, à mon tour, et ne pas m'embêter avecfont-lock-keywords
.Voici une solution rapide. Il utilise la fonction
hlt-highlight-region
de la bibliothèque Highlight (highlight.el
), mais vous pouvez utiliser autre chose si vous le souhaitez.Et voici une version qui fonctionne sur (a) la région active ou (b) le tampon complet si la région n'est pas active:
Et si vous voulez un visage différent pour chaque ensemble de doublons, liez simplement une variable
face
dans lelet
, etsetq
à(hlt-next-face)
côté de l'endroit oùline-re
est défini, et remplacez-lefont-lock-warning-face
parface
. L'optionhlt-auto-face-backgrounds
contrôle les faces utilisées.la source
setq: Symbol's value as variable is void: hlt-highlight-line-dups-ignore-regexp
. Comment cette variable est-elle définie?Que diriez-vous d'utiliser la superposition au lieu du verrouillage de police?
Créer une région, puis
M-x my-highlight-duplicate-lines-in-region
vous pouvez effacer toutes les superpositions enM-x ov-clear
la source
C'est un peu sommaire, mais avec un peu d'effort (voir C-h f
ediff-buffers
RETpour les informations sur l'HOOK
argument), vous pourriez le faire afficher mieux / effectuer un meilleur nettoyage en quittant le mode diff:la source
Amélioration de la réponse ci-dessus par Shingo Fukuyama.
Cette version vérifie les lignes en double dans la région active mais s'il n'y en a pas, recherche tout le tampon.
la source