2010-02-27 9 views
5

Ho appena letto Emacs :TODO indicator at left side e l'ho provato. Sembra intrigante. Appaiono i piccoli triangoli indicatori, ma ho uno strano effetto collaterale: il testo stesso viene modificato. I personaggi sono stati cancellati.Emacs: l'indicatore TODO sulla frangia sinistra ha uno strano effetto collaterale - eliminazione dei caratteri

Prima:

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

Dopo:

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

La modalità riga non indica che il buffer è stato modificato dopo l'esecuzione annotate-todo. Cosa spiega questo?

(sto usando emacs 22.2.1 su Windows)

+0

Non sono stati effettivamente eliminati, solo visualizzati in modo diverso. Che è quasi icky. Non posso credere di non aver notato questo effetto collaterale quando ho fatto la prima soluzione. Credo che il nuovo funzioni come ci si aspetterebbe. –

risposta

5

Ahhh ... vedo l'errore dei miei modi precedenti. Ecco una nuova versione.

(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 prima soluzione utilizzata una struttura 'display testo, che cambia modalità di visualizzazione del testo specificato, in questo caso era sostituito dal triangolo nel left fringe. Quello che dovevo fare era usare un overlay invece. Che non cambia la stringa visualizzata.

Un altro vantaggio, il taglio/incolla del codice annotato da questo non porta il markup.

Ho aggiornato il codice nella domanda originale per riflettere anche questo cambiamento.

+0

funziona perfettamente! Grazie Trey – Cheeso

Problemi correlati