: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]
(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))
(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)))
;; 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)
"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)
;; 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
(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
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)
'(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)
(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)))