;;; Code:
+(require 'thingatpt)
+
(defgroup bug-reference nil
"Hyperlinking references to bug reports."
;; Somewhat arbitrary, by analogy with eg goto-address.
(run-hook-with-args-until-success
'bug-reference-auto-setup-functions)))))
-;;;###autoload
-(define-minor-mode bug-reference-mode
- "Toggle hyperlinking bug references in the buffer (Bug Reference mode)."
- :after-hook (bug-reference--run-auto-setup)
- (if bug-reference-mode
- (jit-lock-register #'bug-reference-fontify)
+(defun bug-reference--url-at-point ()
+ "`thing-at-point' provider function."
+ (get-char-property (point) 'bug-reference-url))
+
+(defun bug-reference--init (enable)
+ (if enable
+ (progn
+ (jit-lock-register #'bug-reference-fontify)
+ (setq-local thing-at-point-provider-alist
+ (append thing-at-point-provider-alist
+ '((url . bug-reference--url-at-point)))))
(jit-lock-unregister #'bug-reference-fontify)
+ (setq thing-at-point-provider-alist
+ (delete '((url . bug-reference--url-at-point))
+ thing-at-point-provider-alist))
(save-restriction
(widen)
(bug-reference-unfontify (point-min) (point-max)))))
+;;;###autoload
+(define-minor-mode bug-reference-mode
+ "Toggle hyperlinking bug references in the buffer (Bug Reference mode)."
+ :after-hook (bug-reference--run-auto-setup)
+ (bug-reference--init bug-reference-mode))
+
(defun bug-reference-mode-force-auto-setup ()
"Enable `bug-reference-mode' and force auto-setup.
Enabling `bug-reference-mode' runs its auto-setup only if
(define-minor-mode bug-reference-prog-mode
"Like `bug-reference-mode', but only buttonize in comments and strings."
:after-hook (bug-reference--run-auto-setup)
- (if bug-reference-prog-mode
- (jit-lock-register #'bug-reference-fontify)
- (jit-lock-unregister #'bug-reference-fontify)
- (save-restriction
- (widen)
- (bug-reference-unfontify (point-min) (point-max)))))
+ (bug-reference--init bug-reference-prog-mode))
(provide 'bug-reference)
;;; bug-reference.el ends here
(require 'bug-reference)
(require 'ert)
+(require 'ert-x)
(defun test--get-github-entry (url)
(and (string-match
(test--get-gitea-entry "https://gitea.com/magit/magit/")
"magit/magit")))
+(ert-deftest test-thing-at-point ()
+ "Ensure that (thing-at-point 'url) returns the bug URL."
+ (ert-with-test-buffer (:name "thingatpt")
+ (setq-local bug-reference-url-format "https://debbugs.gnu.org/%s")
+ (insert "bug#1234")
+ (bug-reference-mode)
+ (jit-lock-fontify-now (point-min) (point-max))
+ (goto-char (point-min))
+ ;; Make sure we get the URL when `bug-reference-mode' is active...
+ (should (equal (thing-at-point 'url) "https://debbugs.gnu.org/1234"))
+ (bug-reference-mode -1)
+ ;; ... and get nil when `bug-reference-mode' is inactive.
+ (should-not (thing-at-point 'url))))
+
;;; bug-reference-tests.el ends here