From 35a15e183ced5cb9529d7e35433dcb26db548897 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 10 Jul 2023 12:03:38 +1000 Subject: Add some more wikis and wiki-open-url --- wiki-engine.el | 17 ++++++++++++----- wiki-utils.el | 44 ++++++++++++++++++++++++++++++-------------- 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. -- cgit v1.2.3