Commit 9cb65411 authored by Kim F. Storm's avatar Kim F. Storm
Browse files

(Info-follow-reference, Info-next-reference)

(Info-prev-reference, Info-try-follow-nearest-node): Bind
inhibit-point-motion-hooks to t while parsing reference.
(Info-fontify-node): When font-lock-mode is enabled, display
"*note" and "* menu" references in a more user friendly format.
parent 99d597da
...@@ -1316,6 +1316,7 @@ FOOTNOTENAME may be an abbreviation of the reference name." ...@@ -1316,6 +1316,7 @@ FOOTNOTENAME may be an abbreviation of the reference name."
(interactive (interactive
(let ((completion-ignore-case t) (let ((completion-ignore-case t)
(case-fold-search t) (case-fold-search t)
(inhibit-point-motion-hooks t)
completions default alt-default (start-point (point)) str i bol eol) completions default alt-default (start-point (point)) str i bol eol)
(save-excursion (save-excursion
;; Store end and beginning of line. ;; Store end and beginning of line.
...@@ -1380,6 +1381,7 @@ FOOTNOTENAME may be an abbreviation of the reference name." ...@@ -1380,6 +1381,7 @@ FOOTNOTENAME may be an abbreviation of the reference name."
(error "No reference was specified")) (error "No reference was specified"))
(let (target beg i (str (concat "\\*note " (regexp-quote footnotename))) (let (target beg i (str (concat "\\*note " (regexp-quote footnotename)))
(inhibit-point-motion-hooks t)
(case-fold-search t)) (case-fold-search t))
(while (setq i (string-match " " str i)) (while (setq i (string-match " " str i))
(setq str (concat (substring str 0 i) "[ \t\n]+" (substring str (1+ i)))) (setq str (concat (substring str 0 i) "[ \t\n]+" (substring str (1+ i))))
...@@ -1807,6 +1809,7 @@ parent node." ...@@ -1807,6 +1809,7 @@ parent node."
"Move cursor to the next cross-reference or menu item in the node." "Move cursor to the next cross-reference or menu item in the node."
(interactive) (interactive)
(let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:") (let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:")
(inhibit-point-motion-hooks t)
(old-pt (point)) (old-pt (point))
(case-fold-search t)) (case-fold-search t))
(or (eobp) (forward-char 1)) (or (eobp) (forward-char 1))
...@@ -1827,6 +1830,7 @@ parent node." ...@@ -1827,6 +1830,7 @@ parent node."
"Move cursor to the previous cross-reference or menu item in the node." "Move cursor to the previous cross-reference or menu item in the node."
(interactive) (interactive)
(let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:") (let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:")
(inhibit-point-motion-hooks t)
(old-pt (point)) (old-pt (point))
(case-fold-search t)) (case-fold-search t))
(or (re-search-backward pat nil t) (or (re-search-backward pat nil t)
...@@ -2055,7 +2059,8 @@ If no reference to follow, moves to the next node, or up if none." ...@@ -2055,7 +2059,8 @@ If no reference to follow, moves to the next node, or up if none."
;; Common subroutine. ;; Common subroutine.
(defun Info-try-follow-nearest-node () (defun Info-try-follow-nearest-node ()
"Follow a node reference near point. Return non-nil if successful." "Follow a node reference near point. Return non-nil if successful."
(let (node) (let (node
(inhibit-point-motion-hooks t))
(cond (cond
((setq node (Info-get-token (point) "\\*note[ \n]" ((setq node (Info-get-token (point) "\\*note[ \n]"
"\\*note[ \n]\\([^:]*\\):")) "\\*note[ \n]\\([^:]*\\):"))
...@@ -2712,20 +2717,43 @@ the variable `Info-file-list-for-emacs'." ...@@ -2712,20 +2717,43 @@ the variable `Info-file-list-for-emacs'."
(add-text-properties (match-beginning 2) (1+ (match-end 2)) (add-text-properties (match-beginning 2) (1+ (match-end 2))
'(invisible t intangible t)))) '(invisible t intangible t))))
(goto-char (point-min)) (goto-char (point-min))
(while (re-search-forward "\\*Note[ \n\t]+\\([^:]*\\):" nil t) (while (re-search-forward "\\(\\*Note[ \n\t]+\\)\\([^:]*\\)\\(:[^.,:]*[,:]?\\)" nil t)
(if (= (char-after (1- (match-beginning 0))) ?\") ; hack (unless (= (char-after (1- (match-beginning 0))) ?\") ; hack
nil (let ((next (point))
(add-text-properties (match-beginning 1) (match-end 1) (hide-tag font-lock-mode)
'(font-lock-face info-xref other-tag)
mouse-face highlight (when hide-tag
help-echo "mouse-2: go to this node")))) ;; *Note is often used where *note should have been
(goto-char (match-beginning 0))
(skip-syntax-backward " ")
(setq other-tag
(cond
((or (<= (point) (point-min))
(memq (char-after (1- (point))) '( ?\. ?! )))
"See ")
((memq (char-after (1- (point))) '( ?\( ?\[ ?\{ ?\, ?\; ?\: ))
"see ")
(t nil)))
(goto-char next))
(if hide-tag
(add-text-properties (match-beginning 1) (match-end 1)
(if other-tag
(list 'display other-tag 'intangible t)
'(invisible t intangible t))))
(add-text-properties (match-beginning 2) (match-end 2)
'(font-lock-face info-xref
mouse-face highlight
help-echo "mouse-2: go to this node"))
(add-text-properties (match-beginning 3) (match-end 3)
'(invisible t intangible t)))))
(goto-char (point-min)) (goto-char (point-min))
(if (and (search-forward "\n* Menu:" nil t) (if (and (search-forward "\n* Menu:" nil t)
(not (string-match "\\<Index\\>" Info-current-node)) (not (string-match "\\<Index\\>" Info-current-node))
;; Don't take time to annotate huge menus ;; Don't take time to annotate huge menus
(< (- (point-max) (point)) Info-fontify-maximum-menu-size)) (< (- (point-max) (point)) Info-fontify-maximum-menu-size))
(let ((n 0)) (let ((n 0))
(while (re-search-forward "^\\* +\\([^:\t\n]*\\):" nil t) (while (re-search-forward "^\\* +\\([^:\t\n]*\\)\\(:[^.,:]*[,:.][ \t]*\\)" nil t)
(setq n (1+ n)) (setq n (1+ n))
(if (zerop (% n 3)) ; visual aids to help with 1-9 keys (if (zerop (% n 3)) ; visual aids to help with 1-9 keys
(put-text-property (match-beginning 0) (put-text-property (match-beginning 0)
...@@ -2734,7 +2762,12 @@ the variable `Info-file-list-for-emacs'." ...@@ -2734,7 +2762,12 @@ the variable `Info-file-list-for-emacs'."
(add-text-properties (match-beginning 1) (match-end 1) (add-text-properties (match-beginning 1) (match-end 1)
'(font-lock-face info-xref '(font-lock-face info-xref
mouse-face highlight mouse-face highlight
help-echo "mouse-2: go to this node"))))) help-echo "mouse-2: go to this node"))
(add-text-properties (match-beginning 2) (match-end 2)
(list 'display
(make-string (max 2 (- 22 (- (match-end 1) (match-beginning 1)))) ? )
'intangible t)))))
(Info-fontify-menu-headers) (Info-fontify-menu-headers)
(set-buffer-modified-p nil))))) (set-buffer-modified-p nil)))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment