[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Temporarily select-window, without updating mode-line face and curso
From: |
Stefan Monnier |
Subject: |
Re: Temporarily select-window, without updating mode-line face and cursor fill? |
Date: |
Sun, 02 May 2021 22:25:14 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
> If you had any concrete suggestions for calculating window positions
> (like window-start and window-end, not just buffer positions) in
> a non-active window without selecting it, which is superior to my
> approach, I’d be happy to hear.
We really should simply speed up `line-number-at-pos`.
It shouldn't be hard. See below what I do in nlinum.el.
Stefan
(defvar nlinum--line-number-cache nil)
(make-variable-buffer-local 'nlinum--line-number-cache)
;; We could try and avoid flushing the cache at every change, e.g. with:
;; (defun nlinum--before-change (start _end)
;; (if (and nlinum--line-number-cache
;; (< start (car nlinum--line-number-cache)))
;; (save-excursion (goto-char start) (nlinum--line-number-at-pos))))
;; But it's far from clear that it's worth the trouble. The current simplistic
;; approach seems to be good enough in practice.
(defun nlinum--after-change (&rest _args)
(setq nlinum--line-number-cache nil))
(defun nlinum--line-number-at-pos ()
"Like `line-number-at-pos' but sped up with a cache.
Only works right if point is at BOL."
;; (cl-assert (bolp))
(if nlinum-widen
(save-excursion
(save-restriction
(widen)
(forward-line 0) ;In case (point-min) was not at BOL.
(let ((nlinum-widen nil))
(nlinum--line-number-at-pos))))
(let ((pos
(if (and nlinum--line-number-cache
(> (- (point) (point-min))
(abs (- (point) (car nlinum--line-number-cache)))))
(funcall (if (> (point) (car nlinum--line-number-cache))
#'+ #'-)
(cdr nlinum--line-number-cache)
(count-lines (point) (car nlinum--line-number-cache)))
(line-number-at-pos))))
;;(assert (= pos (line-number-at-pos)))
(add-hook 'after-change-functions #'nlinum--after-change nil :local)
(setq nlinum--line-number-cache (cons (point) pos))
pos)))
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, (continued)
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, Eli Zaretskii, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, martin rudalics, 2021/05/03
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/03
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, martin rudalics, 2021/05/03
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, martin rudalics, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/02
Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/01
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, Eli Zaretskii, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?,
Stefan Monnier <=
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/02
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/04
- Re: Temporarily select-window, without updating mode-line face and cursor fill?, Stefan Monnier, 2021/05/04
Re: Temporarily select-window, without updating mode-line face and cursor fill?, Stefan Kangas, 2021/05/04
Re: Temporarily select-window, without updating mode-line face and cursor fill?, Eli Zaretskii, 2021/05/05
Re: Temporarily select-window, without updating mode-line face and cursor fill?, Stefan Kangas, 2021/05/05
Re: Temporarily select-window, without updating mode-line face and cursor fill?, Stefan Monnier, 2021/05/05
Re: Temporarily select-window, without updating mode-line face and cursor fill?, JD Smith, 2021/05/05