This repository has been archived by the owner on Jul 4, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
less-mode.el
88 lines (70 loc) · 2.84 KB
/
less-mode.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
;;; less-mode.el --- major mode for editing Less files
;; Copyright (C) 2010 myfreeweb
;; Author: myfreeweb <[email protected]>
;; 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/>.
;;; Code:
(require 'derived)
(require 'compile)
(defconst less-font-lock-keywords
'(("@[^\s:;]+" . font-lock-constant-face)))
(defgroup less nil
"Less mode"
:prefix "less-"
:group 'css)
(defcustom less-lessc-command "lessc --no-color"
"Less compiler command"
:group 'less)
(defcustom less-compile-at-save t
"If not nil, Less buffers will be compiled on each save"
:type 'boolean
:group 'less)
(defcustom less-mode-hook nil
"Hook run when entering Less mode"
:type 'hook
:group 'less)
(defun less-compile ()
"Compiles the current buffer"
(interactive)
(compile (concat less-lessc-command " " buffer-file-name)))
(defun less-compile-maybe ()
"Runs `less-compile' on if `less-compile-at-save' is not nil"
(if less-compile-at-save
(less-compile)))
(defun flymake-less-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "lessc" (list "--no-color" local-file))))
(when (featurep 'flymake)
(add-to-list 'flymake-allowed-file-name-masks
'("\\.less$" flymake-less-init))
(add-to-list 'flymake-err-line-patterns
'("! \\(.*\\): on line \\([0-9]+\\): \\(.*\\)"
nil 2 nil 3))
(add-to-list 'flymake-err-line-patterns
'("! \\(.*\\): \\(.*\\)"
nil nil nil 2)))
(define-derived-mode less-mode css-mode "Less"
"Major mode for editing Less files, http://lesscss.org"
(run-hooks 'css-mode-hook)
(when (featurep 'flymake) (flymake-mode t))
(font-lock-add-keywords nil less-font-lock-keywords)
;; Add the single-line comment syntax ('//', ends with newline)
;; as comment style 'b' (see "Syntax Flags" in elisp manual)
(modify-syntax-entry ?/ ". 124" css-mode-syntax-table)
(modify-syntax-entry ?* ". 23b" css-mode-syntax-table)
(modify-syntax-entry ?\n ">" css-mode-syntax-table)
(add-hook 'after-save-hook 'less-compile-maybe nil t))
(provide 'less-mode)
;;; less-mode.el ends here