Commit f3a45db0 authored by Lars Hansen's avatar Lars Hansen
Browse files

(Info-restore-desktop-buffer): Move from desktop.el. Add Parameters.

(Info-desktop-buffer-misc-data): Move from desktop.el. Add parameter.
parent 431f70e0
......@@ -480,7 +480,7 @@ in all the directories in that path."
(Info-goto-node file)
(Info-goto-node (concat "(" file ")")))
(if (zerop (buffer-size))
(Info-directory))))
(Info-directory))))
;;;###autoload
(defun info-emacs-manual ()
......@@ -535,15 +535,11 @@ just return nil (no error)."
(if (stringp filename)
(let (temp temp-downcase found)
(setq filename (substitute-in-file-name filename))
(cond
(cond
((string= (downcase filename) "dir")
(setq found t))
((string= filename "apropos")
(setq found 'apropos))
((string= filename "history")
(setq found 'history))
((string= filename "toc")
(setq found 'toc))
(t
(let ((dirs (if (string-match "^\\./" filename)
;; If specified name starts with `./'
......@@ -746,10 +742,6 @@ a case-insensitive match is tried."
(Info-insert-dir))
((eq filename 'apropos)
(insert-buffer-substring " *info-apropos*"))
((eq filename 'history)
(insert-buffer-substring " *info-history*"))
((eq filename 'toc)
(insert-buffer-substring " *info-toc*"))
(t
(info-insert-file-contents filename nil)
(setq default-directory (file-name-directory filename))))
......@@ -790,8 +782,6 @@ a case-insensitive match is tried."
(cond
((eq filename t) "dir")
((eq filename 'apropos) "apropos")
((eq filename 'history) "history")
((eq filename 'toc) "toc")
(t filename)))
))
;; Use string-equal, not equal, to ignore text props.
......@@ -853,8 +843,8 @@ a case-insensitive match is tried."
(when pos
(goto-char pos)
(throw 'foo t))
;; No such anchor in tag table or node in tag table or file
(error "No such node or anchor: %s" nodename)))
(error "No such anchor in tag table or node in tag table or file: %s"
nodename)))
(Info-select-node)
(goto-char (point-min))
......@@ -992,7 +982,9 @@ a case-insensitive match is tried."
nodename end)
(re-search-backward "^\^_")
(search-forward "Node: ")
(setq nodename (Info-following-node-name))
(setq nodename
(and (looking-at (Info-following-node-name-re))
(match-string 1)))
(search-forward "\n\^_" nil 'move)
(beginning-of-line)
(setq end (point))
......@@ -1306,6 +1298,8 @@ If FORK is a string, it is the name to use for the new buffer."
(if fork
(set-buffer
(clone-buffer (concat "*info-" (if (stringp fork) fork nodename) "*") t)))
(if (member (buffer-name) '("*info-history*" "*info-toc*"))
(switch-to-buffer "*info*"))
(let (filename)
(string-match "\\s *\\((\\s *\\([^\t)]*\\)\\s *)\\s *\\|\\)\\(.*\\)"
nodename)
......@@ -1622,60 +1616,75 @@ If SAME-FILE is non-nil, do not move to a different Info file."
(interactive)
(Info-find-node "dir" "top"))
;;;###autoload (add-hook 'same-window-buffer-names "*info-history*")
(defun Info-history ()
"Go to a node with a menu of visited nodes."
"Create the buffer *info-history* with a menu of visited nodes."
(interactive)
(let ((curr-file Info-current-file)
(curr-node Info-current-node)
p)
(with-current-buffer (get-buffer-create " *info-history*")
(let ((inhibit-read-only t))
(erase-buffer)
(goto-char (point-min))
(insert "\n\nFile: history Node: Top, Up: (dir)\n\n")
(insert "Recently Visited Nodes\n**********************\n\n")
(insert "* Menu:\n\n")
(let ((hl (delete '("history" "Top") Info-history-list)))
(while hl
(let ((file (nth 0 (car hl)))
(node (nth 1 (car hl))))
(if (and (string-equal file curr-file)
(string-equal node curr-node))
(setq p (point)))
(insert "* " node ": (" (file-name-nondirectory file)
")" node ".\n"))
(setq hl (cdr hl))))))
(Info-find-node "history" "Top")
(pop-to-buffer
(with-current-buffer (get-buffer-create "*info-history*")
(let ((inhibit-read-only t))
(erase-buffer)
(goto-char (point-min))
(insert "Node: History\n\n")
(insert "Recently Visited Nodes\n**********************\n\n")
(insert "* Menu:\n\n")
(let ((hl Info-history-list))
(while hl
(let ((file (nth 0 (car hl)))
(node (nth 1 (car hl))))
(if (and (string-equal file curr-file)
(string-equal node curr-node))
(setq p (point)))
(insert "* " node ": (" (file-name-nondirectory file)
")" node ".\n"))
(setq hl (cdr hl))))
(or (eq major-mode 'Info-mode) (Info-mode))
(setq Info-current-file "info-history")
(setq Info-current-node "Info History")
(Info-set-mode-line)
(if (not (bobp)) (Info-fontify-node))
(current-buffer))))
(goto-char (or p (point-min)))))
;;;###autoload (add-hook 'same-window-buffer-names "*info-toc*")
(defun Info-toc ()
"Go to a node with table of contents of the current Info file."
"Create the buffer *info-toc* with Info file's table of contents."
(interactive)
(let ((curr-file Info-current-file)
(curr-node Info-current-node)
p)
(with-current-buffer (get-buffer-create " *info-toc*")
(let ((inhibit-read-only t)
(node-list (Info-build-toc curr-file)))
(erase-buffer)
(goto-char (point-min))
(insert "\n\nFile: toc Node: Top, Up: (dir)\n\n")
(insert "Table of Contents\n*****************\n\n")
(insert "*Note Top::\n")
(Info-insert-toc
(nth 2 (assoc "Top" node-list)) ; get Top nodes
node-list 0 (file-name-nondirectory curr-file)))
(if (not (bobp))
(let ((Info-hide-note-references 'hide)
(Info-fontify-visited-nodes nil))
(Info-fontify-node)))
(goto-char (point-min))
(if (setq p (search-forward (concat "*Note " curr-node ":") nil t))
(setq p (- p (length curr-node) 2))))
(Info-find-node "toc" "Top")
(pop-to-buffer
(with-current-buffer (get-buffer-create "*info-toc*")
(if (not (equal Info-current-file curr-file))
(let ((inhibit-read-only t)
(node-list (Info-build-toc curr-file)))
(erase-buffer)
(goto-char (point-min))
(insert "Node: Contents\n\n")
(insert "Table of Contents\n*****************\n\n")
(insert "*Note Top::\n")
(Info-insert-toc
(nth 2 (assoc "Top" node-list)) ; get Top nodes
node-list 0)
(or (eq major-mode 'Info-mode) (Info-mode))
(setq Info-current-file curr-file)
(setq Info-current-node "Contents")
(Info-set-mode-line)))
(if (not (bobp))
(let ((Info-hide-note-references 'hide))
(Info-fontify-node)))
(goto-char (point-min))
(if (setq p (search-forward (concat "*Note " curr-node "::") nil t))
(setq p (- p (length curr-node) 2)))
(current-buffer)))
(goto-char (or p (point-min)))))
(defun Info-insert-toc (nodes node-list level curr-file)
(defun Info-insert-toc (nodes node-list level)
"Insert table of contents with references to nodes."
(let ((section "Top"))
(while nodes
......@@ -1683,8 +1692,8 @@ If SAME-FILE is non-nil, do not move to a different Info file."
(unless (member (nth 1 node) (list nil section))
(insert (setq section (nth 1 node)) "\n"))
(insert (make-string level ?\t))
(insert "*Note " (car nodes) ": (" curr-file ")" (car nodes) ".\n")
(Info-insert-toc (nth 2 node) node-list (1+ level) curr-file)
(insert "*Note " (car nodes) "::\n")
(Info-insert-toc (nth 2 node) node-list (1+ level))
(setq nodes (cdr nodes))))))
(defun Info-build-toc (file)
......@@ -2311,7 +2320,7 @@ name contains the word \"Index\", plus any immediately following
nodes whose names also contain the word \"Index\".
If there are no exact matches to the specified topic, this chooses
the first match which is a case-insensitive substring of a topic.
Use the \\<Info-mode-map>\\[Info-index-next] command to see the other matches.
Use the `,' command to see the other matches.
Give a blank topic name to go to the Index node itself."
(interactive
(list
......@@ -2366,7 +2375,7 @@ Give a blank topic name to go to the Index node itself."
(Info-index-next 0)))))
(defun Info-index-next (num)
"Go to the next matching index item from the last \\<Info-mode-map>\\[Info-index] command."
"Go to the next matching index item from the last `i' command."
(interactive "p")
(or Info-index-alternatives
(error "No previous `i' command"))
......@@ -2424,7 +2433,7 @@ Build a menu of the possible matches."
(ohist-list Info-history-list)
(current-node Info-current-node)
(current-file Info-current-file)
manuals matches node)
manuals matches temp-file node)
(let ((Info-fontify-maximum-menu-size 0)
Info-use-header-lines
Info-hide-note-references)
......@@ -2846,7 +2855,7 @@ Selecting other nodes:
\\[Info-history] Go to the history buffer.
\\[Info-toc] Go to the buffer with a table of contents.
\\[Info-index] Look up a topic in this file's Index and move to that node.
\\[Info-index-next] (comma) Move to the next match from a previous \\<Info-mode-map>\\[Info-index] command.
\\[Info-index-next] (comma) Move to the next match from a previous `i' command.
\\[Info-top-node] Go to the Top node of this file.
\\[Info-final-node] Go to the final node in this file.
\\[Info-backward-node] Go backward one node, considering all nodes as forming one sequence.
......@@ -2877,7 +2886,7 @@ Advanced commands:
\\[Info-search-case-sensitively] Search through this Info file
for specified regexp case-sensitively.
\\[Info-search-next] Search for another occurrence of regexp
from a previous \\<Info-mode-map>\\[Info-search] command.
from a previous `Info-search' command.
\\[Info-next-reference] Move cursor to next cross-reference or menu item.
\\[Info-prev-reference] Move cursor to previous cross-reference or menu item."
(kill-all-local-variables)
......@@ -2907,6 +2916,8 @@ Advanced commands:
;; This is for the sake of the invisible text we use handling titles.
(make-local-variable 'line-move-ignore-invisible)
(setq line-move-ignore-invisible t)
(make-local-variable 'desktop-buffer-misc-data-function)
(setq desktop-buffer-misc-data-function 'Info-desktop-buffer-misc-data)
(add-hook 'clone-buffer-hook 'Info-clone-buffer-hook nil t)
(add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
(Info-set-mode-line)
......@@ -3071,7 +3082,9 @@ COMMAND must be a symbol or string."
;; Get Info running, and pop to it in another window.
(save-window-excursion
(info))
(or (eq major-mode 'Info-mode) (pop-to-buffer "*info*"))
;; FIXME It would be cool if this could use a buffer other
;; than *info*.
(pop-to-buffer "*info*")
;; Bind Info-history to nil, to prevent the last Index node
;; visited by Info-find-emacs-command-nodes from being
;; pushed onto the history.
......@@ -3366,20 +3379,14 @@ Preserve text properties."
(add-text-properties (match-beginning 3) (match-end 3)
'(invisible t front-sticky nil rear-nonsticky t))
;; Unhide the file name of the external reference in parens
(if (and (match-string 6) (not (eq Info-hide-note-references 'hide)))
(if (match-string 6)
(remove-text-properties (match-beginning 6) (match-end 6)
'(invisible t front-sticky nil rear-nonsticky t)))
;; Unhide newline because hidden newlines cause too long lines
(save-match-data
(let ((beg3 (match-beginning 3))
(end3 (match-end 3)))
(if (and (string-match "\n[ \t]*" (match-string 3))
(not (save-match-data
(save-excursion
(goto-char (1+ end3))
(looking-at "[.)]*$")))))
(remove-text-properties (+ beg3 (match-beginning 0))
(+ beg3 (match-end 0))
(let ((start3 (match-beginning 3)))
(if (string-match "\n[ \t]*" (match-string 3))
(remove-text-properties (+ start3 (match-beginning 0)) (+ start3 (match-end 0))
'(invisible t front-sticky nil rear-nonsticky t))))))
(when (and Info-refill-paragraphs Info-hide-note-references)
(push (set-marker (make-marker) start)
......@@ -3708,6 +3715,24 @@ BUFFER is the buffer speedbar is requesting buttons for."
"^No \".*\" in index$"))
(add-to-list 'debug-ignored-errors mess))
;;;; Desktop support
(defun Info-desktop-buffer-misc-data (desktop-dirname)
"Auxiliary information to be saved in desktop file."
(list Info-current-file Info-current-node))
;;;###autoload
(defun Info-restore-desktop-buffer (desktop-buffer-file-name
desktop-buffer-name
desktop-buffer-misc)
"Restore an info buffer specified in a desktop file."
(let ((first (nth 0 desktop-buffer-misc))
(second (nth 1 desktop-buffer-misc)))
(when (and first second)
(with-no-warnings
(Info-find-node first second))
(current-buffer))))
(provide 'info)
;;; arch-tag: f2480fe2-2139-40c1-a49b-6314991164ac
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment