[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12170: save-excursion fails boundary case with recenter
From: |
Stefan Monnier |
Subject: |
bug#12170: save-excursion fails boundary case with recenter |
Date: |
Fri, 10 Aug 2012 11:04:47 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) |
> (progn
> (defun f (n)
> (save-excursion (forward-line (- n)) (recenter 0)))
> (let ((buffer (switch-to-buffer "foo"))
> (height (1- (window-height (get-buffer-window "foo")))))
> (insert-char 10 (* height 2))
> (let ((pt (point)))
> (f height)
> (redisplay)
> (message "height %s old %s new %s" height pt (point)))))
As mentioned by Martin, this is a misunderstanding about what
save-excursion does and what `point' is.
Every buffer can have many different `point's (it basically has one per
window, accessible via `window-point' and changeable via
`set-window-point', plus one for itself, called `point').
`save-excursion' preserves only `point'.
`recenter' changes `window-point'.
But `point' and `window-point' are linked (point is set to window-point
and vice-versa in various occasions), so they're often confused.
It seems your real problem is not that `point' changes but that the
cursor ends up in a different position than the one you wanted (the
cursor position, is represented by `window-point' rather than by
`point'), right?
If so, you want to preserve window-point. And there's nothing quite
like save-excursion to preserve window-point. You can try
save-window-excursion, tho it will do a lot more than you asked for.
Or otherwise manually read window-point at the beginning and
set-window-point at the end.
Stefan
- bug#12170: save-excursion fails boundary case with recenter, (continued)
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/10
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/12
- bug#12170: save-excursion fails boundary case with recenter, Bill Brodie, 2012/08/11
- bug#12170: save-excursion fails boundary case with recenter,
Stefan Monnier <=
- bug#12170: save-excursion fails boundary case with recenter, Bill Brodie, 2012/08/10
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/10
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/10
- bug#12170: save-excursion fails boundary case with recenter, Eli Zaretskii, 2012/08/10
- bug#12170: save-excursion fails boundary case with recenter, martin rudalics, 2012/08/11