aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <id@ypei.org>2023-07-10 12:03:38 +1000
committerYuchen Pei <id@ypei.org>2023-07-10 12:03:38 +1000
commit35a15e183ced5cb9529d7e35433dcb26db548897 (patch)
treeff20338acf413ed93c16cd29d781397d1c77525b
parent49fc5fa02bf06ccc419a8ec26abe3dcdf61a57b0 (diff)
Add some more wikis and wiki-open-url
-rw-r--r--wiki-engine.el17
-rw-r--r--wiki-utils.el44
2 files changed, 42 insertions, 19 deletions
diff --git a/wiki-engine.el b/wiki-engine.el
index a201c72..fb6fcba 100644
--- a/wiki-engine.el
+++ b/wiki-engine.el
@@ -90,13 +90,20 @@ The site name is passed as a symbol WIKI-SITE."
(defun-wiki-fetchers)
(defun wiki-open-url (url)
- "Open the wiki corresponding to URL.
+ "Open the raw wiki corresponding to the URL of a html wiki page.
-If URL points to html title, open the corresponding raw title.
-If URL points to a raw title, open directly.
-If URL points to a host, assume it is mediawiki try to open main page."
+If URL points to html title, open the corresponding raw title."
(interactive "sURL: ")
-
+ (when-let
+ ((found-site
+ (seq-find
+ (lambda (site-pair)
+ (when-let ((base-url (plist-get (cdr site-pair) :base-url)))
+ (string-prefix-p base-url url)))
+ wiki-sites)))
+ (pcase-let ((`(,site-id . ,site-info) found-site))
+ (funcall (wiki-site-fetcher site-id)
+ (string-remove-prefix (plist-get site-info :base-url) url))))
)
(provide 'wiki-engine)
diff --git a/wiki-utils.el b/wiki-utils.el
index 56e3e02..b99be9c 100644
--- a/wiki-utils.el
+++ b/wiki-utils.el
@@ -27,7 +27,12 @@
;;; Code:
(require 'url-parse)
-(defvar wiki-download-dir "~/Downloads")
+(defvar wiki-local-dir (locate-user-emacs-file "wiki")
+ "Path to local directory of wiki files.")
+
+(defvar wiki-fetch-prefer-local t
+ "If non-nil, visit the local file if exists when instructed for
+fetching.")
(defun wiki-fetch-url (url &optional callback title)
"Fetch URL asynchronously.
@@ -44,13 +49,14 @@ Then calls CALLBACK which is a closure taking no argument."
)
(defun wiki-fetch-url-save-and-switch (status file-name)
- (unless (plist-get status :error)
- (wiki-delete-http-header)
- (write-file file-name)
- (let ((coding-system-for-read 'utf-8))
- (revert-buffer t t))
- (switch-to-buffer (current-buffer))
- ))
+ (when (plist-get status :error)
+ (error "Wiki fetch failed: %s" (plist-get status :error)))
+ (wiki-delete-http-header)
+ (write-file file-name)
+ (let ((coding-system-for-read 'utf-8))
+ (revert-buffer t t))
+ (switch-to-buffer (current-buffer))
+ )
(defun wiki-delete-http-header ()
(delete-region (point-min) (progn (wiki-skip-http-header) (point))))
@@ -72,9 +78,9 @@ Then calls CALLBACK which is a closure taking no argument."
(archwiki-en :base-url "https://wiki.archlinux.org/title/"
:engine mediawiki
:display-name "Archwiki EN")
- (debianwiki :base-url "https://wiki.debian.org/"
- :engine moinmoin
- :display-name "Debian Wiki")
+ (debian-wiki :base-url "https://wiki.debian.org/"
+ :engine moinmoin
+ :display-name "Debian Wiki")
(emacswiki :base-url "https://www.emacswiki.org/emacs/"
:engine oddmuse
:display-name "EmacsWiki")
@@ -93,6 +99,19 @@ Then calls CALLBACK which is a closure taking no argument."
(libreplanet :base-url "https://libreplanet.org/wiki/"
:engine mediawiki
:display-name "Libreplanet Wiki")
+ (oddmuse :base-url "https://oddmuse.org/wiki/"
+ :engine oddmuse
+ :display-name "Oddmuse")
+ (ubuntu-wiki :base-url "https://wiki.ubuntu.com/"
+ :engine moinmoin
+ :display-name "Ubuntu Wiki")
+ (ubuntu-community-help-wiki
+ :base-url "https://help.ubuntu.com/community/"
+ :engine moinmoin
+ :display-name "Ubuntu Community Help Wiki")
+ (wikiindex :base-url "https://wikiindex.org/"
+ :engine mediawiki
+ :display-name "WikiIndex")
(wikipedia-en :base-url "https://en.wikipedia.org/wiki/"
:engine mediawiki
:display-name "Wikipedia EN")
@@ -102,9 +121,6 @@ Then calls CALLBACK which is a closure taking no argument."
(wiktionary-en :base-url "https://en.wiktionary.org/wiki/"
:engine mediawiki
:display-name "Wiktionary EN")
- (debianwiki :base-url "https://wiki.debian.org/"
- :engine moinmoin
- :display-name "Debian Wiki")
)
"Alist of wiki sites.