]> code.delx.au - gnu-emacs/blobdiff - lisp/info.el
*** empty log message ***
[gnu-emacs] / lisp / info.el
index 660af03c959fbf57c35c7e9111b4b2317044d32a..86642b7fd361f73004d26585e1dd35104304e29c 100644 (file)
@@ -61,9 +61,9 @@ The Lisp code is executed when the node is selected.")
   :group 'info)
 
 (defface info-node
-  '((((class color) (background light)) (:foreground "brown" :bold t :italic t))
-    (((class color) (background dark)) (:foreground "white" :bold t :italic t))
-    (t (:bold t :italic t)))
+  '((((class color) (background light)) (:foreground "brown" :weight bold :slant italic))
+    (((class color) (background dark)) (:foreground "white" :weight bold :slant italic))
+    (t (:weight bold :slant italic)))
   "Face for Info node names."
   :group 'info)
 
@@ -74,9 +74,9 @@ The Lisp code is executed when the node is selected.")
   :group 'info)
 
 (defface info-xref
-  '((((class color) (background light)) (:foreground "magenta4" :bold t))
-    (((class color) (background dark)) (:foreground "cyan" :bold t))
-    (t (:bold t)))
+  '((((class color) (background light)) (:foreground "magenta4" :weight bold))
+    (((class color) (background dark)) (:foreground "cyan" :weight bold))
+    (t (:weight bold)))
   "Face for Info cross-references."
   :group 'info)
 
