Commit 5481664a authored by Martin Rudalics's avatar Martin Rudalics

For selected window have (set-)window-point always operate on buffer's point.

* window.c (Fwindow_point): For the selected window always return
the position of its buffer's point.
(Fset_window_point): For the selected window always go in its
buffer to the specified position.
* window.el (window-point-1, set-window-point-1): Remove.
(window-in-direction, record-window-buffer)
(set-window-buffer-start-and-point, split-window-below)
(window--state-get-1, display-buffer-record-window): Replace
calls to window-point-1 and set-window-point-1 by calls to
window-point and set-window-point respectively.
parent 9f1ee09e
2012-08-21 Martin Rudalics <rudalics@gmx.at>
* window.el (window-point-1, set-window-point-1): Remove.
(window-in-direction, record-window-buffer)
(set-window-buffer-start-and-point, split-window-below)
(window--state-get-1, display-buffer-record-window): Replace
calls to window-point-1 and set-window-point-1 by calls to
window-point and set-window-point respectively.
2012-08-21 Glenn Morris <rgm@gnu.org> 2012-08-21 Glenn Morris <rgm@gnu.org>
* calendar/cal-tex.el (cal-tex-leftday, cal-tex-rightday): * calendar/cal-tex.el (cal-tex-leftday, cal-tex-rightday):
......
...@@ -1062,32 +1062,6 @@ windows nor the buffer list." ...@@ -1062,32 +1062,6 @@ windows nor the buffer list."
(dolist (walk-windows-window (window-list-1 nil minibuf all-frames)) (dolist (walk-windows-window (window-list-1 nil minibuf all-frames))
(funcall fun walk-windows-window)))) (funcall fun walk-windows-window))))
(defun window-point-1 (&optional window)
"Return value of WINDOW's point.
WINDOW can be any live window and defaults to the selected one.
This function is like `window-point' with one exception: If
WINDOW is selected, it returns the value of `point' of WINDOW's
buffer regardless of whether that buffer is current or not."
(setq window (window-normalize-window window t))
(if (eq window (selected-window))
(with-current-buffer (window-buffer window)
(point))
(window-point window)))
(defun set-window-point-1 (window pos)
"Set value of WINDOW's point to POS.
WINDOW can be any live window and defaults to the selected one.
This function is like `set-window-point' with one exception: If
WINDOW is selected, it moves `point' of WINDOW's buffer to POS
regardless of whether that buffer is current or not."
(setq window (window-normalize-window window t))
(if (eq window (selected-window))
(with-current-buffer (window-buffer window)
(goto-char pos))
(set-window-point window pos)))
(defun window-at-side-p (&optional window side) (defun window-at-side-p (&optional window side)
"Return t if WINDOW is at SIDE of its containing frame. "Return t if WINDOW is at SIDE of its containing frame.
WINDOW must be a valid window and defaults to the selected one. WINDOW must be a valid window and defaults to the selected one.
...@@ -1146,7 +1120,7 @@ IGNORE non-nil means a window can be returned even if its ...@@ -1146,7 +1120,7 @@ IGNORE non-nil means a window can be returned even if its
(last (+ first (if hor (last (+ first (if hor
(window-total-width window) (window-total-width window)
(window-total-height window)))) (window-total-height window))))
(posn-cons (nth 6 (posn-at-point (window-point-1 window) window))) (posn-cons (nth 6 (posn-at-point (window-point window) window)))
;; The column / row value of `posn-at-point' can be nil for the ;; The column / row value of `posn-at-point' can be nil for the
;; mini-window, guard against that. ;; mini-window, guard against that.
(posn (if hor (posn (if hor
...@@ -2613,7 +2587,7 @@ WINDOW must be a live window and defaults to the selected one." ...@@ -2613,7 +2587,7 @@ WINDOW must be a live window and defaults to the selected one."
;; Add an entry for buffer to WINDOW's previous buffers. ;; Add an entry for buffer to WINDOW's previous buffers.
(with-current-buffer buffer (with-current-buffer buffer
(let ((start (window-start window)) (let ((start (window-start window))
(point (window-point-1 window))) (point (window-point window)))
(setq entry (setq entry
(cons buffer (cons buffer
(if entry (if entry
...@@ -2657,7 +2631,7 @@ before was current this also makes BUFFER the current buffer." ...@@ -2657,7 +2631,7 @@ before was current this also makes BUFFER the current buffer."
;; Don't force window-start here (even if POINT is nil). ;; Don't force window-start here (even if POINT is nil).
(set-window-start window start t)) (set-window-start window start t))
(when point (when point
(set-window-point-1 window point)))) (set-window-point window point))))
(defcustom switch-to-visible-buffer t (defcustom switch-to-visible-buffer t
"If non-nil, allow switching to an already visible buffer. "If non-nil, allow switching to an already visible buffer.
...@@ -3393,7 +3367,7 @@ Otherwise, the window starts are chosen so as to minimize the ...@@ -3393,7 +3367,7 @@ Otherwise, the window starts are chosen so as to minimize the
amount of redisplay; this is convenient on slow terminals." amount of redisplay; this is convenient on slow terminals."
(interactive "P") (interactive "P")
(let ((old-window (selected-window)) (let ((old-window (selected-window))
(old-point (window-point-1)) (old-point (window-point))
(size (and size (prefix-numeric-value size))) (size (and size (prefix-numeric-value size)))
moved-by-window-height moved new-window bottom) moved-by-window-height moved new-window bottom)
(when (and size (< size 0) (< (- size) window-min-height)) (when (and size (< size 0) (< (- size) window-min-height))
...@@ -3418,7 +3392,7 @@ amount of redisplay; this is convenient on slow terminals." ...@@ -3418,7 +3392,7 @@ amount of redisplay; this is convenient on slow terminals."
(setq bottom (point))) (setq bottom (point)))
(and moved-by-window-height (and moved-by-window-height
(<= bottom (point)) (<= bottom (point))
(set-window-point-1 old-window (1- bottom))) (set-window-point old-window (1- bottom)))
(and moved-by-window-height (and moved-by-window-height
(<= (window-start new-window) old-point) (<= (window-start new-window) old-point)
(set-window-point new-window old-point) (set-window-point new-window old-point)
...@@ -3727,7 +3701,7 @@ specific buffers." ...@@ -3727,7 +3701,7 @@ specific buffers."
`((parameters . ,list)))) `((parameters . ,list))))
,@(when buffer ,@(when buffer
;; All buffer related things go in here. ;; All buffer related things go in here.
(let ((point (window-point-1 window)) (let ((point (window-point window))
(start (window-start window))) (start (window-start window)))
`((buffer `((buffer
,(buffer-name buffer) ,(buffer-name buffer)
...@@ -4020,7 +3994,7 @@ element is BUFFER." ...@@ -4020,7 +3994,7 @@ element is BUFFER."
(list 'other (list 'other
;; A quadruple of WINDOW's buffer, start, point and height. ;; A quadruple of WINDOW's buffer, start, point and height.
(list (window-buffer window) (window-start window) (list (window-buffer window) (window-start window)
(window-point-1 window) (window-total-size window)) (window-point window) (window-total-size window))
(selected-window) buffer)))) (selected-window) buffer))))
((eq type 'window) ((eq type 'window)
;; WINDOW has been created on an existing frame. ;; WINDOW has been created on an existing frame.
......
2012-08-21 Martin Rudalics <rudalics@gmx.at>
* window.c (Fwindow_point): For the selected window always return
the position of its buffer's point.
(Fset_window_point): For the selected window always go in its
buffer to the specified position.
2012-08-21 Dmitry Antipov <dmantipov@yandex.ru> 2012-08-21 Dmitry Antipov <dmantipov@yandex.ru>
Setter macros for fontsets. Setter macros for fontsets.
......
...@@ -1407,22 +1407,21 @@ DEFUN ("window-point", Fwindow_point, Swindow_point, 0, 1, 0, ...@@ -1407,22 +1407,21 @@ DEFUN ("window-point", Fwindow_point, Swindow_point, 0, 1, 0,
doc: /* Return current value of point in WINDOW. doc: /* Return current value of point in WINDOW.
WINDOW must be a live window and defaults to the selected one. WINDOW must be a live window and defaults to the selected one.
For a nonselected window, this is the value point would have For a nonselected window, this is the value point would have if that
if that window were selected. window were selected.
Note that, when WINDOW is the selected window and its buffer Note that, when WINDOW is selected, the value returned is the same as
is also currently selected, the value returned is the same as (point). that returned by `point' for WINDOW's buffer. It would be more strictly
It would be more strictly correct to return the `top-level' value correct to return the `top-level' value of `point', outside of any
of point, outside of any save-excursion forms. `save-excursion' forms. But that is hard to define. */)
But that is hard to define. */)
(Lisp_Object window) (Lisp_Object window)
{ {
register struct window *w = decode_live_window (window); register struct window *w = decode_live_window (window);
if (w == XWINDOW (selected_window) if (w == XWINDOW (selected_window))
&& current_buffer == XBUFFER (w->buffer)) return make_number (BUF_PT (XBUFFER (w->buffer)));
return Fpoint (); else
return Fmarker_position (w->pointm); return Fmarker_position (w->pointm);
} }
DEFUN ("window-start", Fwindow_start, Swindow_start, 0, 1, 0, DEFUN ("window-start", Fwindow_start, Swindow_start, 0, 1, 0,
...@@ -1532,16 +1531,27 @@ Return POS. */) ...@@ -1532,16 +1531,27 @@ Return POS. */)
register struct window *w = decode_live_window (window); register struct window *w = decode_live_window (window);
CHECK_NUMBER_COERCE_MARKER (pos); CHECK_NUMBER_COERCE_MARKER (pos);
if (w == XWINDOW (selected_window)
&& XBUFFER (w->buffer) == current_buffer)
Fgoto_char (pos);
else
set_marker_restricted (w->pointm, pos, w->buffer);
/* We have to make sure that redisplay updates the window to show if (w == XWINDOW (selected_window))
the new value of point. */ {
if (!EQ (window, selected_window)) if (XBUFFER (w->buffer) == current_buffer)
++windows_or_buffers_changed; Fgoto_char (pos);
else
{
struct buffer *old_buffer = current_buffer;
set_buffer_internal (XBUFFER (w->buffer));
Fgoto_char (pos);
set_buffer_internal (old_buffer);
}
}
else
{
set_marker_restricted (w->pointm, pos, w->buffer);
/* We have to make sure that redisplay updates the window to show
the new value of point. */
++windows_or_buffers_changed;
}
return pos; return pos;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment