spacemacs/layers/+lang/markdown/packages.el

216 lines
8.0 KiB
EmacsLisp

;;; packages.el --- Markdown Layer packages File for Spacemacs
;;
;; Copyright (c) 2012-2022 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(defconst markdown-packages
'(
company
company-emoji
emoji-cheat-sheet-plus
gh-md
markdown-mode
markdown-toc
mmm-mode
smartparens
valign
(vmd-mode :toggle (eq 'vmd markdown-live-preview-engine))))
(defun markdown/post-init-company ()
(dolist (mode markdown--key-bindings-modes)
(eval `(spacemacs|add-company-backends
:backends company-capf
:modes ,mode))))
(defun markdown/post-init-company-emoji ()
(dolist (mode markdown--key-bindings-modes)
(eval `(spacemacs|add-company-backends
:backends company-emoji
:modes ,mode))))
(defun markdown/post-init-emoji-cheat-sheet-plus ()
(add-hook 'markdown-mode-hook 'emoji-cheat-sheet-plus-display-mode))
(defun markdown/init-gh-md ()
(use-package gh-md
:defer t
:init
(dolist (mode markdown--key-bindings-modes)
(spacemacs/set-leader-keys-for-major-mode mode
"cr" 'gh-md-render-buffer))))
(defun markdown/post-init-valign ()
(add-hook 'markdown-mode-hook 'valign-mode))
(defun markdown/post-init-smartparens ()
(add-hook 'markdown-mode-hook #'spacemacs//activate-smartparens))
(defun markdown/init-markdown-mode ()
(use-package markdown-mode
:mode
(("\\.mkd\\'" . markdown-mode)
("\\.mdk\\'" . markdown-mode)
("\\.mdx\\'" . markdown-mode))
:defer t
:config
(progn
;; Make markdown-mode behave a bit more like org w.r.t. code blocks i.e.
;; use proper syntax highlighting
(setq markdown-fontify-code-blocks-natively t)
;; Declare prefixes and bind keys
(dolist (prefix '(("mc" . "markdown/command")
("mh" . "markdown/header")
("mi" . "markdown/insert")
("ml" . "markdown/lists")
("mt" . "markdown/table")
("mT" . "markdown/toggle")
("mx" . "markdown/text")))
(dolist (mode markdown--key-bindings-modes)
(spacemacs/declare-prefix-for-mode
mode (car prefix) (cdr prefix))))
(dolist (mode markdown--key-bindings-modes)
(spacemacs/set-leader-keys-for-major-mode mode
;; rebind this so terminal users can use it
"M-RET" 'markdown-insert-list-item
;; Movement
"{" 'markdown-backward-paragraph
"}" 'markdown-forward-paragraph
;; Completion, and Cycling
"]" 'markdown-complete
;; Indentation
">" 'markdown-indent-region
"<" 'markdown-outdent-region
;; Buffer-wide commands
"c]" 'markdown-complete-buffer
"cc" 'markdown-check-refs
"ce" 'markdown-export
"cm" 'markdown-other-window
"cn" 'markdown-cleanup-list-numbers
"co" 'markdown-open
"cp" 'markdown-preview
"cv" 'markdown-export-and-preview
"cw" 'markdown-kill-ring-save
;; headings
"hi" 'markdown-insert-header-dwim
"hI" 'markdown-insert-header-setext-dwim
"h1" 'markdown-insert-header-atx-1
"h2" 'markdown-insert-header-atx-2
"h3" 'markdown-insert-header-atx-3
"h4" 'markdown-insert-header-atx-4
"h5" 'markdown-insert-header-atx-5
"h6" 'markdown-insert-header-atx-6
"h!" 'markdown-insert-header-setext-1
"h@" 'markdown-insert-header-setext-2
;; Insertion of common elements
"-" 'markdown-insert-hr
"if" 'markdown-insert-footnote
"ii" 'markdown-insert-image
"ik" 'spacemacs/insert-keybinding-markdown
"il" 'markdown-insert-link
"iw" 'markdown-insert-wiki-link
"iu" 'markdown-insert-uri
"iT" 'markdown-insert-table
;; Element removal
"k" 'markdown-kill-thing-at-point
;; List editing
"li" 'markdown-insert-list-item
;; Toggles
"Ti" 'markdown-toggle-inline-images
"Tl" 'markdown-toggle-url-hiding
"Tm" 'markdown-toggle-markup-hiding
"Tt" 'markdown-toggle-gfm-checkbox
"Tw" 'markdown-toggle-wiki-links
;; Table
"ta" 'markdown-table-align
"tp" 'markdown-table-move-row-up
"tn" 'markdown-table-move-row-down
"tf" 'markdown-table-move-column-right
"tb" 'markdown-table-move-column-left
"tr" 'markdown-table-insert-row
"tR" 'markdown-table-delete-row
"tc" 'markdown-table-insert-column
"tC" 'markdown-table-delete-column
"ts" 'markdown-table-sort-lines
"td" 'markdown-table-convert-region
"tt" 'markdown-table-transpose
;; region manipulation
"xb" 'markdown-insert-bold
"xB" 'markdown-insert-gfm-checkbox
"xc" 'markdown-insert-code
"xC" 'markdown-insert-gfm-code-block
"xi" 'markdown-insert-italic
"xk" 'markdown-insert-kbd
"xp" 'markdown-insert-pre
"xq" 'markdown-insert-blockquote
"xs" 'markdown-insert-strike-through
"xQ" 'markdown-blockquote-region
"xP" 'markdown-pre-region
;; Following and Jumping
"N" 'markdown-next-link
"f" 'markdown-follow-thing-at-point
"P" 'markdown-previous-link
"<RET>" 'markdown-do)
(when (eq 'eww markdown-live-preview-engine)
(spacemacs/set-leader-keys-for-major-mode mode
"cP" 'markdown-live-preview-mode)))
;; Header navigation in normal state movements
(evil-define-key 'normal markdown-mode-map
"gj" 'outline-forward-same-level
"gk" 'outline-backward-same-level
"gh" 'outline-up-heading
;; next visible heading is not exactly what we want but close enough
"gl" 'outline-next-visible-heading)
;; Promotion, Demotion
(add-hook 'spacemacs-editing-style-hook
'spacemacs//markdown-hjkl-promotion-demotion)
(spacemacs//markdown-hjkl-promotion-demotion dotspacemacs-editing-style)
(define-key markdown-mode-map (kbd "M-<down>") 'markdown-move-down)
(define-key markdown-mode-map (kbd "M-<left>") 'markdown-promote)
(define-key markdown-mode-map (kbd "M-<right>") 'markdown-demote)
(define-key markdown-mode-map (kbd "M-<up>") 'markdown-move-up))))
(defun markdown/init-markdown-toc ()
(use-package markdown-toc
:defer t
:init
(dolist (mode markdown--key-bindings-modes)
(spacemacs/set-leader-keys-for-major-mode mode
"it" 'markdown-toc-generate-toc))))
(defun markdown/init-mmm-mode ()
(use-package mmm-mode
:commands mmm-mode
:init (add-hook 'markdown-mode-hook 'spacemacs/activate-mmm-mode)
;; Automatically add mmm class for languages
:config
(progn
(mapc 'markdown/mmm-auto-class markdown-mmm-auto-modes)
(spacemacs|hide-lighter mmm-mode))))
(defun markdown/init-vmd-mode ()
(use-package vmd-mode
:defer t
:init
(dolist (mode markdown--key-bindings-modes)
(spacemacs/set-leader-keys-for-major-mode mode
"cP" 'vmd-mode))))