+(defcustom pelican-mode-formats
+ '((adoc-mode . pelican-mode-set-field-adoc-mode)
+ (markdown-mode . pelican-mode-set-field-markdown-mode)
+ (org-mode . pelican-mode-set-field-org-mode)
+ (rst-mode . pelican-mode-set-field-rst-mode))
+ "Functions to handle setting metadata, based on major mode.
+
+This association list maps modes to functions that take two
+arguments, field and value strings."
+ :group 'pelican-mode
+ :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}"
+ :keymap pelican-mode-map
+ :lighter " Pelican")
+
+;;;###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.