Package: emacs;
View this message in rfc822 format
From: Juri Linkov <juri <at> jurta.org> To: martin rudalics <rudalics <at> gmx.at> Cc: 12253 <at> debbugs.gnu.org Subject: bug#12253: Restore window start position Date: Sat, 25 Aug 2012 22:29:42 +0300
> I agree. How do you handle the case where *info* is not in the selected > window but some other one? We don't need to care about this case. When used programmatically, the caller should handle also the case when *info* is in another window, e.g.: (with-current-buffer "*info*" ... (Info-history-back) (set-window-start (window-in-direction 'below) opoint) ...) or some more specific logic when necessary. But for the normal case, I think the following patch should be enough: === modified file 'lisp/info.el' --- lisp/info.el 2012-08-21 00:12:42 +0000 +++ lisp/info.el 2012-08-25 19:29:04 +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,9 @@ (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) + (and (eq (window-buffer) (current-buffer)) + (window-start))) Info-history)) (Info-find-node-2 filename nodename no-going-back)) @@ -956,7 +961,9 @@ (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) + (and (eq (window-buffer) (current-buffer)) + (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,6 +1233,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) + (when (and (nth 3 hist) (eq (window-buffer) (current-buffer))) + (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 @@ -2002,7 +2013,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 +2219,21 @@ (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) + (and (eq (window-buffer) (current-buffer)) + (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) + (when (and ostart (eq (window-buffer) (current-buffer))) + (set-window-start (selected-window) ostart t)) (goto-char opoint))) (defalias 'Info-last 'Info-history-back) @@ -2228,12 +2244,15 @@ (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) + (when (and ostart (eq (window-buffer) (current-buffer))) + (set-window-start (selected-window) ostart t)) (goto-char opoint))) (add-to-list 'Info-virtual-files @@ -4307,7 +4326,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)))))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.