Generate mmm-modes automatically based on a list.

Includes a config variable for use in `dotspacemacs-configuration-layers`
This commit is contained in:
Christian Brassat 2016-07-15 10:28:33 +02:00 committed by syl20bnr
parent 1f9fd7077e
commit e3307d0b17
3 changed files with 36 additions and 74 deletions

View File

@ -9,6 +9,7 @@
- [[#install][Install]]
- [[#configuration][Configuration]]
- [[#live-preview][Live preview]]
- [[#automatic-mmm-mode-generation][Automatic MMM-Mode Generation]]
- [[#usage][Usage]]
- [[#generate-a-toc][Generate a TOC]]
- [[#key-bindings][Key bindings]]
@ -65,6 +66,16 @@ Additionally there is =flymd= package in =chrome= layer that allows to preview
markdown buffer in Chrome. Please refer to =chrome= layer documentation for more
information.
** Automatic MMM-Mode Generation
To generate MMM-Modes for languages where the language name directly relates to
the Emacs mode name, set the value of the variable =markdown-mmm-auto-modes= to
a list of the languages:
#+BEGIN_SRC emacs-lisp
dotspacemacs-configuration-layers '(
(markdown :variables markdown-mmm-auto-modes '("c" "c++" "python" "scala"))
#+END_SRC
* Usage
** Generate a TOC
To generate a table of contents type on top of the buffer:

View File

@ -13,3 +13,8 @@
(defvar markdown-live-preview-engine 'eww
"Possibe values are `eww' (built-in browser) or `vmd' (installed with `npm').")
(defvar markdown-mmm-auto-modes
'("c" "c++" "css" "java" "javascript" "python" "ruby" "rust" "scala")
"Automatically add mmm class for languages where its name and mode name are
directly related")

View File

@ -43,6 +43,17 @@
(defun markdown/post-init-smartparens ()
(add-hook 'markdown-mode-hook 'smartparens-mode))
(defun markdown/mmm-auto-class (lang &optional submode)
(let ((class (intern (concat "markdown-" lang)))
(submode (or submode (intern (concat lang "-mode"))))
(front (concat "^```" lang "[\n\r]+"))
(back "^```$"))
(mmm-add-classes (list (list class
:submode submode
:front front
:back back)))
(mmm-add-mode-ext-class 'markdown-mode nil class)))
(defun markdown/init-markdown-mode ()
(use-package markdown-mode
:mode ("\\.m[k]d" . markdown-mode)
@ -170,80 +181,15 @@ Will work on both org-mode and any mode that accepts plain html."
:init (add-hook 'markdown-mode-hook 'spacemacs/activate-mmm-mode)
:config
(progn
(spacemacs|hide-lighter mmm-mode)
(mmm-add-classes '((markdown-ini
:submode conf-unix-mode
:face mmm-declaration-submode-face
:front "^```ini[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-python
:submode python-mode
:face mmm-declaration-submode-face
:front "^```python[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-html
:submode web-mode
:face mmm-declaration-submode-face
:front "^```html[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-java
:submode java-mode
:face mmm-declaration-submode-face
:front "^```java[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-ruby
:submode ruby-mode
:face mmm-declaration-submode-face
:front "^```ruby[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-c
:submode c-mode
:face mmm-declaration-submode-face
:front "^```c[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-c++
:submode c++-mode
:face mmm-declaration-submode-face
:front "^```c\+\+[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-elisp
:submode emacs-lisp-mode
:face mmm-declaration-submode-face
:front "^```elisp[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-javascript
:submode javascript-mode
:face mmm-declaration-submode-face
:front "^```javascript[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-ess
:submode R-mode
:face mmm-declaration-submode-face
:front "^```{?r.*}?[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-rust
:submode rust-mode
:face mmm-declaration-submode-face
:front "^```rust[\n\r]+"
:back "^```$")))
(mmm-add-classes '((markdown-scala
:submode scala-mode
:face mmm-declaration-submode-face
:front "^```scala[\n\r]+"
:back "^```$")))
(setq mmm-global-mode t)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-python)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-java)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-ruby)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-c)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-c++)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-elisp)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-html)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-javascript)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-ess)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-rust)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-ini)
(mmm-add-mode-ext-class 'markdown-mode nil 'markdown-scala))))
;; Automatically add mmm class for languages where its name and mode
;; name are directly related
(mapc 'markdown/mmm-auto-class markdown-mmm-auto-modes)
;; Otherwise define these manually
(markdown/mmm-auto-class "html" 'web-mode)
(markdown/mmm-auto-class "elisp" 'emacs-lisp-mode)
(markdown/mmm-auto-class "ess" 'R-mode)
(setq mmm-global-mode t))))
(defun markdown/init-vmd-mode ()
(use-package vmd-mode