From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#12253: Restore window start position Date: Thu, 23 Aug 2012 02:38:44 +0300 Organization: JURTA Message-ID: <87haru8rxr.fsf@mail.jurta.org> References: <878vd7vqji.fsf@mail.jurta.org> <50348568.5060401@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1345679152 24239 80.91.229.3 (22 Aug 2012 23:45:52 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 22 Aug 2012 23:45:52 +0000 (UTC) Cc: 12253@debbugs.gnu.org To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Aug 23 01:45:52 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1T4KcQ-0006Db-Ly for geb-bug-gnu-emacs@m.gmane.org; Thu, 23 Aug 2012 01:45:50 +0200 Original-Received: from localhost ([::1]:54053 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T4KcP-0001fY-5w for geb-bug-gnu-emacs@m.gmane.org; Wed, 22 Aug 2012 19:45:49 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:48754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T4KcE-0001ZE-Sy for bug-gnu-emacs@gnu.org; Wed, 22 Aug 2012 19:45:47 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T4KcC-0001Vu-FZ for bug-gnu-emacs@gnu.org; Wed, 22 Aug 2012 19:45:38 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34436) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T4KcC-0001Vp-B8 for bug-gnu-emacs@gnu.org; Wed, 22 Aug 2012 19:45:36 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1T4Kcc-0006Js-EV for bug-gnu-emacs@gnu.org; Wed, 22 Aug 2012 19:46:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 22 Aug 2012 23:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12253 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 12253-submit@debbugs.gnu.org id=B12253.134567914324268 (code B ref 12253); Wed, 22 Aug 2012 23:46:02 +0000 Original-Received: (at 12253) by debbugs.gnu.org; 22 Aug 2012 23:45:43 +0000 Original-Received: from localhost ([127.0.0.1]:43982 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T4KcH-0006JK-3c for submit@debbugs.gnu.org; Wed, 22 Aug 2012 19:45:43 -0400 Original-Received: from ps18281.dreamhost.com ([69.163.218.105]:36920 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T4Kc7-0006J0-6q for 12253@debbugs.gnu.org; Wed, 22 Aug 2012 19:45:32 -0400 Original-Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id CDA35451CC35; Wed, 22 Aug 2012 16:45:02 -0700 (PDT) In-Reply-To: <50348568.5060401@gmx.at> (martin rudalics's message of "Wed, 22 Aug 2012 09:08:24 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2.50 (x86_64-pc-linux-gnu) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:63411 Archived-At: > I fully agree with you. But I was curious whether setting the window > start position should be allowed to override any (goto-char opoint) > following or preceding it (just in case a window got resized during > navigation). I see what you mean - the problem handled by `set-window-buffer-start-and-point'. Of course, this function can't be used in Info, but its precautions of not forcing window-start (the argument NOFORCE of `set-window-start') and the order of calling `set-window-start' and `goto-char' afterward can be applied to Info like in the following patch (I guess using `set-window-point' instead of `goto-char' is not applicable to Info): === modified file 'lisp/info.el' --- lisp/info.el 2012-08-21 00:12:42 +0000 +++ lisp/info.el 2012-08-22 23:35:48 +0000 @@ -40,11 +40,11 @@ (defgroup info nil (defvar Info-history nil "Stack of Info nodes user has visited. -Each element of the stack is a list (FILENAME NODENAME BUFFERPOS).") +Each element of the stack is a list (FILENAME NODENAME BUFFERPOS WINDOWPOS).") (defvar Info-history-forward nil "Stack of Info nodes user has visited with `Info-history-back' command. -Each element of the stack is a list (FILENAME NODENAME BUFFERPOS).") +Each element of the stack is a list (FILENAME NODENAME BUFFERPOS WINDOWPOS).") (defvar Info-history-list nil "List of all Info nodes user has visited. @@ -922,7 +925,7 @@ (defun Info-find-node (filename nodename ;; Record the node we are leaving, if we were in one. (and (not no-going-back) Info-current-file - (push (list Info-current-file Info-current-node (point)) + (push (list Info-current-file Info-current-node (point) (window-start)) Info-history)) (Info-find-node-2 filename nodename no-going-back)) @@ -956,7 +959,7 @@ (defun Info-revert-find-node (filename n (pline (count-lines (point-min) (line-beginning-position))) (wline (count-lines (point-min) (window-start))) (new-history (and Info-current-file - (list Info-current-file Info-current-node (point))))) + (list Info-current-file Info-current-node (point) (window-start))))) ;; When `Info-current-file' is nil, `Info-find-node-2' rereads the file. (setq Info-current-file nil) (Info-find-node filename nodename) @@ -1226,7 +1229,8 @@ (defun Info-find-node-2 (filename nodena (let ((hist (car Info-history))) (setq Info-history (cdr Info-history)) (Info-find-node (nth 0 hist) (nth 1 hist) t) - (goto-char (nth 2 hist)))))) + (set-window-start (selected-window) (nth 3 hist) t) + (goto-char (nth 2 hist)))))) ;; Cache the contents of the (virtual) dir file, once we have merged ;; it for the first time, so we can save time subsequently. @@ -2002,7 +2008,7 @@ (defun Info-search (regexp &optional bou (equal ofile Info-current-file)) (and isearch-mode isearch-wrapped (eq opoint (if isearch-forward opoint-min opoint-max))) - (setq Info-history (cons (list ofile onode opoint) + (setq Info-history (cons (list ofile onode opoint ostart) Info-history)))))) (defun Info-search-case-sensitively () @@ -2208,16 +2214,18 @@ (defun Info-history-back () (or Info-history (user-error "This is the first Info node you looked at")) (let ((history-forward - (cons (list Info-current-file Info-current-node (point)) + (cons (list Info-current-file Info-current-node (point) (window-start)) Info-history-forward)) - filename nodename opoint) + filename nodename opoint ostart) (setq filename (car (car Info-history))) (setq nodename (car (cdr (car Info-history)))) (setq opoint (car (cdr (cdr (car Info-history))))) + (setq ostart (car (cdr (cdr (cdr (car Info-history)))))) (setq Info-history (cdr Info-history)) (Info-find-node filename nodename) (setq Info-history (cdr Info-history)) (setq Info-history-forward history-forward) + (set-window-start (selected-window) ostart t) (goto-char opoint))) (defalias 'Info-last 'Info-history-back) @@ -2228,12 +2236,14 @@ (defun Info-history-forward () (or Info-history-forward (user-error "This is the last Info node you looked at")) (let ((history-forward (cdr Info-history-forward)) - filename nodename opoint) + filename nodename opoint ostart) (setq filename (car (car Info-history-forward))) (setq nodename (car (cdr (car Info-history-forward)))) (setq opoint (car (cdr (cdr (car Info-history-forward))))) + (setq ostart (car (cdr (cdr (cdr (car Info-history-forward)))))) (Info-find-node filename nodename) (setq Info-history-forward history-forward) + (set-window-start (selected-window) ostart t) (goto-char opoint))) (add-to-list 'Info-virtual-files @@ -4307,7 +4317,7 @@ (defun Info-find-emacs-command-nodes (co (setq where (cons (list Info-current-file (match-string-no-properties 2) - 0) + 0 0) where)) (setq line-number (and (match-beginning 3) (string-to-number (match-string 3)))))