[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run.
From: |
Keith David Bershatsky |
Subject: |
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run. |
Date: |
Thu, 21 Jan 2016 13:11:48 -0800 |
> What do you need from window-scroll-functions? Only the correct
> values of window-start and window-end? Or something else?
Correct, I just need the 100% accurate `window-start` and `window-end`. :) :)
> The other thing I still don't understand is how forcing
> window-scroll-functions to run could fix your problem or _avoiding_
> extra calculations. Where and under what conditions would you call
> the function that forces Emacs to run window-scroll-functions?
I either need to use BOTH the `post-command-hook` and `window-scroll-functions`
hook; OR, just the WSF if it is forced to always run. WSF is needed (for sure)
whenever `window-start` and `window-end` have changed -- so PCH must do the
work the rest of the time. I had previously been using a poor test to GUESS
(from the PCH) whether WSF will run.
> Doesn't that waste processing in those cases where normally
> window-scroll-functions didn't need to be run (because window-start
> and window-end don't change)? IOW, aren't you running those costly
> calculations from window-scroll-functions?
If point moves left or right, the vertical ruler that tracks the cursor
position moves with the cursor -- so recalculation is needed. The vertical
ruler is on a 0.3 idle timer, and the horizontal ruler (with line numbers and
pilcrows) is on all the time. For the horizontal ruler, I have a test that
compares the previous window-start/end to the new window-start/end -- if it is
just cursor movement (instead of self-insert-command), then I use the
previously recorded list of calculations. Just moving the cursor
left/right/up/down within the same window bounds is much faster than typing or
deleting a character.
;; HORIZONTAL RULER (snippet)
(setq posn-list
(if
(and
hr-prev-start
(= hr-prev-start start)
hr-prev-end
(= hr-prev-end end)
+-posn-list
(or
(eq +-this-command 'lawlist-left-char)
(eq +-this-command 'lawlist-right-char)
(eq +-this-command 'lawlist-previous-line)
(eq +-this-command 'lawlist-next-line)
(eq +-this-command 'lawlist-forward-entity)
(eq +-this-command 'lawlist-backward-entity)
(eq +-this-command 'lawlist-forward-paragraph)
(eq +-this-command 'lawlist-backward-paragraph)
(eq +-this-command 'lawlist-end-of-visual-line)
(eq +-this-command 'lawlist-beginning-of-visual-line)))
+-posn-list
(posn start end vcol)))
The vertical ruler (on an idle timer) will use the previously recorded list of
calculations under a few limited circumstances.
;; VERTICAL RULER (snippet)
(setq posn-list
(if
(or
(not +-posn-list)
(and
(not force)
(memq last-command '(
special-yank
special-copy-selected-region
copy-selected-region
delete-word-or-whitespace
delete-forward-char
lawlist-backward-delete-char-untabify
lawlist-beginning-of-buffer
lawlist-end-of-buffer
beginning-of-buffer
end-of-buffer
scroll-up
scroll-down
lawlist-super-scroll-up
lawlist-super-scroll-down
lawlist-scroll-up
lawlist-scroll-down
lawlist-left-char
lawlist-right-char
left-char
right-char
lawlist-previous-line
lawlist-next-line
previous-line
next-line
lawlist-forward-entity
lawlist-backward-entity
lawlist-forward-paragraph
lawlist-backward-paragraph
forward-paragraph
backward-paragraph
lawlist-end-of-visual-line
lawlist-beginning-of-visual-line
end-of-visual-line
beginning-of-visual-line))))
(posn start end vcol)
+-posn-list))
> Finally, wouldn't running from pre-command-hook solve the problem?
> The values of window-start and window-end are known by then, and you
> can record the old values to compare them against new, to know when
> they change. No?
Basically any change to the text requires some type of recalculation -- e.g.,
line got shorter/longer, block of test was deleted/pasted.
Keith
- bug#22404: 25.1.50; Forcing `window-scroll-functions` to run., (continued)
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run.,
Keith David Bershatsky <=
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run., Keith David Bershatsky, 2016/01/28
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run., Keith David Bershatsky, 2016/01/29
bug#22404: 25.1.50; Forcing `window-scroll-functions` to run., Keith David Bershatsky, 2016/01/31