X-Git-Url: https://git.korewanetadesu.com/?p=pelican-mode.git;a=blobdiff_plain;f=pelican-mode.el;h=f87e73eb5da564c11d75c368d33a23e4d775a8b7;hp=679def982e0ae7da5c98649d18b855f402950418;hb=b5627f66058265c301b335c92c1dda3bb9ccb8a7;hpb=d98f8356dd3d45cf0d1f28475c919781b7c4f060 diff --git a/pelican-mode.el b/pelican-mode.el index 679def9..f87e73e 100644 --- a/pelican-mode.el +++ b/pelican-mode.el @@ -20,11 +20,24 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . + ;;; Commentary: ;; -;; Probably, this doesn't handle a lot of error cases. I also never -;; tested it on networked drives and the lookup for pelicanconf.py -;; might slow it down considerably. +;; pelican-mode is an Emacs minor mode for editing pages and posts in +;; Pelican sites. Pelican is a static site generator which can +;; process a variety of text file formats. For more information, see +;; URL https://blog.getpelican.com/. +;; +;; It's intended to be used alongside `markdown-mode' or `rst-mode'. +;; It also assumes you've set up Pelican with ``pelican-quickstart'' +;; or something like it. In particular it assumes: +;; +;; * The existence of ``pelicanconf.py'' and ``Makefile'' in some +;; ancestor directory. +;; * The first component of the path (e.g. ``content'') after that +;; ancestor is irrelevant. +;; * If the next component is ``pages'', that indicates a page +;; rather than an article. ;;; Code: @@ -33,7 +46,9 @@ (require 'subr-x) (defgroup pelican-mode nil - "Support for Pelican articles and pages." + "Support for Pelican articles and pages. + +For more information about Pelican see URL https://blog.getpelican.com/." :group 'convenience) (defcustom pelican-mode-default-page-fields @@ -111,8 +126,9 @@ arguments, field and value strings." (if (re-search-forward (format "^:%s:.*\n" (regexp-quote field)) nil t) (replace-match (or text "")) (when text - (re-search-forward "^$") - (replace-match text)))))) + (if (re-search-forward "^$" nil t) + (replace-match text) + (insert text))))))) (defun pelican-mode-set-field-markdown-mode (field value) "Set Markdown metadata FIELD to VALUE." @@ -121,8 +137,9 @@ arguments, field and value strings." (if (re-search-forward (format "^%s:.*\n" (regexp-quote field)) nil t) (replace-match text) (when value - (re-search-forward "^$") - (replace-match text))))) + (if (re-search-forward "^$" nil t) + (replace-match text) + (insert text)))))) (defun pelican-mode-set-field (field value) "Set FIELD to VALUE. @@ -191,25 +208,12 @@ the unquoted printed representation of it is used: (components (if (string= "pages" (car components)) (cdr components) components))) (mapconcat 'identity components "/")) - (format "%s/%s" - (file-name-nondirectory - (directory-file-name - (file-name-directory file-name))) - (file-name-base file-name)))) - -(defun pelican-mode-find-in-parents (file-name) - "Find FILE-NAME in the default directory or one of its parents, or nil." - (let* ((parent (expand-file-name default-directory))) - (while (and (not (file-readable-p (concat parent file-name))) - (not (string= parent (directory-file-name parent)))) - (setq parent (file-name-directory (directory-file-name parent)))) - (let ((found (concat parent file-name))) - (if (file-readable-p found) found nil)))) + (when-let (file-name (file-name-sans-extension buffer-file-name)) + (file-name-base file-name)))) (defun pelican-mode-find-root () "Return the root of the buffer's Pelican site, or nil." - (when-let (conf (pelican-mode-find-in-parents "pelicanconf.py")) - (file-name-directory conf))) + (locate-dominating-file default-directory "pelicanconf.py")) (defun pelican-make (target) "Execute TARGET in a Makefile at the root of the site." @@ -217,7 +221,7 @@ the unquoted printed representation of it is used: (if-let (default-directory (pelican-mode-find-root)) (compilation-start (format "make %s" target) nil (lambda (_) "*pelican*")) - (user-error "This doesn't look like a Pelican site"))) + (user-error "No Pelican site root could be found"))) (defun pelican-make-html () "Generate HTML via a Makefile at the root of the site." @@ -236,6 +240,10 @@ With a prefix argument ARG, enable Pelican mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil. +Pelican is a static site generator which can process a variety of +text file formats. For more information, see URL +https://blog.getpelican.com/. + When Pelican mode is enabled, additional commands are available for editing articles or pages: @@ -254,6 +262,10 @@ With a prefix argument ARG, enable Pelican global mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil. +Pelican is a static site generator which can process a variety of +text file formats. For more information, see URL +https://blog.getpelican.com/. + When Pelican global mode is enabled, text files which seem to be part of a Pelican site will have `pelican-mode' automatically enabled.