X-Git-Url: https://git.korewanetadesu.com/?p=pelican-mode.git;a=blobdiff_plain;f=pelican-mode.el;h=3691c2fe4095a95dc6468c5001e2cd69235fd834;hp=fc9de9b496f34755147c0303b0b0a4aa94cbe72b;hb=4cf099e3b9e3e10f1f2f32df7f4b890b6d103657;hpb=0629935734a1ee35d4657ea862b8ca5205f7198e diff --git a/pelican-mode.el b/pelican-mode.el index fc9de9b..3691c2f 100644 --- a/pelican-mode.el +++ b/pelican-mode.el @@ -3,7 +3,7 @@ ;; Copyright 2013-2017 Joe Wreschnig ;; ;; Author: Joe Wreschnig -;; Package-Version: 20170618 +;; Package-Version: 20170730 ;; Package-Requires: ((emacs "25")) ;; Keywords: convenience, editing ;; @@ -32,6 +32,27 @@ (require 'seq) (require 'subr-x) +(defgroup pelican-mode nil + "Support for Pelican posts and pages." + :group 'convenience) + +(defcustom pelican-mode-default-page-fields + '(:slug slug) + "Fields to include when creating a new page. + +See the documentation for `pelican-field' for more information +about metadata fields and special values." + :group 'pelican-mode + :type '(plist)) + +(defcustom pelican-mode-default-post-fields + '(:date now :status "draft" :slug slug) + "Fields to include when creating a new post. + +See the documentation for `pelican-field' for more information +about metadata fields and special values." + :group 'pelican-mode + :type '(plist)) (defun pelican-timestamp (&optional time) "Generate a Pelican-compatible timestamp for TIME." @@ -51,10 +72,12 @@ the unquoted printed representation of it is used: - `slug' means the file's path relative to the document root sans extension; see `pelican-default-slug'. -- nil means return an empty string, without any name or value." +- nil or an empty strings means return an empty string, without + any name or value." (setq value (pcase value ('now (pelican-timestamp)) ('slug (pelican-default-slug)) + ('"" nil) (_ value))) (when (symbolp name) (setq name (string-remove-prefix ":" (symbol-name name)))) @@ -67,7 +90,7 @@ the unquoted printed representation of it is used: "")) (defun pelican-rst-title (title) - "Create a ReSt version of TITLE." + "Format a reStructureText version of TITLE." (concat title "\n" (make-string (string-width title) ?#) "\n\n")) (defun pelican-title (title) @@ -94,31 +117,25 @@ the unquoted printed representation of it is used: (defun pelican-insert-draft-post-header (title tags) "Insert a Pelican header for a draft with a TITLE and TAGS." (interactive "sPost title: \nsTags: ") - (save-excursion - (goto-char 0) - (insert (pelican-header title - :date 'now - :status "draft" - :tags tags - :slug 'slug)))) + (apply #'pelican-insert-header + `(,title ,@pelican-mode-default-post-fields :tags ,tags))) (defun pelican-insert-page-header (title &optional hidden) "Insert a Pelican header for a page with a TITLE, potentially HIDDEN." (interactive (list (read-string "Page title: ") (y-or-n-p "Hidden? "))) - (save-excursion - (goto-char 0) - (insert (pelican-header title - :status (when hidden "hidden") - :slug 'slug)))) + (apply #'pelican-insert-header + `(,title ,@pelican-mode-default-page-fields + :hidden ,(when hidden "hidden")))) (defun pelican-insert-auto-header () "Insert a Pelican header for a page or post." (interactive) - (call-interactively (if (pelican-page-p) - 'pelican-insert-page-header - 'pelican-insert-draft-post-header))) + (call-interactively + (if (pelican-page-p) + #'pelican-insert-page-header + #'pelican-insert-draft-post-header))) (defun pelican-set-field (field value) "Set FIELD to VALUE." @@ -153,12 +170,12 @@ the unquoted printed representation of it is used: (defun pelican-update-date () "Update a Pelican date header." (interactive) - (pelican-set-field "date" (pelican-timestamp))) + (pelican-set-field :date 'now)) (defun pelican-publish-draft () "Remove draft status from a Pelican post." (interactive) - (pelican-set-field "status" nil) + (pelican-remove-field :status) (pelican-update-date)) (defun pelican-page-p () @@ -207,7 +224,7 @@ the unquoted printed representation of it is used: (if-let (default-directory (pelican-find-root)) (compilation-start (format "make %s" target) nil (lambda (_) "*pelican*")) - (message "This doesn't look like a Pelican site."))) + (user-error "This doesn't look like a Pelican site"))) (defun pelican-make-html () "Generate HTML via a Makefile at the root of the site."