From 5481664ac42e532f7636941e29cf31b3163587c6 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Tue, 21 Aug 2012 11:27:07 +0200 Subject: [PATCH] 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. --- lisp/ChangeLog | 9 +++++++++ lisp/window.el | 40 +++++++------------------------------- src/ChangeLog | 7 +++++++ src/window.c | 52 ++++++++++++++++++++++++++++++-------------------- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 11bdce9a230..3098d1657fc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-08-21 Martin Rudalics + + * 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 * calendar/cal-tex.el (cal-tex-leftday, cal-tex-rightday): diff --git a/lisp/window.el b/lisp/window.el index 142e80e1666..f6209730a7a 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1062,32 +1062,6 @@ windows nor the buffer list." (dolist (walk-windows-window (window-list-1 nil minibuf all-frames)) (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) "Return t if WINDOW is at SIDE of its containing frame. 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 (last (+ first (if hor (window-total-width 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 ;; mini-window, guard against that. (posn (if hor @@ -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. (with-current-buffer buffer (let ((start (window-start window)) - (point (window-point-1 window))) + (point (window-point window))) (setq entry (cons buffer (if entry @@ -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). (set-window-start window start t)) (when point - (set-window-point-1 window point)))) + (set-window-point window point)))) (defcustom switch-to-visible-buffer t "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 amount of redisplay; this is convenient on slow terminals." (interactive "P") (let ((old-window (selected-window)) - (old-point (window-point-1)) + (old-point (window-point)) (size (and size (prefix-numeric-value size))) moved-by-window-height moved new-window bottom) (when (and size (< size 0) (< (- size) window-min-height)) @@ -3418,7 +3392,7 @@ amount of redisplay; this is convenient on slow terminals." (setq bottom (point))) (and moved-by-window-height (<= bottom (point)) - (set-window-point-1 old-window (1- bottom))) + (set-window-point old-window (1- bottom))) (and moved-by-window-height (<= (window-start new-window) old-point) (set-window-point new-window old-point) @@ -3727,7 +3701,7 @@ specific buffers." `((parameters . ,list)))) ,@(when buffer ;; All buffer related things go in here. - (let ((point (window-point-1 window)) + (let ((point (window-point window)) (start (window-start window))) `((buffer ,(buffer-name buffer) @@ -4020,7 +3994,7 @@ element is BUFFER." (list 'other ;; A quadruple of WINDOW's buffer, start, point and height. (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)))) ((eq type 'window) ;; WINDOW has been created on an existing frame. diff --git a/src/ChangeLog b/src/ChangeLog index 5a7c6923029..15eac722f8e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-08-21 Martin Rudalics + + * 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 Setter macros for fontsets. diff --git a/src/window.c b/src/window.c index 9045721009d..4d92566b243 100644 --- a/src/window.c +++ b/src/window.c @@ -1407,22 +1407,21 @@ DEFUN ("window-point", Fwindow_point, Swindow_point, 0, 1, 0, doc: /* Return current value of point in WINDOW. WINDOW must be a live window and defaults to the selected one. -For a nonselected window, this is the value point would have -if that window were selected. - -Note that, when WINDOW is the selected window and its buffer -is also currently selected, the value returned is the same as (point). -It would be more strictly correct to return the `top-level' value -of point, outside of any save-excursion forms. -But that is hard to define. */) +For a nonselected window, this is the value point would have if that +window were selected. + +Note that, when WINDOW is selected, the value returned is the same as +that returned by `point' for WINDOW's buffer. It would be more strictly +correct to return the `top-level' value of `point', outside of any +`save-excursion' forms. But that is hard to define. */) (Lisp_Object window) { register struct window *w = decode_live_window (window); - if (w == XWINDOW (selected_window) - && current_buffer == XBUFFER (w->buffer)) - return Fpoint (); - return Fmarker_position (w->pointm); + if (w == XWINDOW (selected_window)) + return make_number (BUF_PT (XBUFFER (w->buffer))); + else + return Fmarker_position (w->pointm); } DEFUN ("window-start", Fwindow_start, Swindow_start, 0, 1, 0, @@ -1532,16 +1531,27 @@ Return POS. */) register struct window *w = decode_live_window (window); 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 - the new value of point. */ - if (!EQ (window, selected_window)) - ++windows_or_buffers_changed; + if (w == XWINDOW (selected_window)) + { + if (XBUFFER (w->buffer) == current_buffer) + 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; } -- 2.39.5