From: Jim Porter <jporterbugs@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>
Cc: 66752@debbugs.gnu.org, tsdh@gnu.org
Subject: bug#66752: 30.0.50; [PATCH] Add support for 'thing-at-point' to 'bug-reference-mode'
Date: Sun, 5 Nov 2023 20:55:19 -0800 [thread overview]
Message-ID: <751392e5-50b1-ee1e-7c06-f4da70eeead5@gmail.com> (raw)
In-Reply-To: <jwvr0l36bxa.fsf-monnier+emacs@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 668 bytes --]
On 11/5/2023 3:20 PM, Stefan Monnier via Bug reports for GNU Emacs, the
Swiss army knife of text editors wrote:
> But as it stands, you're trying to solve a problem in your code which
> affects pretty much every other minor mode out there, so I think it's OK
> to just disregard the problem, like everyone else has done until now.
> Maybe you can even get away with modifying the variable globally and
> not removing the entry when the mode is disabled.
Ok, how about we just go with this then? (Removing the
'kill-local-variable' call.) That's simple, and reasonably close to The
Right Thing...
If no one has any objections, I'll merge this in the next few days.
[-- Attachment #2: 0001-Hook-bug-reference-mode-up-to-thing-at-point.patch --]
[-- Type: text/plain, Size: 4881 bytes --]
From 7b850af19e73b7a72d12f96587e4b703f8862ec4 Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Wed, 25 Oct 2023 15:24:28 -0700
Subject: [PATCH] Hook 'bug-reference-mode' up to 'thing-at-point'
* lisp/progmodes/bug-reference.el (bug-reference--url-at-point): New
function.
(bug-reference-mode, bug-reference-prog-mode): Factor initialization
code out to...
(bug-reference--init): ... here.
* test/lisp/progmodes/bug-reference-tests.el (test-thing-at-point):
New test.
* etc/NEWS: Announce this change.
---
etc/NEWS | 5 ++++
lisp/progmodes/bug-reference.el | 34 ++++++++++++++--------
test/lisp/progmodes/bug-reference-tests.el | 15 ++++++++++
3 files changed, 42 insertions(+), 12 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 94bcb75835b..a7f8eca3e1c 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -978,6 +978,11 @@ For links in 'webjump-sites' without an explicit URI scheme, it was
previously assumed that they should be prefixed with "http://". Such
URIs are now prefixed with "https://" instead.
+---
+*** 'bug-reference-mode' now supports 'thing-at-point'.
+Now, calling '(thing-at-point 'url)' when point is on a bug reference
+will return the URL for that bug.
+
** Customize
+++
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index bc280284588..a76f78ad69d 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -35,6 +35,8 @@
;;; Code:
+(require 'thingatpt)
+
(defgroup bug-reference nil
"Hyperlinking references to bug reports."
;; Somewhat arbitrary, by analogy with eg goto-address.
@@ -654,17 +656,30 @@ bug-reference--run-auto-setup
(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 ()
+ (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
@@ -681,12 +696,7 @@ bug-reference-mode-force-auto-setup
(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
diff --git a/test/lisp/progmodes/bug-reference-tests.el b/test/lisp/progmodes/bug-reference-tests.el
index 790582aed4c..e5b207748bf 100644
--- a/test/lisp/progmodes/bug-reference-tests.el
+++ b/test/lisp/progmodes/bug-reference-tests.el
@@ -25,6 +25,7 @@
(require 'bug-reference)
(require 'ert)
+(require 'ert-x)
(defun test--get-github-entry (url)
(and (string-match
@@ -125,4 +126,18 @@ test-gitea-entry
(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
--
2.25.1
next prev parent reply other threads:[~2023-11-06 4:55 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-25 22:33 bug#66752: 30.0.50; [PATCH] Add support for 'thing-at-point' to 'bug-reference-mode' Jim Porter
2023-11-04 8:12 ` Eli Zaretskii
2023-11-04 19:24 ` Tassilo Horn
2023-11-04 20:07 ` Jim Porter
2023-11-05 5:31 ` Eli Zaretskii
2023-11-05 6:21 ` Jim Porter
2023-11-05 14:19 ` Stefan Kangas
2023-11-05 23:20 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-06 4:55 ` Jim Porter [this message]
2023-11-12 5:41 ` Jim Porter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=751392e5-50b1-ee1e-7c06-f4da70eeead5@gmail.com \
--to=jporterbugs@gmail.com \
--cc=66752@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=tsdh@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.