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.

Reply via email to