Significant Whitespace Mode. Because Jade and Stylus are both 'significant white space' languages, sws-mode can be used to edit both types of files
Lines can be indented or un-indented (is that a word?) with tab, shift-tab respectively. Indentation will look at the proceeding line and not indent more than 1 level of nesting below it.
html body #container .content ^ |----cursor anywhere on this line except at beginning of text, press tab or S-tab html body #container .content ^ |---- cursor moves to beginning of text...once cursor is at beginning of text, press tab html body #container .content ^ |---- now line is maximum indented, press tab again html body #container .content ^ |---- line moves to minimum indentation level (no indentation)
Regions can be indentend in a similar way; however, this is still buggy...
Since jade and stylus nesting is somewhat related to sexp layout I hope to have sexp related selection & manipulation working in the future. See
jade-highlight-sexp for an example
- [tab] if region is active, do 'smart indent' on region. otherwise, move cursor to beginning of line text. If cursor already at beginning of line text, do 'smart indent' on line.
- [shift-tab] if region is active, do 'smart dedent' on region. otherwise, move cursor to beginning of line text. If cursor already at beginning of line text, do 'smart dedent' on line.
Emacs major mode for jade template highlighting. This mode extends sws-mode to provide some rudimentary syntax highlighting.
I'm not sure yet how to highlight .styl files, so for now, just use sws-mode when editing stylus mode.
Copy the jade-mode.el and sws-mode.el to some directory on your computer. I put mine under
~/code/jade-mode and sym-link the jade-mode folder into
~/.emacs.d/vendor/. You can just as easily put the folder itself under '~/.emacs.d/vendor/`
Add the following lines to any of your initialization files
(add-to-list 'load-path "~/.emacs.d/vendor/jade-mode") (require 'sws-mode) (require 'jade-mode) (add-to-list 'auto-mode-alist '("\\.styl$" . sws-mode)) (add-to-list 'auto-mode-alist '("\\.jade$" . jade-mode))
if you want to add flymake support for jade files:
(defun flymake-jade-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-intemp)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name))) (arglist (list local-file))) (list "jade" arglist))) (setq flymake-err-line-patterns (cons '("\\(.*\\): \\(.+\\):\\([[:digit:]]+\\)$" 2 3 nil 1) flymake-err-line-patterns)) (add-to-list 'flymake-allowed-file-name-masks '("\\.jade\\'" flymake-jade-init))