branch: externals/hyperbole
commit 4ba5f37bbdb535d232a715fdc765e782a2382d02
Author: Mats Lidell <[email protected]>
Commit: GitHub <[email protected]>
Add an info message link for unsupported referent types (#833)
---
ChangeLog | 10 +++++++
hywiki.el | 99 +++++++++++++++++++++++++++++++++++++--------------------------
2 files changed, 69 insertions(+), 40 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 965f6eb0a5..ea53a0e433 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2025-12-24 Mats Lidell <[email protected]>
+
+* hywiki.el (hywiki-reference-to-org-link): Refactor to handle pathname
+ and referent in separate functions.
+ (hywiki--pathname-reference-to-org-link): Original function for
+ pathname links.
+ (hywiki--referent-reference-to-org-link): Creates an info message link
+ that export of the referent type is not supported.
+ (hypb-msg): org-link-type for message links.
+
2025-12-13 Bob Weiner <[email protected]>
* MANIFEST: Add "HY-TALK/HYPERBOLEQA.kotl" from EmacsConf2025 talk.
diff --git a/hywiki.el b/hywiki.el
index e86769e8e1..302cfef35a 100644
--- a/hywiki.el
+++ b/hywiki.el
@@ -1572,43 +1572,54 @@ simplifies to:
(setq wikiword (substring wikiword-and-section (match-end 0))))
(insert "\n#+INDEX: " wikiword "\n"))))))
+(defun hywiki--pathname-reference-to-org-link (pathname referent description)
+ "Convert a HyWiki PATHNAME REFERENT and DESCRIPTION to an Org link."
+ (let* ((path-word-suffix referent)
+ (path (file-relative-name (nth 0 path-word-suffix)))
+ ;; (path-stem (when path
+ ;; (file-name-sans-extension path)))
+ (suffix (nth 2 path-word-suffix))
+ (desc description)
+ ;; suffix-no-hashmark
+ )
+ (unless (and suffix (not (string-empty-p suffix)))
+ (setq suffix nil))
+ ;; (setq suffix-no-hashmark (when suffix (substring suffix 1)))
+ ;; (when (or (not buffer-file-name)
+ ;; (string-equal path (file-name-nondirectory buffer-file-name)))
+ ;; (setq path nil))
+ (cond (desc
+ (if path
+ ;; "[[hy:pathname]]"
+ (format "[[%s:%s]]" hywiki-org-link-type pathname)
+ ;; (if suffix
+ ;; ;; "[[file:path-stem.org::suffix][desc]"
+ ;; (format "[[file:%s.org::%s][%s]]"
+ ;; path-stem suffix-no-hashmark desc)
+ ;; ;; "[[file:path-stem.org][desc]]")
+ ;; (format "[[file:%s.org][%s]]" path-stem desc))
+ (if suffix
+ ;; "[[suffix][desc]]"
+ (format "[[%s][%s]]" suffix desc)
+ ;; "[[desc]]"
+ (format "[[%s]]" desc))))
+ (path
+ ;; "[[hy:pathname]]"
+ (format "[[%s:%s]]" hywiki-org-link-type pathname)))))
+
+(defun hywiki--referent-reference-to-org-link (reference referent _description)
+ "Convert a HyWiki REFERENT REFERENCE and DESCRIPTION to an Org link."
+ (format "[[hypb-msg:%s][%s]]" (format "Export of link type %s is not
supported" (car referent)) reference))
+
(defun hywiki-reference-to-org-link (reference &optional description)
"Convert a HyWiki REFERENCE and an optional DESCRIPTION to an Org link."
;; \"[[file:<hywiki-directory>/WikiWord.org::Multi-Word
Section][WikiWord#Multi-Word Section]]\".
(let ((referent (hywiki-reference-to-referent reference :full-data)))
- (when (stringp (car referent))
- (let* ((path-word-suffix referent)
- (path (file-relative-name (nth 0 path-word-suffix)))
- ;; (path-stem (when path
- ;; (file-name-sans-extension path)))
- (suffix (nth 2 path-word-suffix))
- (desc description)
- ;; suffix-no-hashmark
- )
- (unless (and suffix (not (string-empty-p suffix)))
- (setq suffix nil))
- ;; (setq suffix-no-hashmark (when suffix (substring suffix 1)))
- ;; (when (or (not buffer-file-name)
- ;; (string-equal path (file-name-nondirectory buffer-file-name)))
- ;; (setq path nil))
- (cond (desc
- (if path
- ;; "[[hy:reference]]"
- (format "[[%s:%s]]" hywiki-org-link-type reference)
- ;; (if suffix
- ;; ;; "[[file:path-stem.org::suffix][desc]"
- ;; (format "[[file:%s.org::%s][%s]]"
- ;; path-stem suffix-no-hashmark desc)
- ;; ;; "[[file:path-stem.org][desc]]")
- ;; (format "[[file:%s.org][%s]]" path-stem desc))
- (if suffix
- ;; "[[suffix][desc]]"
- (format "[[%s][%s]]" suffix desc)
- ;; "[[desc]]"
- (format "[[%s]]" desc))))
- (path
- ;; "[[hy:reference]]"
- (format "[[%s:%s]]" hywiki-org-link-type reference)))))))
+ (when referent
+ (cond ((stringp (car referent))
+ (hywiki--pathname-reference-to-org-link reference referent
description))
+ (t
+ (hywiki--referent-reference-to-org-link reference referent
description))))))
(defun hywiki-maybe-at-wikiword-beginning ()
"Return non-nil if previous character is one preceding a HyWikiWord.
@@ -2970,13 +2981,21 @@ variables."
(setf (alist-get "hywiki" org-publish-project-alist nil 'remove #'equal)
nil)
(add-to-list 'org-publish-project-alist hywiki-org-publish-project-alist
t)))
-(eval-after-load "org"
- '(org-link-set-parameters hywiki-org-link-type
- :complete #'hywiki-org-link-complete
- :export #'hywiki-org-link-export
- :follow #'hywiki-find-referent
- :htmlize-link #'hywiki-section-to-headline-reference
- :store #'hywiki-org-link-store))
+(with-eval-after-load 'org
+ (org-link-set-parameters hywiki-org-link-type
+ :complete #'hywiki-org-link-complete
+ :export #'hywiki-org-link-export
+ :follow #'hywiki-find-referent
+ :htmlize-link #'hywiki-section-to-headline-reference
+ :store #'hywiki-org-link-store)
+ (org-link-set-parameters "hypb-msg"
+ :follow (lambda (path) (message "Message: %s" path))
+ :export (lambda (path desc backend)
+ (when (eq backend 'html)
+ (format "<a href=\"#\" title=\"%s\"
onclick=\"alert('%s'); return false;\">%s</a>"
+ path
+ (replace-regexp-in-string "'"
"\\\\'" path)
+ (or desc path))))))
(defun hywiki-word-strip-suffix (page-name)
"Return PAGE-NAME with any optional #section:Lnum:Cnum stripped off.