기능이 line-number-at-pos
약 50 회 반복 될 때 포인트가 버퍼의 끝 부분에 가까울 때 세미 대형 버퍼 (예 : 50,000 라인)에서 눈에 띄게 느려집니다. 느려짐에 따라 총 약 1.35 초가 합쳐집니다.
100 % elisp
funciton을 사용하여 라인을 계산하고 버퍼의 상단으로 이동하는 대신 모드 라인에 나타나는 라인 번호를 담당하는 내장 C 기능을 활용하는 하이브리드 방법에 관심이 있습니다. 모드 라인에 나타나는 라인 번호는 버퍼 크기에 관계없이 광속으로 발생합니다.
테스트 기능은 다음과 같습니다.
(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))