]> code.delx.au - gnu-emacs/blobdiff - lisp/info.el
(vc-cvs-repository-hostname): New operation.
[gnu-emacs] / lisp / info.el
index f3dd9a859a4c95ad95264d6df7eb7cd81d85e62e..424de35b5851d111960817dc0f1577c0d19da608 100644 (file)
@@ -139,7 +139,7 @@ These directories are searched after those in `Info-directory-list'."
   :type '(repeat directory)
   :group 'info)
 
-(defcustom Info-scroll-prefer-subnodes t
+(defcustom Info-scroll-prefer-subnodes nil
   "*If non-nil, \\<Info-mode-map>\\[Info-scroll-up] in a menu visits subnodes.
 If this is non-nil, and you scroll far enough in a node that its menu
 appears on the screen, the next \\<Info-mode-map>\\[Info-scroll-up]
@@ -162,6 +162,14 @@ If value is non-nil but not t, the reference section is still shown."
                 (other :tag "Replace only tag" tag))
   :group 'info)
 
+(defcustom Info-refill-paragraphs nil
+  "*If non-nil, attempt to refill paragraphs with hidden references.
+This refilling may accidentally remove explicit line breaks in the info
+file, so be prepared for a few surprises if you enable this feature."
+  :version "21.4"
+  :type 'boolean
+  :group 'info)
+
 (defcustom Info-mode-hook
   ;; Try to obey obsolete Info-fontify settings.
   (unless (and (boundp 'Info-fontify) (null Info-fontify))
@@ -1547,9 +1555,10 @@ FOOTNOTENAME may be an abbreviation of the reference name."
   (skip-chars-forward " \t\n")
   (let ((beg (point))
        str)
-    (while (not (looking-at ":*[,.;() \t\n]"))
-      (skip-chars-forward "^:")
-      (forward-char 1))
+    (while (progn
+            (skip-chars-forward "^:")
+            (forward-char 1)
+            (not (looking-at ":*[,.;() \t\n]"))))
     (setq str
          (if (looking-at ":")
              (buffer-substring-no-properties beg (1- (point)))
@@ -1578,7 +1587,11 @@ FOOTNOTENAME may be an abbreviation of the reference name."
   ;; 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.
-  (with-current-buffer Info-complete-menu-buffer
+
+  ;; Note that `Info-complete-menu-buffer' could be current already,
+  ;; so we want to save point.
+  (save-excursion
+    (set-buffer Info-complete-menu-buffer)
     (let ((completion-ignore-case t)
          (case-fold-search t)
          (orignode Info-current-node)
@@ -2743,7 +2756,7 @@ the variable `Info-file-list-for-emacs'."
   "Add the face `info-menu-header' to any header before a menu entry."
   (save-excursion
     (goto-char (point-min))
-    (when (re-search-forward "\\* Menu:" nil t)
+    (when (re-search-forward "^\\* Menu:" nil t)
       (put-text-property (match-beginning 0) (match-end 0)
                         'font-lock-face 'info-menu-header)
       (while (re-search-forward "\n\n\\([^*\n ].*\\)\n\n?[*]" nil t)
@@ -2855,7 +2868,7 @@ the variable `Info-file-list-for-emacs'."
          ;; on frames that can display the font above.
          (when (memq (framep (selected-frame)) '(x pc w32 mac))
            (add-text-properties (1- (match-beginning 2)) (match-end 2)
-                                '(invisible t))))
+                                '(invisible t front-sticky nil rear-nonsticky t))))
        (goto-char (point-min))
        (while (re-search-forward "\\(\\*Note[ \t]*\\)\n?[ \t]*\\([^:]*\\)\\(:[^.,:(]*\\(([^)]*)[^.,:]*\\)?[,:]?\n?\\)" nil t)
          (unless (= (char-after (1- (match-beginning 0))) ?\") ; hack
@@ -2868,17 +2881,23 @@ the variable `Info-file-list-for-emacs'."
                (goto-char start)
                (skip-syntax-backward " ")
                (setq other-tag
-                     (cond
-                      ((<= (point) (point-min))
-                       "See ")
-                      ((memq (char-before) '(nil ?\. ?! ))
-                       "See ")
-                      ((memq (char-before) '( ?\( ?\[ ?\{ ?\, ?\; ?\: ))
-                       "see ")))
+                     (cond ((memq (char-before) '(nil ?\. ?! ??))
+                            "See ")
+                           ((memq (char-before) '(?\, ?\; ?\: ?-))
+                            "see ")
+                           ((memq (char-before) '(?\( ?\[ ?\{))
+                            ;; Check whether the paren is preceded by
+                            ;; an end of sentence
+                            (skip-syntax-backward " (")
+                            (if (memq (char-before) '(nil ?\. ?! ??))
+                                "See "
+                              "see "))
+                           ((save-match-data (looking-at "\n\n"))
+                            "See ")))
                (goto-char next))
              (if hide-tag
                  (add-text-properties (match-beginning 1) (match-end 1)
-                                      '(invisible t)))
+                                      '(invisible t front-sticky nil rear-nonsticky t)))
              (add-text-properties
               (match-beginning 2) (match-end 2)
               (cons 'help-echo
@@ -2889,33 +2908,35 @@ the variable `Info-file-list-for-emacs'."
                             mouse-face highlight))))
              (when (eq Info-hide-note-references t)
                (add-text-properties (match-beginning 3) (match-end 3)
-                                    '(invisible t)))
+                                    '(invisible t front-sticky nil rear-nonsticky t)))
              (when other-tag
                (save-excursion
                  (goto-char (match-beginning 1))
                  (insert other-tag)))
-             (when (or hide-tag (eq Info-hide-note-references t))
+             (when (and Info-refill-paragraphs
+                        (or hide-tag (eq Info-hide-note-references t)))
                (push (set-marker (make-marker) start)
                      paragraph-markers)))))
 
-       (let ((fill-nobreak-invisible t)
-             (fill-individual-varying-indent nil)
-             (paragraph-start "\f\\|[ \t]*[-*]\\|[ \t]*$")
-             (paragraph-separate ".*\\.[ \t]*\n[ \t]\\|[ \t]*[-*]\\|[ \t\f]*$")
-             (adaptive-fill-mode nil))
-         (goto-char (point-max))
-         (while paragraph-markers
-           (let ((m (car paragraph-markers)))
-             (setq paragraph-markers (cdr paragraph-markers))
-             (when (< m (point))
-               (goto-char m)
-               (move-to-left-margin)
-               (when (zerop (forward-paragraph))
-                 (let ((end (point))
-                       (beg (progn (backward-paragraph) (point))))
-                   (fill-individual-paragraphs beg end nil nil)
-                   (goto-char beg))))
-             (set-marker m nil))))
+       (when (and Info-refill-paragraphs
+                  paragraph-markers)
+         (let ((fill-nobreak-invisible t)
+               (fill-individual-varying-indent nil)
+               (paragraph-start "\f\\|[ \t]*[-*]\\|[ \t]*$")
+               (paragraph-separate ".*\\.[ \t]*\n[ \t]\\|[ \t]*[-*]\\|[ \t\f]*$")
+               (adaptive-fill-mode nil))
+           (goto-char (point-max))
+           (while paragraph-markers
+             (let ((m (car paragraph-markers)))
+               (setq paragraph-markers (cdr paragraph-markers))
+               (when (< m (point))
+                 (goto-char m)
+                 (beginning-of-line)
+                 (let ((beg (point)))
+                   (when (zerop (forward-paragraph))
+                     (fill-individual-paragraphs beg (point) nil nil)
+                     (goto-char beg))))
+               (set-marker m nil)))))
 
        (goto-char (point-min))
        (when (and (search-forward "\n* Menu:" nil t)
@@ -2943,11 +2964,11 @@ the variable `Info-file-list-for-emacs'."
                      '(font-lock-face info-xref
                        mouse-face highlight))))
              (when (eq Info-hide-note-references t)
-               (put-text-property (match-beginning 2) (match-beginning 4)
+               (put-text-property (match-beginning 2) (1- (match-end 4))
                                   'invisible t)
                ;; We need a stretchable space like :align-to but with
                ;; a minimum value.
-               (put-text-property (match-beginning 4) (match-end 4) 'display
+               (put-text-property (1- (match-end 4)) (match-end 4) 'display
                                   (if (>= 22 (- (match-end 1)
                                                 (match-beginning 0)))
                                       '(space :align-to 24)
@@ -2955,7 +2976,10 @@ the variable `Info-file-list-for-emacs'."
                (setq cont (looking-at "."))
                (while (and (= (forward-line 1) 0)
                            (looking-at "\\([ \t]+\\)[^*\n]"))
-                 (put-text-property (match-beginning 1) (match-end 1) 'display
+                 (put-text-property (match-beginning 1) (1- (match-end 1))
+                                    'invisible t)
+                 (put-text-property (1- (match-end 1)) (match-end 1)
+                                    'display
                                     (if cont
                                         '(space :align-to 26)
                                       '(space :align-to 24)))