diff options
author | Yuchen Pei <id@ypei.org> | 2023-07-09 23:12:55 +1000 |
---|---|---|
committer | Yuchen Pei <id@ypei.org> | 2023-07-09 23:12:55 +1000 |
commit | 383b7a22e584dd9c5990dcd1b0cdf48f24ffe962 (patch) | |
tree | 4f2445cf463205feaf3fe07033b7ca29bd358567 | |
parent | fe1374efae651f914636fd0575f877837136f0d5 (diff) |
Adding more wiki site examples
and simple moinmoin / oddmuse fetching support.
-rw-r--r-- | wiki-engine.el | 29 | ||||
-rw-r--r-- | wiki-utils.el | 41 |
2 files changed, 62 insertions, 8 deletions
diff --git a/wiki-engine.el b/wiki-engine.el index f878c30..da4dfb3 100644 --- a/wiki-engine.el +++ b/wiki-engine.el @@ -41,7 +41,34 @@ The site name is passed as a symbol WIKI-SITE." (lambda () (wiki-mode) (setq-local wiki-site wiki-site) - )))) + ) + title))) + +(defun wiki-engine-oddmuse-fetch (wiki-site title) + (let ((wiki-site-info (alist-get wiki-site wiki-sites))) + (cl-assert (eq (plist-get wiki-site-info :engine) 'oddmuse)) + (wiki-fetch-url + (format "%s?action=download;id=%s" + (plist-get wiki-site-info :base-url) + title) + (lambda () + (wiki-mode) + (setq-local wiki-site wiki-site) + ) + title))) + +(defun wiki-engine-moinmoin-fetch (wiki-site title) + (let ((wiki-site-info (alist-get wiki-site wiki-sites))) + (cl-assert (eq (plist-get wiki-site-info :engine) 'moinmoin)) + (wiki-fetch-url + (format "%s%s?action=raw" + (plist-get wiki-site-info :base-url) + title) + (lambda () + (wiki-mode) + (setq-local wiki-site wiki-site) + ) + title))) (defun wiki-engine-fetcher (wiki-site-info) (intern (format "wiki-engine-%s-fetch" diff --git a/wiki-utils.el b/wiki-utils.el index 26e25b7..810e7ec 100644 --- a/wiki-utils.el +++ b/wiki-utils.el @@ -29,13 +29,14 @@ (defvar wiki-download-dir "~/Downloads") -(defun wiki-fetch-url (url &optional callback) +(defun wiki-fetch-url (url &optional callback title) "Fetch URL asynchronously. Then calls CALLBACK which is a closure taking no argument." (interactive "sURL: ") - (let ((file-name (expand-file-name (wiki-make-file-name-from-url url) - wiki-download-dir)) + (let ((file-name (expand-file-name + (or title (wiki-make-file-name-from-url url)) + wiki-download-dir)) (cb (lambda (status file-name) (wiki-fetch-url-save-and-switch status file-name) (when callback (funcall callback))))) @@ -64,20 +65,46 @@ Then calls CALLBACK which is a closure taking no argument." (car (url-path-and-query (url-generic-parse-url (url-unhex-string url))))))) +;; TODO: add wikihow; generalise fandom (defvar wiki-sites '((local) + (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") + (emacswiki :base-url "https://www.emacswiki.org/emacs/" + :engine oddmuse + :display-name "EmacsWiki") + (esp :base-url "https://wiki.endsoftwarepatents.org/wiki/" + :engine mediawiki + :display-name "ESP Wiki") + (fandom-recipes :base-url "https://recipes.fandom.com/wiki/" + :engine mediawiki + :display-name "Fandom Recipes Wiki") + (fsd :base-url "https://directory.fsf.org/wiki/" + :engine mediawiki + :display-name "Free Software Directory") + (haskell-wiki :base-url "https://wiki.haskell.org/" + :engine mediawiki + :display-name "Haskell Wiki") + (libreplanet :base-url "https://libreplanet.org/wiki/" + :engine mediawiki + :display-name "Libreplanet Wiki") (wikipedia-en :base-url "https://en.wikipedia.org/wiki/" :engine mediawiki :display-name "Wikipedia EN") + (wikivoyage-en :base-url "https://en.wikivoyage.org/wiki/" + :engine mediawiki + :display-name "Wikivoyage EN") (wiktionary-en :base-url "https://en.wiktionary.org/wiki/" :engine mediawiki :display-name "Wiktionary EN") - (emacswiki :base-url "https://www.emacswiki.org/emacs/" - :engine oddmuse - :display-name "EmacsWiki") (debianwiki :base-url "https://wiki.debian.org/" :engine moinmoin - :display-name "Debian Wiki")) + :display-name "Debian Wiki") + ) "Alist of wiki sites. Each item is in the form of (identifier . properties), where |