;; 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:
+;; It's intended to be used alongside a major mode for the Pelican
+;; document. Currently supported formats are Markdown,
+;; reStructuredText, AsciiDoc, and Org. It also assumes you've set up
+;; Pelican with ``pelican-quickstart'' or something like it. In
+;; particular it expects:
;;
;; * The existence of ``pelicanconf.py'' and ``Makefile'' in some
;; ancestor directory.
following special values, the unquoted printed representation of
it is used:
-- `now' means the current time; see `pelican-mode-timestamp'.
+- `now' means the current time.
- `slug' means the file's path relative to the document root sans
extension; see `pelican-mode-default-slug'.
for this function to work correctly."
(interactive "sField: \nsValue: ")
(setq value (pcase value
- ('now (pelican-mode-timestamp))
+ ('now (format-time-string "%Y-%m-%d %H:%M"))
('slug (pelican-mode-default-slug))
('"" nil)
(_ value)))
\f
-(defun pelican-mode-timestamp (&optional time)
- "Generate a pelican-mode-compatible timestamp for TIME."
- (format-time-string "%Y-%m-%d %H:%M" time))
-
(defun pelican-mode-set-fields (&rest fields)
"Insert a Pelican header for an article with metadata FIELDS."
(mapc (apply-partially #'apply #'pelican-mode-set-field)
(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."