diff options
Diffstat (limited to 'wiki-engine.el')
-rw-r--r-- | wiki-engine.el | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/wiki-engine.el b/wiki-engine.el index fb48994..74c27e0 100644 --- a/wiki-engine.el +++ b/wiki-engine.el @@ -33,12 +33,12 @@ (defun wiki-engine-mediawiki-fetch (wiki-site title) "Fetch a mediawiki entry describing TITLE. -The site name is passed as a symbol WIKI-SITE." +The site handle is passed as a symbol WIKI-SITE." (let ((wiki-site-info (alist-get wiki-site wiki-sites))) (cl-assert (eq (plist-get wiki-site-info :engine) 'mediawiki)) (when (string-empty-p title) (setq title "Main Page")) (unless (and wiki-fetch-prefer-local - (wiki-local-find-file + (wiki-find-file title (wiki-locate-dir wiki-site))) (wiki-fetch-url @@ -55,42 +55,51 @@ The site name is passed as a symbol WIKI-SITE." (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) - (wiki-locate-dir wiki-site) - (lambda () - (wiki-mode) - (setq-local wiki-site wiki-site) - ) - title))) + (unless (and wiki-fetch-prefer-local + (wiki-find-file + title + (wiki-locate-dir wiki-site))) + (wiki-fetch-url + (format "%s?action=download;id=%s" + (plist-get wiki-site-info :base-url) + title) + (wiki-locate-dir wiki-site) + (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) - (wiki-locate-dir wiki-site) - (lambda () - (wiki-mode) - (setq-local wiki-site wiki-site) - ) - title))) + (unless (and wiki-fetch-prefer-local + (wiki-find-file + title + (wiki-locate-dir wiki-site))) + (wiki-fetch-url + (format "%s%s?action=raw" + (plist-get wiki-site-info :base-url) + title) + (wiki-locate-dir wiki-site) + (lambda () + (wiki-mode) + (setq-local wiki-site wiki-site) + ) + title)))) (defun wiki-locate-dir (wiki-site) "Locate the directory for a WIKI-SITE." (expand-file-name (format "%s" wiki-site) wiki-local-dir)) -(defun wiki-local-find-file (title &optional dir create-if-not-exists - extension) +(defun wiki-find-file (title &optional dir create-if-not-exists + extension) "Find local TITLE in DIR. Returns the file-name if success, and nil otherwise. If CREATE-IF-NOT-EXISTS is non-nil, creates the file is not found. DIR defaults to `default-directory'." + (interactive (list (read-file-name "Find wiki file: "))) (unless dir (setq dir default-directory)) (let ((file-name (expand-file-name (if extension @@ -99,6 +108,7 @@ DIR defaults to `default-directory'." dir))) (when (or (file-exists-p file-name) create-if-not-exists) (find-file file-name) + (wiki-mode) file-name))) (defun wiki-engine-fetcher (wiki-site-info) |