1
0
Fork 0
emacs-config/oni-css/oni-css.el
Tom Willemse bb29ee8a12 Change version format
In order to support my tablet which seems to have a lower maximum integer
value (I guess it’s 32-bit? I’m surprised) and can’t handle the version numbers
I was using before. It would turn them into floating point numbers, which adds a
~.0~, this made it impossible to install any package.

Any installations I have will need to reinstall all their oni packages so that
the new version number is picked up, since the new version number will be lower
than the old one.
2019-09-04 21:09:38 -07:00

170 lines
5.5 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; oni-css.el --- CSS configuration -*- lexical-binding: t; -*-
;; Copyright (C) 2019 Tom Willemse
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords: local
;; Version: 2019.0904.210438
;; Package-Requires: (oni-company oni-fci hydra rainbow-mode yasnippet)
;; 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 <https://www.gnu.org/licenses/>.
;;; Commentary:
;; Configuration for `css-mode' and `scss-mode'.
;;; Code:
(require 'align)
(require 'css-mode)
(require 'hydra)
(require 'yasnippet)
(eval-when-compile
(require 'compile)
(require 'grep))
(defconst oni-css-root
(file-name-directory
(or load-file-name
(buffer-file-name)))
"The directory where oni-css was loaded from.")
(defconst oni-css-snippets-dir
(expand-file-name "snippets" oni-css-root)
"The directory where oni-css stores its snippets.")
(defun oni-css-property-important-p ()
"Return whether or not the current property is important."
(save-excursion
(beginning-of-line)
(re-search-forward "!important" (line-end-position) :noerror)))
(defun oni-css-add-important ()
"Add an important flag to the property on the current line."
(interactive)
(unless (oni-css-property-important-p)
(save-excursion
(end-of-line)
(when (re-search-backward ";" (line-beginning-position) :noerror)
(insert " !important")))))
;;;###autoload
(defun oni-css-snippets-initialize ()
"Initialize the snippets for oni-css."
(when (boundp 'yas-snippet-dirs)
(add-to-list 'yas-snippet-dirs oni-css-snippets-dir t))
(yas-load-directory oni-css-snippets-dir))
(defun oni-css-remove-important ()
"Remove the important flag from the property on the current line."
(interactive)
(when (oni-css-property-important-p)
(save-excursion
(end-of-line)
(when (re-search-backward " !important" (line-beginning-position) :noerror)
(replace-match "")))))
(defun oni-css-mode-init--toggle-important ()
"Toggle the important flag on the property on the current line."
(interactive)
(if (oni-css-property-important-p)
(oni-css-remove-important)
(oni-css-add-important)))
(defhydra css-mode-hydra (:color blue)
("!" oni-css-mode-init--toggle-important))
(setq css-indent-offset 2)
(add-hook 'css-mode-hook 'company-mode)
(add-hook 'css-mode-hook 'electric-indent-local-mode)
(add-hook 'css-mode-hook 'electric-pair-local-mode)
(add-hook 'css-mode-hook 'fci-mode)
(add-hook 'css-mode-hook 'rainbow-mode)
(with-eval-after-load 'compile
(let ((scss-error-regexp
(rx (and bol
(zero-or-more space) "on line "
(group (one-or-more digit)) " of "
(group (one-or-more (or word punct (syntax symbol))))
eol))))
(add-to-list 'compilation-error-regexp-alist
(list scss-error-regexp 2 1 nil 2 2))))
(define-key css-mode-map (kbd "C-c m") #'css-mode-hydra/body)
;; Align CSS files like so:
;; body { color: #ffffff; }
;; .some-class { background-color: #ffffff; }
;; #some-id { width: 200px; }
;; .some-more-class {
;; color: #ffffff;
;; background-color: #ffffff;
;; width: 200px;
;; }
;; Keep these in order. They are each added to the _front_ of the
;; list and are applied in order. Changing their order will change
;; the results.
(add-to-list 'align-rules-list
`(css-closing-brace
(regexp . ,(rx (group (0+ whitespace)) "}" eol))
(group . (1))
(modes . '(scss-mode css-mode))))
(add-to-list 'align-rules-list
`(css-colons
(regexp . ,(rx bol
(0+ whitespace)
(1+ (any (?a . ?z) ?- ?$))
":"
(group (0+ whitespace))
(0+ nonl)
";"
eol))
(group . (1))
(modes . '(scss-mode css-mode))
(repeat . t)))
(add-to-list 'align-rules-list
`(css-opening-brace
(regexp . ,(rx bol
(0+ whitespace)
(0+ (any ?# ?. ?, ?\s ?& ?: ?-
(?a . ?z) (?A . ?Z) (?0 . ?9)))
(any (?a . ?z) (?A . ?Z) (?0 . ?9))
(group (0+ whitespace))
"{"
(0+ nonl)))
(group . (1))
(modes . '(scss-mode css-mode))))
;;;###autoload
(with-eval-after-load 'grep
(add-to-list 'grep-files-aliases '("css" . "*.css *.less *.sass *.scss")))
;;;###autoload
(with-eval-after-load 'css-mode
(with-eval-after-load 'yasnippet
(oni-css-snippets-initialize)))
;;;###autoload(with-eval-after-load 'css-mode (require 'oni-css))
(provide 'oni-css)
;;; oni-css.el ends here