La función line-number-at-pos
(cuando se repite unas 50 veces) está causando una desaceleración notable en los búferes semi-grandes, por ejemplo, 50,000 líneas, cuando el punto está cerca del final del búfer. Por desaceleración, me refiero a un total combinado de aproximadamente 1.35 segundos.
En lugar de usar una elisp
función 100% para contar líneas y pasar a la parte superior del búfer, me interesaría un método híbrido que aproveche las habilidades C integradas responsables del número de línea que aparece en la línea de modo. El número de línea que aparece en la línea de modo se produce a la velocidad de la luz, independientemente del tamaño del búfer.
Aquí hay una función de prueba:
(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))
fuente
line-number-display-limit-width
que exceden el valor predeterminado de 200, como descubrí aquí .i
se reemplace(string-to-number (format-mode-line "%l"))
por la primera prueba, y la segunda letrai
se reemplace(line-number-at-pos)
por la segunda prueba.nlinum.el usa lo siguiente:
con la siguiente configuración adicional en la función de modo:
fuente
line-number-at-pos
podría sustituirse con la respuesta por Constantino, y que podría acelerar su biblioteca aún más de lo que ya su - especialmente en las grandes memorias intermedias.count-lines
también debe arreglarse usando el método de Constantine. Incluso estaba pensando en enviar una presentación de buzón de sugerencias a la línea directa report-emacs-bug para corregir esas funciones.