@@ -999,7 +999,8 @@ Bind this in case the user sets it to nil."
        (if Info-fontify (Info-fontify-node))
        (if Info-use-header-line
            (Info-setup-header-line)
-         (setq Info-header-line nil))
+         (setq Info-header-line nil)
+         (setq header-line-format nil)) ; so the header line isn't displayed
        (run-hooks 'Info-selection-hook)))))
 
 (defun Info-set-mode-line ()
@@ -1406,6 +1407,13 @@ FOOTNOTENAME may be an abbreviation of the reference name."
 (defvar Info-complete-cache nil)
 
 (defun Info-complete-menu-item (string predicate action)
+  ;; This uses two dynamically bound variables:
+  ;; - `Info-complete-menu-buffer' which contains the buffer in which
+  ;; is the menu of items we're trying to complete.
+  ;; - `Info-complete-next-re' which, if non-nil, indicates that we should
+  ;; also look for menu items in subsequent nodes as long as those
+  ;; nodes' names match `Info-complete-next-re'.  This feature is currently
+  ;; only used for completion in Info-index.
   (save-excursion
     (set-buffer Info-complete-menu-buffer)
     (let ((completion-ignore-case t)
@@ -2143,17 +2151,17 @@ If no reference to follow, moves to the next node, or up if none."
 
 (defvar info-tool-bar-map
   (if (display-graphic-p)
-      (let ((tool-bar-map (make-sparse-keymap)))
-       (tool-bar-add-item-from-menu 'Info-exit "close" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-prev "left_arrow" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-next "right_arrow" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-up "up_arrow" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-last "undo" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-top-node "home" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-index "index" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-goto-node "jump_to" Info-mode-map)
-       (tool-bar-add-item-from-menu 'Info-search "search" Info-mode-map)
-       tool-bar-map)))
+      (let ((map (make-sparse-keymap)))
+       (tool-bar-local-item-from-menu 'Info-exit "close" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-prev "left_arrow" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-next "right_arrow" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-up "up_arrow" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-last "undo" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-top-node "home" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-index "index" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-goto-node "jump_to" map Info-mode-map)
+       (tool-bar-local-item-from-menu 'Info-search "search" map Info-mode-map)
+       map)))
 
 (defvar Info-menu-last-node nil)
 ;; Last node the menu was created for.
@@ -2264,7 +2272,7 @@ Selecting other nodes:
 \\[Info-prev]  Move to the \"previous\" node of this node.
 \\[Info-up]    Move \"up\" from this node.
 \\[Info-menu]  Pick menu item specified by name (or abbreviation).
-       Picking a menu item causes another node to be selected.
+         Picking a menu item causes another node to be selected.
 \\[Info-directory]     Go to the Info directory node.
 \\[Info-follow-reference]      Follow a cross reference.  Reads name of reference.
 \\[Info-last]  Move to the last node you were at.
@@ -2277,12 +2285,13 @@ Selecting other nodes:
 
 Moving within a node:
 \\[Info-scroll-up]     Normally, scroll forward a full screen.
-Once you scroll far enough in a node that its menu appears on the screen
-but after point, the next scroll moves into its first subnode.
-When after all menu items (or if their is no menu), move up to
-the parent node.
+         Once you scroll far enough in a node that its menu appears on the
+         screen but after point, the next scroll moves into its first
+         subnode.  When after all menu items (or if there is no menu),
+         move up to the parent node.
 \\[Info-scroll-down]   Normally, scroll backward.  If the beginning of the buffer is
-already visible, try to go to the previous menu entry, or up if there is none.
+         already visible, try to go to the previous menu entry, or up
+         if there is none.
 \\[beginning-of-buffer]        Go to beginning of node.
 
 Advanced commands:
@@ -2291,10 +2300,10 @@ Advanced commands:
 1      Pick first item in node's menu.
 2, 3, 4, 5   Pick second ... fifth item in node's menu.
 \\[Info-goto-node]     Move to node specified by name.
-       You may include a filename as well, as (FILENAME)NODENAME.
+         You may include a filename as well, as (FILENAME)NODENAME.
 \\[universal-argument] \\[info]        Move to new Info file with completion.
 \\[Info-search]        Search through this Info file for specified regexp,
-       and select the node in which the next occurrence is found.
+         and select the node in which the next occurrence is found.
 \\[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)
@@ -2570,8 +2579,15 @@ the variable `Info-file-list-for-emacs'."
   ;; Only fontify the node if it hasn't already been done.  [We pass in
   ;; LIMIT arg to `next-property-change' because it seems to search past
   ;; (point-max).]
-  (unless (< (next-property-change (point-min) nil (point-max))
-            (point-max))
+  (unless (and (< (next-property-change (point-min) nil (point-max))
+                 (point-max))
+              ;; But do put the text properties if the local-map property
+              ;; is inconsistent with Info-use-header-line's value.
+              (eq
+               (= (next-single-property-change
+                   (point-min) 'local-map nil (point-max))
+                  (point-max))
+               (null Info-use-header-line)))
     (save-excursion
       (let ((buffer-read-only nil)
            (case-fold-search t))
@@ -2587,20 +2603,29 @@ the variable `Info-file-list-for-emacs'."
              (if (string-equal tag "Node")
                  (put-text-property nbeg nend 'face 'info-header-node)
                (put-text-property nbeg nend 'face 'info-header-xref)
-               (put-text-property nbeg nend 'mouse-face 'highlight)
+               (put-text-property tbeg nend 'mouse-face 'highlight)
                (put-text-property tbeg nend
                                   'help-echo
                                   (concat "Go to node "
                                           (buffer-substring nbeg nend)))
-               (let ((fun (cdr (assoc tag '(("Prev" . Info-prev)
-                                            ("Next" . Info-next)
-                                            ("Up" . Info-up))))))
-                 (when fun
-                   (let ((keymap (make-sparse-keymap)))
-                     (define-key keymap [header-line down-mouse-1] fun)
-                     (define-key keymap [header-line down-mouse-2] fun)
-                     (put-text-property tbeg nend 'local-map keymap))))
-               ))))
+               ;; Don't bind mouse events on the header line if we
+               ;; aren't going to display the header line.
+               (when Info-use-header-line
+                 (let ((fun (cdr (assoc tag '(("Prev" . Info-prev)
+                                              ("Next" . Info-next)
+                                              ("Up" . Info-up))))))
+                   (when fun
+                     (let ((keymap (make-sparse-keymap)))
+                       (define-key keymap [header-line mouse-1] fun)
+                       (define-key keymap [header-line mouse-2] fun)
+                       (put-text-property tbeg nend 'local-map keymap)))))
+               (if (not Info-use-header-line)
+                   ;; In case they switched Info-use-header-line off
+                   ;; in the middle of an Info session, some text
+                   ;; properties may have been left lying around from
+                   ;; past visits of this node.  Remove them.
+                   (remove-text-properties tbeg nend '(local-map nil)))
+                 ))))
        (goto-char (point-min))
        (while (re-search-forward "\n\\([^ \t\n].+\\)\n\\(\\*+\\|=+\\|-+\\|\\.+\\)$"
                                  nil t)
@@ -2616,10 +2641,8 @@ the variable `Info-file-list-for-emacs'."
          ;; frame types at once.  We want this text to be invisible
          ;; on frames that can display the font above.
          (when (memq (framep (selected-frame)) '(x pc w32 mac))
-           (add-text-properties (match-end 1) (match-end 2)
-                                '(invisible t intangible t))
-           (add-text-properties (1- (match-end 1)) (match-end 2)
-                                '(intangible t))))
+           (add-text-properties (match-beginning 2) (1+ (match-end 2))
+                                '(invisible t intangible t))))
        (goto-char (point-min))
        (while (re-search-forward "\\*Note[ \n\t]+\\([^:]*\\):" nil t)
          (if (= (char-after (1- (match-beginning 0))) ?\") ; hack