(,(kbd "C-c P f") . pelican-set-field)
(,(kbd "C-c P h") . pelican-make-html)
(,(kbd "C-c P n") . pelican-mode-insert-header)
- (,(kbd "C-c P p") . pelican-mode-publish-draft)
+ (,(kbd "C-c P p") . pelican-mode-publish)
(,(kbd "C-c P u") . pelican-make-rsync-upload)))
;;;###autoload
(interactive "P")
(pelican-mode-set-field (if original :date :modified) 'now))
-(defun pelican-mode-publish-draft ()
- "Remove draft status from a Pelican article."
+(defun pelican-mode-publish ()
+ "Remove draft or hidden status from a Pelican article."
(interactive)
(pelican-mode-remove-field :status)
(pelican-mode-update-date :date))
-(defun pelican-mode-insert-draft-article-header (title tags)
- "Insert a Pelican header for a draft with a TITLE and TAGS."
+(defun pelican-mode-insert-article-header (title tags)
+ "Insert a Pelican header for an article with a TITLE and TAGS."
(interactive "sArticle title: \nsTags: ")
- (apply #'pelican-mode-set-fields
- `(:title ,title
- ,@pelican-mode-default-article-fields
- :tags ,tags)))
+ (save-excursion
+ (goto-char 0)
+ (insert "\n")
+ (apply #'pelican-mode-set-fields
+ `(:title ,title
+ ,@pelican-mode-default-article-fields
+ :tags ,tags))))
(defun pelican-mode-insert-page-header (title &optional hidden)
"Insert a Pelican header for a page with a TITLE.
If HIDDEN is non-nil, the page is marked hidden; otherwise it
has no status."
(interactive "sPage title: \nP")
- (apply #'pelican-mode-set-fields
- (append
- (list :title title :status (when hidden "hidden"))
- pelican-mode-default-page-fields)))
+ (save-excursion
+ (goto-char 0)
+ (insert "\n")
+ (apply #'pelican-mode-set-fields
+ (append
+ (list :title title :status (when hidden "hidden"))
+ pelican-mode-default-page-fields))))
(defun pelican-mode-insert-header ()
"Insert a Pelican header for a page or article."
(call-interactively
(if (pelican-mode-page-p)
#'pelican-mode-insert-page-header
- #'pelican-mode-insert-draft-article-header)))
+ #'pelican-mode-insert-article-header)))
(defun pelican-make (target)
"Execute TARGET in a Makefile at the root of the site."
(defun pelican-mode-page-p ()
"Return non-nil the current buffer is a Pelican page."
- (when-let (pelican-mode-base (pelican-mode-find-root))
- (let* ((relative (file-relative-name buffer-file-name pelican-mode-base))
- (components (split-string relative "/")))
- (equal "pages" (cadr components)))))
+ (string-match-p
+ "^[^/]+/pages/"
+ (file-relative-name
+ (abbreviate-file-name (or (buffer-file-name) (buffer-name)))
+ (pelican-mode-find-root))))
(defun pelican-mode-default-slug ()
- "Generate a Pelican article/page slug for the current buffer."
- (if-let ((pelican-mode-base (pelican-mode-find-root))
- (file-name (file-name-sans-extension buffer-file-name)))
- (let* ((relative (file-relative-name file-name pelican-mode-base))
- (components (cdr (split-string relative "/")))
- (components (if (string= "pages" (car components))
- (cdr components) components)))
- (mapconcat 'identity components "/"))
- (when-let (file-name (file-name-sans-extension buffer-file-name))
- (file-name-base file-name))))
+ "Generate a Pelican slug for the current buffer."
+ (file-name-sans-extension
+ (replace-regexp-in-string
+ "^[^/]+/\\(?:pages/\\)?" ""
+ (file-relative-name
+ (abbreviate-file-name (or (buffer-file-name) (buffer-name)))
+ (pelican-mode-find-root)))))
(defun pelican-mode-find-root ()
"Return the root of the buffer's Pelican site, or nil."