Die Funktion line-number-at-pos
(wenn sie ungefähr 50 Mal wiederholt wird) bewirkt eine merkliche Verlangsamung in halbgroßen Puffern - z. B. 50.000 Zeilen -, wenn sich der Punkt nahe dem Ende des Puffers befindet. Mit Verlangsamung meine ich insgesamt ungefähr 1,35 Sekunden.
Anstatt eine 100% elisp
-Funktion zu verwenden, um Zeilen zu zählen und an die Spitze des Puffers zu gelangen, wäre ich an einer Hybridmethode interessiert, die die eingebauten C-Fähigkeiten nutzt, die für die Zeilennummer verantwortlich sind, die auf der Moduszeile erscheint. Die Zeilennummer, die in der Moduszeile erscheint, wird unabhängig von der Größe des Puffers mit Lichtgeschwindigkeit angezeigt.
Hier ist eine Testfunktion:
(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))
quelle
line-number-display-limit-width
die einen Wert von 200 überschreiten , wie ich hier herausgefunden habe .i
ist mit ersetzt(string-to-number (format-mode-line "%l"))
für den ersten Test, und der zweite Buchstabei
wird mit ersetzt(line-number-at-pos)
für den zweiten Test.nlinum.el verwendet Folgendes:
mit folgender extra konfiguration in der mode funktion:
quelle
line-number-at-pos
könnte durch die Antwort von Constantine ersetzt werden, und das würde Ihre Bibliothek noch mehr beschleunigen, als es bereits ist - besonders in großen Puffern.count-lines
sollte auch mit der Methode von Constantine behoben werden. Ich dachte sogar daran, eine Suggest-Box-Einsendung an die Hotline für Report-Emacs-Fehler zu senden, um diese Funktionen zu reparieren.