From fe9c1a19d71ab757b9a20e0f601b80b2ac7761c6 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 10 Jul 2023 13:48:16 +1000 Subject: Enhance local navigation. Add `wiki-find-file' to open a local file in wiki-mode. Guess the wikisite id based on the default directory. --- wiki-engine.el | 58 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 24 deletions(-) (limited to 'wiki-engine.el') 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) -- cgit v1.2.3