[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d3a4fe5694f: Fix use of 'display-buffer-alist' for Info buffers
From: |
Eli Zaretskii |
Subject: |
master d3a4fe5694f: Fix use of 'display-buffer-alist' for Info buffers |
Date: |
Sat, 6 Jan 2024 04:50:29 -0500 (EST) |
branch: master
commit d3a4fe5694f7bd1a09546d67d2cddc0f444d41ca
Author: Martin Rudalics <rudalics@gmx.at>
Commit: Eli Zaretskii <eliz@gnu.org>
Fix use of 'display-buffer-alist' for Info buffers
* lisp/info.el (info-pop-to-buffer): New function.
(info-other-window, info, Info-find-node, Info-revert-find-node)
(Info-next, Info-prev, Info-up, info-display-manual): Call
'info-pop-to-buffer'. (Bug#68081)
---
lisp/info.el | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 57 insertions(+), 10 deletions(-)
diff --git a/lisp/info.el b/lisp/info.el
index 39ca88c358c..f4384934155 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -732,8 +732,53 @@ in `Info-file-supports-index-cookies-list'."
(read-file-name "Info file name: " nil nil t))
(if (numberp current-prefix-arg)
(format "*info*<%s>" current-prefix-arg))))
- (info-setup file-or-node
- (switch-to-buffer-other-window (or buffer "*info*"))))
+ (info-pop-to-buffer file-or-node buffer t))
+
+(defun info-pop-to-buffer (&optional file-or-node buffer-or-name other-window)
+ "Put Info node FILE-OR-NODE in specified buffer and display it.
+Optional argument FILE-OR-NODE is as for `info'.
+
+If the optional argument BUFFER-OR-NAME is a buffer, use that
+buffer. If it is a string, use that string as the name of the
+buffer, creating it if it does not exist. Otherwise, use a
+buffer with the name `*info*', creating it if it does not exist.
+
+Optional argument OTHER-WINDOW nil means to prefer the selected
+window. OTHER-WINDOW non-nil means to prefer another window.
+Select the window used, if it has been made."
+ (let ((buffer (cond
+ ((bufferp buffer-or-name)
+ buffer-or-name)
+ ((stringp buffer-or-name)
+ (get-buffer-create buffer-or-name))
+ (t
+ (get-buffer-create "*info*")))))
+ (with-current-buffer buffer
+ (unless (derived-mode-p 'Info-mode)
+ (Info-mode)))
+
+ (let* ((window
+ (display-buffer buffer
+ (if other-window
+ '(nil (inhibit-same-window . t))
+ '(display-buffer-same-window)))))
+ (with-current-buffer buffer
+ (if file-or-node
+ ;; If argument already contains parentheses, don't add another set
+ ;; since the argument will then be parsed improperly. This also
+ ;; has the added benefit of allowing node names to be included
+ ;; following the parenthesized filename.
+ (Info-goto-node
+ (if (and (stringp file-or-node) (string-match "(.*)" file-or-node))
+ file-or-node
+ (concat "(" file-or-node ")")))
+ (if (and (zerop (buffer-size))
+ (null Info-history))
+ ;; If we just created the Info buffer, go to the directory.
+ (Info-directory))))
+
+ (when window
+ (select-window window)))))
;;;###autoload (put 'info 'info-file (purecopy "emacs"))
;;;###autoload
@@ -768,8 +813,8 @@ See a list of available Info commands in `Info-mode'."
;; of names that might have been wrapped (in emails, etc.).
(setq file-or-node
(string-replace "\n" " " file-or-node)))
- (info-setup file-or-node
- (pop-to-buffer-same-window (or buffer "*info*"))))
+
+ (info-pop-to-buffer file-or-node buffer))
(defun info-setup (file-or-node buffer)
"Display Info node FILE-OR-NODE in BUFFER."
@@ -789,6 +834,8 @@ See a list of available Info commands in `Info-mode'."
;; If we just created the Info buffer, go to the directory.
(Info-directory))))
+(make-obsolete 'info-setup "use `info-pop-to-buffer' instead" "30.1")
+
;;;###autoload
(defun info-emacs-manual ()
"Display the Emacs manual in Info mode."
@@ -927,7 +974,7 @@ If NOERROR, inhibit error messages when we can't find the
node."
(setq nodename (info--node-canonicalize-whitespace nodename))
(setq filename (Info-find-file filename noerror))
;; Go into Info buffer.
- (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
+ (or (derived-mode-p 'Info-mode) (info-pop-to-buffer filename))
;; Record the node we are leaving, if we were in one.
(and (not no-going-back)
Info-current-file
@@ -957,7 +1004,7 @@ otherwise, that defaults to `Top'."
"Go to an Info node FILENAME and NODENAME, re-reading disk contents.
When *info* is already displaying FILENAME and NODENAME, the window position
is preserved, if possible."
- (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
+ (or (derived-mode-p 'Info-mode) (info-pop-to-buffer filename))
(let ((old-filename Info-current-file)
(old-nodename Info-current-node)
(window-selected (eq (selected-window) (get-buffer-window)))
@@ -2290,7 +2337,7 @@ This command doesn't descend into sub-nodes, like
\\<Info-mode-map>\\[Info-forwa
(interactive nil Info-mode)
;; In case another window is currently selected
(save-window-excursion
- (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
+ (or (derived-mode-p 'Info-mode) (info-pop-to-buffer))
(Info-goto-node (Info-extract-pointer "next"))))
(defun Info-prev ()
@@ -2299,7 +2346,7 @@ This command doesn't go up to the parent node, like
\\<Info-mode-map>\\[Info-bac
(interactive nil Info-mode)
;; In case another window is currently selected
(save-window-excursion
- (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
+ (or (derived-mode-p 'Info-mode) (info-pop-to-buffer))
(Info-goto-node (Info-extract-pointer "prev[ious]*" "previous"))))
(defun Info-up (&optional same-file)
@@ -2308,7 +2355,7 @@ If SAME-FILE is non-nil, do not move to a different Info
file."
(interactive nil Info-mode)
;; In case another window is currently selected
(save-window-excursion
- (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
+ (or (derived-mode-p 'Info-mode) (info-pop-to-buffer))
(let ((old-node Info-current-node)
(old-file Info-current-file)
(node (Info-extract-pointer "up")) p)
@@ -5485,7 +5532,7 @@ completion alternatives to currently visited manuals."
(raise-frame (window-frame window))
(select-frame-set-input-focus (window-frame window))
(select-window window))
- (switch-to-buffer found)))
+ (info-pop-to-buffer nil found)))
;; The buffer doesn't exist; create it.
(info-initialize)
(info (Info-find-file manual)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d3a4fe5694f: Fix use of 'display-buffer-alist' for Info buffers,
Eli Zaretskii <=