2010-02-27 6 views
5

Je viens de lire Emacs :TODO indicator at left side, et l'ai essayé. Cela semble intrigant. Les petits triangles indicateurs apparaissent, mais j'ai un effet secondaire bizarre: le texte lui-même est modifié. Les caractères sont en cours de suppression.Emacs: indicateur TODO sur la frange gauche a un effet secondaire étrange - la suppression des caractères

Avant:

alt text http://i50.tinypic.com/25ge83s.jpg

Après:

alt text http://i46.tinypic.com/2qn4e94.jpg

Le mode en ligne n'indique que la mémoire tampon a été modifié après l'exécution annotate-todo. Qu'est-ce qui explique cela?

(j'utilise emacs 22.2.1 sur Windows)

+0

Ils n'ont pas été réellement effacés, mais affichés différemment. Ce qui est presque aussi bizarre. Je ne peux pas croire que je n'ai pas remarqué cet effet secondaire quand j'ai fait la première solution. Je crois que le nouveau fonctionne comme prévu. –

Répondre

5

Ahhh ... Je vois l'erreur de mes manières antérieures. Voici une nouvelle version.

(defun annotate-todo() 
    "put fringe marker on TODO: lines in the curent buffer" 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (while (re-search-forward "TODO:" nil t) 
     (let ((overlay (make-overlay (- (point) 5) (point)))) 
     (overlay-put overlay 'before-string (propertize (format "A") 
                 'display '(left-fringe right-triangle))))))) 

La première solution a utilisé un texte de la propriété 'display, qui modifie la façon dont le texte spécifié est affiché, dans ce cas, il a été remplacé par le triangle dans le left fringe. Ce que je devais faire était d'utiliser un 'before-stringoverlay à la place. Ce qui ne change pas la chaîne affichée.

Un autre avantage, le couper/coller du code annoté par celui-ci ne porte pas le balisage.

J'ai également mis à jour le code dans la question d'origine pour refléter ce changement.

+0

cela fonctionne parfaitement! Merci Trey – Cheeso

Questions connexes