Mercurial > emacs
changeset 55057:8ac1373b947e
(Info-restore-desktop-buffer): Move from desktop.el. Add Parameters.
(Info-desktop-buffer-misc-data): Move from desktop.el. Add parameter.
author | Lars Hansen <larsh@soem.dk> |
---|---|
date | Wed, 21 Apr 2004 20:51:06 +0000 |
parents | c7ded215e268 |
children | 053797c3d447 |
files | lisp/info.el |
diffstat | 1 files changed, 98 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/info.el Wed Apr 21 20:49:37 2004 +0000 +++ b/lisp/info.el Wed Apr 21 20:51:06 2004 +0000 @@ -480,7 +480,7 @@ (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 @@ (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 @@ (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 @@ (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 @@ (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 @@ 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 (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 @@ (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 @@ (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 @@ 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 @@ (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 @@ (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 @@ \\[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 @@ \\[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 @@ ;; 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 @@ ;; 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 @@ (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 @@ "^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