(all): Make `indicate-buffer-boundaries' display values set outside
[bpt/emacs.git] / lisp / info.el
index c36554e..a7f4c49 100644 (file)
@@ -20,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 (eval-when-compile (require 'jka-compr))
 
 (defgroup info nil
-  "Info subsystem"
+  "Info subsystem."
   :group 'help
   :group 'docs)
 
 
 (defvar Info-history nil
   "Stack of info nodes user has visited.
-Each element of list is a list (FILENAME NODENAME BUFFERPOS).")
+Each element of the stack is a list (FILENAME NODENAME BUFFERPOS).")
 
 (defvar Info-history-forward nil
   "Stack of info nodes user has visited with `Info-history-back' command.
-Each element of list is a list (FILENAME NODENAME BUFFERPOS).")
+Each element of the stack is a list (FILENAME NODENAME BUFFERPOS).")
 
 (defvar Info-history-list nil
   "List of all info nodes user has visited.
-Each element of list is a list (FILENAME NODENAME).")
+Each element of the list is a list (FILENAME NODENAME).")
 
 (defcustom Info-enable-edit nil
   "*Non-nil means the \\<Info-mode-map>\\[Info-edit] command in Info can edit the current node.
@@ -83,10 +83,10 @@ The Lisp code is executed when the node is selected.")
   :group 'info)
 
 (defface info-xref
-  '((((min-colors 88) 
+  '((((min-colors 88)
       (class color) (background light)) :foreground "blue1" :underline t)
     (((class color) (background light)) :foreground "blue" :underline t)
-    (((min-colors 88) 
+    (((min-colors 88)
       (class color) (background dark)) :foreground "cyan1" :underline t)
     (((class color) (background dark)) :foreground "cyan" :underline t)
     (t :underline t))
@@ -96,7 +96,7 @@ The Lisp code is executed when the node is selected.")
 (defface info-xref-visited
   '((default :inherit info-xref)
     (((class color) (background light)) :foreground "magenta4")
-    (((class color) (background dark)) :foreground "magenta3")) ;"violet"?
+    (((class color) (background dark)) :foreground "violet"))
   "Face for visited Info cross-references."
   :group 'info)
 
@@ -1272,7 +1272,7 @@ any double quotes or backslashes must be escaped (\\\",\\\\)."
 ;; Hide any construct of the general form ^@[^@-^_][ ...  ^@[^@-^_]],
 ;; including one optional trailing newline.
 (defun Info-hide-cookies-node ()
-  "Hide unrecognised cookies in current node."
+  "Hide unrecognized cookies in current node."
   (save-excursion
     (let ((inhibit-read-only t)
          (case-fold-search t))
@@ -1379,6 +1379,43 @@ If FORK is a string, it is the name to use for the new buffer."
 
 (defvar Info-read-node-completion-table)
 
+(defun Info-read-node-name-2 (string path-and-suffixes action)
+  "Virtual completion table for file names input in Info node names.
+PATH-AND-SUFFIXES is a pair of lists, (DIRECTORIES . SUFFIXES)."
+  (let* ((names nil)
+        (suffixes (remove "" (cdr path-and-suffixes)))
+        (suffix (concat (regexp-opt suffixes t) "\\'"))
+        (string-dir (file-name-directory string))
+        (dirs
+         (if (file-name-absolute-p string)
+             (list (file-name-directory string))
+           (car path-and-suffixes))))
+    (dolist (dir dirs)
+      (unless dir
+       (setq dir default-directory))
+      (if string-dir (setq dir (expand-file-name string-dir dir)))
+      (when (file-directory-p dir)
+       (dolist (file (file-name-all-completions
+                      (file-name-nondirectory string) dir))
+         ;; If the file name has no suffix or a standard suffix,
+         ;; include it.
+         (and (or (null (file-name-extension file))
+                  (string-match suffix file))
+              ;; But exclude subfiles of split info files.
+              (not (string-match "-[0-9]+\\'" file))
+              ;; And exclude backup files.
+              (not (string-match "~\\'" file))
+              (push (if string-dir (concat string-dir file) file) names))
+         ;; If the file name ends in a standard suffix,
+         ;; add the unsuffixed name as a completion option.
+         (when (string-match suffix file)
+           (setq file (substring file 0 (match-beginning 0)))
+           (push (if string-dir (concat string-dir file) file) names)))))
+    (cond
+     ((eq action t) (all-completions string names))
+     ((null action) (try-completion string names))
+     (t (test-completion string names)))))
+
 ;; This function is used as the "completion table" while reading a node name.
 ;; It does completion using the alist in Info-read-node-completion-table
 ;; unless STRING starts with an open-paren.
@@ -1389,15 +1426,16 @@ If FORK is a string, it is the name to use for the new buffer."
     (let ((file (substring string 1)))
       (cond
        ((eq code nil)
-       (let ((comp (try-completion file 'locate-file-completion
+       (let ((comp (try-completion file 'Info-read-node-name-2
                                    (cons Info-directory-list
                                          (mapcar 'car Info-suffix-list)))))
          (cond
           ((eq comp t) (concat string ")"))
           (comp (concat "(" comp)))))
-       ((eq code t) (all-completions file 'locate-file-completion
-                                    (cons Info-directory-list
-                                          (mapcar 'car Info-suffix-list))))
+       ((eq code t)
+       (all-completions file 'Info-read-node-name-2
+                        (cons Info-directory-list
+                              (mapcar 'car Info-suffix-list))))
        (t nil))))
    ;; If a file name was given, then any node is fair game.
    ((string-match "\\`(" string)
@@ -1413,6 +1451,10 @@ If FORK is a string, it is the name to use for the new buffer."
    (t
     (test-completion string Info-read-node-completion-table predicate))))
 
+;; Arrange to highlight the proper letters in the completion list buffer.
+(put 'Info-read-node-name-1 'completion-base-size-function
+     (lambda () 1))
+
 (defun Info-read-node-name (prompt &optional default)
   (let* ((completion-ignore-case t)
         (Info-read-node-completion-table (Info-build-node-completions))
@@ -2826,7 +2868,7 @@ Build a menu of the possible matches."
       (while (progn (setq flag (not (pos-visible-in-window-p (point-max))))
                    (message (if flag "Type Space to see more"
                               "Type Space to return to Info"))
-                   (if (not (eq ?\  (setq ch (read-event))))
+                   (if (not (eq ?\s (setq ch (read-event))))
                        (progn (setq unread-command-events (list ch)) nil)
                      flag))
        (scroll-up)))
@@ -3154,6 +3196,8 @@ With a zero prefix arg, put the name inside a function call to `info'."
 (put 'Info-mode 'mode-class 'special)
 (put 'Info-mode 'no-clone-indirect t)
 
+(defvar tool-bar-map)
+
 (defun Info-mode ()
   "Info mode provides commands for browsing through the Info documentation tree.
 Documentation in Info is divided into \"nodes\", each of which discusses
@@ -3482,29 +3526,40 @@ the variable `Info-file-list-for-emacs'."
          (t
           (Info-goto-emacs-command-node command)))))
 \f
-(defface Info-title-1-face
-  '((((type tty pc) (class color)) :foreground "yellow" :weight bold)
-    (t :height 1.2 :inherit Info-title-2-face))
-  "Face for Info titles at level 1."
+(defface info-title-1
+  '((((type tty pc) (class color) (background light))
+     :foreground "green" :weight bold)
+    (((type tty pc) (class color) (background dark))
+     :foreground "yellow" :weight bold)
+    (t :height 1.2 :inherit info-title-2))
+  "Face for info titles at level 1."
   :group 'info)
+;; backward-compatibility alias
+(put 'Info-title-1-face 'face-alias 'info-title-1)
 
-(defface Info-title-2-face
+(defface info-title-2
   '((((type tty pc) (class color)) :foreground "lightblue" :weight bold)
-    (t :height 1.2 :inherit Info-title-3-face))
-  "Face for Info titles at level 2."
+    (t :height 1.2 :inherit info-title-3))
+  "Face for info titles at level 2."
   :group 'info)
+;; backward-compatibility alias
+(put 'Info-title-2-face 'face-alias 'info-title-2)
 
-(defface Info-title-3-face
+(defface info-title-3
   '((((type tty pc) (class color)) :weight bold)
-    (t :height 1.2 :inherit Info-title-4-face))
-  "Face for Info titles at level 3."
+    (t :height 1.2 :inherit info-title-4))
+  "Face for info titles at level 3."
   :group 'info)
+;; backward-compatibility alias
+(put 'Info-title-3-face 'face-alias 'info-title-3)
 
-(defface Info-title-4-face
+(defface info-title-4
   '((((type tty pc) (class color)) :weight bold)
     (t :weight bold :inherit variable-pitch))
-  "Face for Info titles at level 4."
+  "Face for info titles at level 4."
   :group 'info)
+;; backward-compatibility alias
+(put 'Info-title-4-face 'face-alias 'info-title-4)
 
 (defface info-menu-header
   '((((type tty pc))
@@ -3557,7 +3612,6 @@ Preserve text properties."
     keymap)
   "Keymap to put on the Prev link in the text or the header line.")
 
-
 (defvar Info-up-link-keymap
   (let ((keymap (make-sparse-keymap)))
     (define-key keymap [header-line mouse-1] 'Info-up)
@@ -3644,10 +3698,10 @@ Preserve text properties."
                                   nil t)
           (let* ((c (preceding-char))
                  (face
-                  (cond ((= c ?*) 'Info-title-1-face)
-                        ((= c ?=) 'Info-title-2-face)
-                        ((= c ?-) 'Info-title-3-face)
-                        (t        'Info-title-4-face))))
+                  (cond ((= c ?*) 'info-title-1)
+                        ((= c ?=) 'info-title-2)
+                        ((= c ?-) 'info-title-3)
+                        (t        'info-title-4))))
             (put-text-property (match-beginning 1) (match-end 1)
                                'font-lock-face face))
           ;; This is a serious problem for trying to handle multiple
@@ -4042,8 +4096,7 @@ INDENT is the current indentation depth."
 
 (defun Info-speedbar-fetch-file-nodes (nodespec)
   "Fetch the subnodes from the info NODESPEC.
-NODESPEC is a string of the form: (file)node.
-Optional THISFILE represends the filename of"
+NODESPEC is a string of the form: (file)node."
   (save-excursion
     ;; Set up a buffer we can use to fake-out Info.
     (set-buffer (get-buffer-create "*info-browse-tmp*"))