Function: ibtypes::texinfo-ref
ibtypes::texinfo-ref is a byte-compiled function defined in
hibtypes.el.
Signature
(ibtypes::texinfo-ref)
Documentation
Display Texinfo, Info node or help associated with Texinfo constructs at point.
Supported Texinfo constructs are node, menu item, @xref, @pxref,
@ref, @code, @findex, @var or @vindex.
If point is within the braces of a cross-reference, the associated Info node is shown. If point is to the left of the braces but after the @ symbol and the reference is to a node within the current Texinfo file, then the Texinfo node is shown.
For @code, @findex, @var and @vindex references, the associated documentation string is displayed.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hibtypes.el
;;; ========================================================================
;;; Displays Texinfo or Info node associated with Texinfo @xref, @pxref or @ref at point.
;;; ========================================================================
(defib texinfo-ref ()
"Display Texinfo, Info node or help associated with Texinfo constructs at point.
Supported Texinfo constructs are node, menu item, @xref, @pxref,
@ref, @code, @findex, @var or @vindex.
If point is within the braces of a cross-reference, the associated
Info node is shown. If point is to the left of the braces but after
the @ symbol and the reference is to a node within the current
Texinfo file, then the Texinfo node is shown.
For @code, @findex, @var and @vindex references, the associated
documentation string is displayed."
(when (memq major-mode '(texinfo-mode para-mode))
(let ((opoint (point))
(bol (save-excursion (beginning-of-line) (point))))
(cond ((save-excursion
(beginning-of-line)
;; If a menu item, display the node for the item.
(looking-at "*\\s-+\\([^:\t\n\r]+\\)::"))
(hact 'link-to-texinfo-node
nil
(ibut:label-set (match-string-no-properties 1) (match-beginning 1) (match-end 1))))
;; Show doc for any Emacs Lisp identifier references,
;; marked with @code{} or @var{}.
((save-excursion
(and (search-backward "@" bol t)
(or (looking-at "@\\(code\\|var\\){\\([^\} \t\n\r]+\\)}")
(looking-at "@\\(findex\\|vindex\\)[ ]+\\([^\} \t\n\r]+\\)"))
(>= (match-end 2) opoint)))
(let ((type-str (match-string-no-properties 1))
(symbol (intern-soft (ibut:label-set (match-string-no-properties 2) (match-beginning 2) (match-end 2)))))
(when (and symbol (pcase type-str
((or "code" "findex") (fboundp symbol))
((or "var" "vindex") (boundp symbol))))
(hact 'link-to-elisp-doc `',symbol))))
;; If at an @node and point is within a node name reference
;; other than the current node, display it.
((save-excursion
(and (save-excursion (beginning-of-line) (looking-at "@node\\s-+[^,\n\r]+,"))
(search-backward "," bol t)
(looking-at ",\\s-*\\([^,\n\r]*[^, \t\n\r]\\)[,\n\r]")))
(hact 'link-to-texinfo-node
nil
(ibut:label-set (match-string-no-properties 1) (match-beginning 1) (match-end 1))))
((save-excursion
(and (search-backward "@" bol t)
(looking-at
(concat
"@p?x?ref\\({\\)\\s-*\\([^,}]*[^,} \t\n\r]\\)\\s-*"
"\\(,[^,}]*\\)?\\(,[^,}]*\\)?"
"\\(,\\s-*\\([^,}]*[^,} \t\n\r]\\)\\)?[^}]*}"))
(> (match-end 0) opoint)))
(let* ((show-texinfo-node
(and
;; Reference to node within this file.
(not (match-beginning 6))
;; To the left of the reference opening brace.
(<= opoint (match-beginning 1))))
(node
(save-match-data
(if (match-beginning 6)
;; Explicit filename included in reference.
(format "(%s)%s"
(match-string-no-properties 6)
(match-string-no-properties 2))
;; Derive file name from the source file name.
(let ((nodename (match-string-no-properties 2))
(file (file-name-nondirectory (hypb:buffer-file-name))))
(if show-texinfo-node
nodename
(format "(%s)%s"
(if (string-match "\\.[^.]+$" file)
(substring file 0
(match-beginning 0))
"unspecified file")
nodename)))))))
(ibut:label-set (match-string-no-properties 0) (match-beginning 0) (match-end 0))
(if show-texinfo-node
(hact 'link-to-texinfo-node nil node)
(hact 'link-to-Info-node node))))))))