]> git.eshelyaron.com Git - emacs.git/commitdiff
Define setfunction for bibtex-generate-url-list (bug#78798)
authorRoland Winkler <winkler@gnu.org>
Sun, 20 Jul 2025 06:01:12 +0000 (01:01 -0500)
committerEshel Yaron <me@eshelyaron.com>
Fri, 25 Jul 2025 08:10:34 +0000 (10:10 +0200)
        * lisp/textmodes/bibtex.el
        (bibtex-generate-url-list-init): New function.

        * lisp/textmodes/bibtex.el (bibtex-generate-url-list)
        (bibtex-font-lock-url-regexp): Use it.

(cherry picked from commit e6c1ec71b729088769a2842525ff8df738fa99c6)

lisp/textmodes/bibtex.el

index 478ba73865431b3d53861ae812226cee10575f61..2219e59326ae790113b507bf304135de1148b06b 100644 (file)
@@ -1432,6 +1432,25 @@ Used by `bibtex-complete-crossref-cleanup' and `bibtex-copy-summary-as-kill'."
   :type '(choice (const :tag "Default" bibtex-summary)
                  (function :tag "Personalized function")))
 
+(defun bibtex-generate-url-list-init (&optional local)
+  "Initialize `bibtex-font-lock-url-regexp' from `bibtex-generate-url-list'.
+Return value of `bibtex-font-lock-url-regexp'.
+Call this function when setting `bibtex-generate-url-list' in elisp code.
+Use LOCAL non-nil when setting `bibtex-generate-url-list' buffer-locally."
+  ;; Assume that field names begin at the beginning of a line.
+  (let ((val (concat "^[ \t]*"
+                     (regexp-opt (delete-dups
+                                  (mapcar #'caar
+                                          (with-no-warnings
+                                            bibtex-generate-url-list)))
+                                 'paren)
+                     "[ \t\n]*=[ \t\n]*")))
+    (if (boundp 'bibtex-font-lock-url-regexp)
+        (if local
+            (setq bibtex-font-lock-url-regexp val)
+          (setq-default bibtex-font-lock-url-regexp val)))
+    val))
+
 (defcustom bibtex-generate-url-list
   '((("url" . ".*:.*"))
     (("doi" . "10\\.[0-9]+/.+")
@@ -1463,7 +1482,9 @@ and with the `match-data' properly set.
 Case is always ignored.  Always remove the field delimiters.
 If `bibtex-expand-strings' is non-nil, BibTeX strings are expanded
 for generating the URL.
-Set this variable before loading BibTeX mode.
+
+Either set this variable via `customize' or call after setting it
+`bibtex-generate-url-list-init'.
 
 The following is a complex example, see URL `https://link.aps.org/'.
 
@@ -1495,7 +1516,10 @@ The following is a complex example, see URL `https://link.aps.org/'.
                                (choice (string :tag "Replacement")
                                       (integer :tag "Sub-match")
                                        (function :tag "Filter")))))))
-  :risky t)
+  :risky t
+  :set (lambda (symbol value)
+         (set-default symbol value)
+         (bibtex-generate-url-list-init)))
 
 (defcustom bibtex-cite-matcher-alist
   '(("\\\\cite[ \t\n]*{\\([^}]+\\)}" . 1))
@@ -1836,11 +1860,7 @@ Initialized by `bibtex-set-dialect'.")
               bibtex-cite-matcher-alist))
   "Default expressions to highlight in BibTeX mode.")
 
-(defvar bibtex-font-lock-url-regexp
-  ;; Assume that field names begin at the beginning of a line.
-  (concat "^[ \t]*"
-          (regexp-opt (delete-dups (mapcar #'caar bibtex-generate-url-list)) t)
-          "[ \t\n]*=[ \t\n]*")
+(defvar bibtex-font-lock-url-regexp (bibtex-generate-url-list-init)
   "Regexp for `bibtex-font-lock-url' derived from `bibtex-generate-url-list'.")
 
 (defvar bibtex-string-empty-key nil