From c96111ea5502c92b1b0f25125bede71efbbc1b82 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Wed, 5 Oct 2011 10:59:13 +0200 Subject: [PATCH] New functions window-point-1 and set-window-point-1. * window.el (window-point-1, set-window-point-1): New functions. (window-in-direction, record-window-buffer, window-state-get-1) (display-buffer-record-window): Use window-point-1 instead of window-point. (set-window-buffer-start-and-point): Use set-window-point-1. --- lisp/ChangeLog | 5 +++++ lisp/window.el | 46 +++++++++++++++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e8196fbea75..91f66fcf938 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,11 @@ frame-auto-delete. Suggested by Stefan Monnier. (window--delete): Call frame-auto-hide-function instead of investigating frame-auto-delete. + (window-point-1, set-window-point-1): New functions. + (window-in-direction, record-window-buffer, window-state-get-1) + (display-buffer-record-window): Use window-point-1 instead of + window-point. + (set-window-buffer-start-and-point): Use set-window-point-1. 2011-10-05 Stefan Monnier diff --git a/lisp/window.el b/lisp/window.el index a8b506cb7bf..74460ae6058 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1058,6 +1058,32 @@ windows nor the buffer list." (dolist (walk-windows-window (window-list-1 nil minibuf all-frames)) (funcall proc 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-live-window window)) + (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-live-window window)) + (if (eq window (selected-window)) + (with-current-buffer (window-buffer window) + (goto-char pos)) + (set-window-point window pos))) + (defun window-in-direction-2 (window posn &optional horizontal) "Support function for `window-in-direction'." (if horizontal @@ -1087,7 +1113,7 @@ IGNORE, when 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 window) window))) + (posn-cons (nth 6 (posn-at-point (window-point-1 window) window))) ;; The column / row value of `posn-at-point' can be nil for the ;; mini-window, guard against that. (posn (if hor @@ -2492,7 +2518,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 window))) + (point (window-point-1 window))) (setq entry (cons buffer (if entry @@ -2534,10 +2560,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 - (if selected - (with-current-buffer buffer - (goto-char point)) - (set-window-point window point))))) + (set-window-point-1 window point)))) (defun switch-to-prev-buffer (&optional window bury-or-kill) "In WINDOW switch to previous buffer. @@ -3550,7 +3573,7 @@ specific buffers." ;; All buffer related things go in here - make the buffer ;; current when retrieving `point' and `mark'. (with-current-buffer (window-buffer window) - (let ((point (if selected (point) (window-point window))) + (let ((point (window-point-1 window)) (start (window-start window)) (mark (mark))) (window-list-no-nils @@ -3845,14 +3868,7 @@ element is BUFFER." (list 'other ;; A quadruple of WINDOW's buffer, start, point and height. (list (window-buffer window) (window-start window) - (if (eq window (selected-window)) - ;; When WINDOW is the selected window use its - ;; buffer's `point' instead of `window-point' - ;; (Bug#9626). - (with-current-buffer (window-buffer window) - (point)) - (window-point window)) - (window-total-size window)) + (window-point-1 window) (window-total-size window)) (selected-window) buffer)))) ((eq type 'window) ;; WINDOW has been created on an existing frame. -- 2.11.4.GIT