La funzione line-number-at-pos
(se ripetuta circa 50 volte) sta causando un notevole rallentamento nei buffer semi-grandi - ad esempio, 50.000 linee - quando il punto è vicino alla fine del buffer. Per rallentamento, intendo un totale combinato di circa 1,35 secondi.
Invece di usare una funzionalità al 100% elisp
per contare le righe e andare in cima al buffer, sarei interessato a un metodo ibrido che attinge alle abilità C integrate responsabili del numero di riga che appare sulla linea di modalità. Il numero di riga che appare sulla riga di modalità viene visualizzato alla velocità della luce, indipendentemente dalle dimensioni del buffer.
Ecco una funzione di test:
(defmacro measure-time (&rest body)
"Measure the time it takes to evaluate BODY.
http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html"
`(let ((time (current-time)))
,@body
(message "%.06f" (float-time (time-since time)))))
(measure-time
(let* (
line-numbers
(window-start (window-start))
(window-end (window-end)))
(save-excursion
(goto-char window-end)
(while
(re-search-backward "\n" window-start t)
(push (line-number-at-pos) line-numbers)))
line-numbers))