;; Copyright 2013-2017 Joe Wreschnig
;;
;; Author: Joe Wreschnig <joe.wreschnig@gmail.com>
-;; Package-Version: 20170730
+;; Package-Version: 20170808
;; Package-Requires: ((emacs "25"))
+;; URL: https://git.korewanetadesu.com/pelican-mode.git
;; Keywords: convenience, editing
;;
;; This program is free software; you can redistribute it and/or modify
;;; Commentary:
;;
-;; pelican-mode is an Emacs minor mode for editing pages and posts in
-;; Pelican sites. Pelican is a static site generator which can
+;; pelican-mode is an Emacs minor mode for editing articles and pages
+;; 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/.
;;
(require 'seq)
(require 'subr-x)
-;; Mode Definition
-
-;;;###autoload
-(define-minor-mode pelican-mode
- "Toggle Pelican mode.
-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/.
-
-Rather than manually enabling this mode, you may wish to use
-`pelican-global-mode' or `pelican-mode-enable-if-site'.
-
-When Pelican mode is enabled, additional commands are available
-for editing articles or pages:
-
-\\{pelican-mode-map}"
- :lighter " Pelican"
- :keymap `((,(kbd "C-c P d") . pelican-mode-update-date)
- (,(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)
- (,(kbd "C-c P u") . pelican-make-rsync-upload)))
-
-;;;###autoload
-(define-minor-mode pelican-global-mode
- "Toggle Pelican global mode.
-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.
-
-If you disable this, you may still enable `pelican-mode' manually
-or add `pelican-mode-enable-if-site' to more specific mode
-hooks."
- :global t
- :group 'pelican-mode
- (if pelican-global-mode
- (add-hook 'text-mode-hook #'pelican-mode-enable-if-site)
- (remove-hook 'text-mode-hook #'pelican-mode-enable-if-site)))
-
-;;;###autoload
-(defun pelican-mode-enable-if-site ()
- "Enable `pelican-mode' if this buffer is part of a Pelican site.
-
-Pelican sites are detected by looking for a file named `pelicanconf.py'
-in an ancestor directory."
- (when (pelican-mode-find-root)
- (pelican-mode)))
-
-\f
-
;; Customizations
-(defgroup pelican-mode nil
+(defgroup pelican nil
"Support for Pelican articles and pages.
For more information about Pelican see URL https://blog.getpelican.com/."
:group 'convenience)
+(defcustom pelican-mode-keymap-prefix (kbd "C-c P")
+ "Pelican mode keymap prefix."
+ :group 'pelican
+ :type 'string)
+
(defcustom pelican-mode-default-page-fields
'(:slug slug)
"Fields to include when creating a new page.
See the documentation for `pelican-mode-set-field' for more information
about metadata fields and special values."
- :group 'pelican-mode
+ :group 'pelican
:type '(plist))
(defcustom pelican-mode-default-article-fields
See the documentation for `pelican-mode-set-field' for more information
about metadata fields and special values."
- :group 'pelican-mode
+ :group 'pelican
:type '(plist))
(defcustom pelican-mode-formats
This association list maps modes to functions that take two
arguments, field and value strings."
- :group 'pelican-mode
+ :group 'pelican
:type '(alist :key-type function :value-type function))
\f
+;; Mode Definition
+
+(defvar pelican-mode-command-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "d") #'pelican-mode-update-date)
+ (define-key map (kbd "f") #'pelican-mode-set-field)
+ (define-key map (kbd "h") #'pelican-make-html)
+ (define-key map (kbd "n") #'pelican-mode-insert-header)
+ (define-key map (kbd "p") #'pelican-mode-publish)
+ (define-key map (kbd "u") #'pelican-make-rsync-upload)
+ map)
+ "Keymap for Pelican commands after `pelican-mode-keymap-prefix'.")
+(fset 'pelican-mode-command-map pelican-mode-command-map)
+
+(defvar pelican-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map pelican-mode-keymap-prefix
+ 'pelican-mode-command-map)
+ map)
+ "Keymap for Pelican mode.")
+
+;;;###autoload
+(define-minor-mode pelican-mode
+ "Toggle Pelican mode.
+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/.
+
+Rather than manually enabling this mode, you may wish to use
+`pelican-global-mode' or `pelican-mode-enable-if-site'.
+
+When Pelican mode is enabled, additional commands are available
+for editing articles or pages:
+
+\\{pelican-mode-map}"
+ :group 'pelican
+ :keymap pelican-mode-map
+ :lighter " Pelican")
+
+;;;###autoload
+(define-globalized-minor-mode pelican-global-mode pelican-mode
+ (lambda ()
+ (when (derived-mode-p #'text-mode)
+ (pelican-mode-enable-if-site)))
+ :group 'pelican
+ :require 'pelican-mode)
+
+;;;###autoload
+(defun pelican-mode-enable-if-site ()
+ "Enable `pelican-mode' if this buffer is part of a Pelican site.
+
+Pelican sites are detected by looking for a file named `pelicanconf.py'
+in an ancestor directory."
+ (when (pelican-mode-find-root)
+ (pelican-mode)))
+
+\f
+
;; User Commands
(defun pelican-mode-set-field (field value)