[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/devdocs 2988d4d201 2/2: Use the new browse-url-handlers
From: |
ELPA Syncer |
Subject: |
[elpa] externals/devdocs 2988d4d201 2/2: Use the new browse-url-handlers mechanism of Emacs 28 |
Date: |
Mon, 20 Feb 2023 15:57:37 -0500 (EST) |
branch: externals/devdocs
commit 2988d4d201df16d72c3bea465d2b93b554dbddfc
Author: Augusto Stoffel <arstoffel@gmail.com>
Commit: Augusto Stoffel <arstoffel@gmail.com>
Use the new browse-url-handlers mechanism of Emacs 28
Closes #26.
---
devdocs.el | 49 ++++++++++++++++++++++++++++---------------------
1 file changed, 28 insertions(+), 21 deletions(-)
diff --git a/devdocs.el b/devdocs.el
index e6c75dc2ce..f5a2675a61 100644
--- a/devdocs.el
+++ b/devdocs.el
@@ -286,11 +286,19 @@ DOC is a document metadata alist."
(define-derived-mode devdocs-mode special-mode "DevDocs"
"Major mode for viewing DevDocs documents."
:interactive nil
+ (if (boundp 'browse-url-handlers) ;; Emacs ≥ 28
+ (setq-local browse-url-handlers
+ `((devdocs--internal-url-p . devdocs--internal-url-handler)
+ ,@browse-url-handlers))
+ (setq-local browse-url-browser-function
+ `(("\\`[^:]+\\'" . devdocs--internal-url-handler)
+ ,@(if (functionp browse-url-browser-function)
+ `(("" . ,browse-url-browser-function))
+ browse-url-browser-function))))
(setq-local
- browse-url-browser-function 'devdocs--browse-url
buffer-undo-list t
header-line-format devdocs-header-line
- revert-buffer-function 'devdocs--revert-buffer
+ revert-buffer-function #'devdocs--revert-buffer
truncate-lines t))
(defun devdocs-goto-target ()
@@ -482,25 +490,24 @@ fragment part of ENTRY.path."
"Refresh DevDocs buffer."
(devdocs--render (pop devdocs--stack)))
-(defun devdocs--browse-url (url &rest args)
- "A suitable `browse-url-browser-function' for `devdocs-mode'.
-URL can be an internal link in a DevDocs document.
-ARGS is passed as is to `browse-url'."
- (if (string-match-p ":" url)
- (let ((browse-url-browser-function (default-value
'browse-url-browser-function)))
- (apply #'browse-url url args))
- (let-alist (car devdocs--stack)
- (let* ((dest (devdocs--path-expand url .path))
- (file (devdocs--path-file dest))
- (frag (devdocs--path-fragment dest))
- (entry (seq-find (lambda (it)
- (let-alist it
- (or (string= .path dest)
- (string= .path file))))
- (devdocs--index .doc 'entries))))
- (unless entry (error "Can't find `%s'" dest))
- (when frag (push `(fragment . ,frag) entry))
- (devdocs--render entry)))))
+(defun devdocs--internal-url-p (url)
+ "Return t if URL seems to be an internal DevDocs link."
+ (not (string-match-p "\\`[a-z]+:" url)))
+
+(defun devdocs--internal-url-handler (url &rest _)
+ "Open URL of an internal link in a DevDocs document."
+ (let-alist (car devdocs--stack)
+ (let* ((dest (devdocs--path-expand url .path))
+ (file (devdocs--path-file dest))
+ (frag (devdocs--path-fragment dest))
+ (entry (seq-find (lambda (it)
+ (let-alist it
+ (or (string= .path dest)
+ (string= .path file))))
+ (devdocs--index .doc 'entries))))
+ (unless entry (error "Can't find `%s'" dest))
+ (when frag (push `(fragment . ,frag) entry))
+ (devdocs--render entry))))
;;; Lookup commands