You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.1 KiB
131 lines
4.1 KiB
;;; ac-emmet.el --- auto-complete sources for emmet-mode's snippets |
|
|
|
;; Copyright (C) 2013 Yasuyuki Oka <yasuyk@gmail.com> |
|
|
|
;; Author: Yasuyuki Oka <yasuyk@gmail.com> |
|
;; Version: DEV |
|
;; Package-Version: 20131015.1558 |
|
;; Package-Commit: 88f24876ee3b759978d4614a758280b5d512d543 |
|
;; URL: https://github.com/yasuyk/ac-emmet |
|
;; Package-Requires: ((emmet-mode "1.0.2") (auto-complete "1.4")) |
|
;; Keywords: completion, convenience, emmet |
|
|
|
;; 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/>. |
|
|
|
;;; Commentary: |
|
|
|
;; Provides auto-complete sources for emmet-mode. |
|
|
|
;;; Usage: |
|
|
|
;; (require 'ac-emmet) ;; Not necessary if using ELPA package |
|
;; (add-hook 'sgml-mode-hook 'ac-emmet-html-setup) |
|
;; (add-hook 'css-mode-hook 'ac-emmet-css-setup) |
|
|
|
;;; Code: |
|
|
|
(require 'auto-complete) |
|
(require 'emmet-mode) |
|
|
|
;;;###autoload |
|
(defface ac-emmet-candidate-face |
|
'((t (:inherit ac-candidate-face))) |
|
"Face for emmet candidates." |
|
:group 'auto-complete) |
|
|
|
;;;###autoload |
|
(defface ac-emmet-selection-face |
|
'((t (:inherit ac-selection-face))) |
|
"Face for the emmet selected candidate." |
|
:group 'auto-complete) |
|
|
|
(defvar ac-emmet-html-snippets-hash |
|
(gethash "snippets" (gethash "html" emmet-snippets))) |
|
|
|
(defvar ac-emmet-html-snippets-keys |
|
(loop for k being hash-key in ac-emmet-html-snippets-hash collect k)) |
|
|
|
(defvar ac-emmet-html-aliases-hash |
|
(gethash "aliases" (gethash "html" emmet-snippets))) |
|
|
|
(defvar ac-emmet-html-aliases-keys |
|
(loop for k being hash-key in ac-emmet-html-aliases-hash collect k)) |
|
|
|
(defvar ac-emmet-css-snippets-hash |
|
(gethash "snippets" (gethash "css" emmet-snippets))) |
|
|
|
(defvar ac-emmet-css-snippets-keys |
|
(loop for k being hash-key in ac-emmet-css-snippets-hash collect k)) |
|
|
|
(defun ac-emmet-document (candidate hash) |
|
(let ((snippet (gethash candidate hash))) |
|
(if (functionp snippet) |
|
(funcall snippet "") |
|
snippet))) |
|
|
|
;;;###autoload |
|
(defconst ac-emmet-source-defaults |
|
'((candidate-face . ac-emmet-candidate-face) |
|
(selection-face . ac-emmet-selection-face) |
|
(symbol . "a") |
|
(requires . 1) |
|
(action . (lambda () (call-interactively 'emmet-expand-line)))) |
|
"Defaults common to the various completion sources.") |
|
|
|
;;;###autoload |
|
(defvar ac-source-emmet-html-snippets |
|
(append |
|
'((candidates . ac-emmet-html-snippets-keys) |
|
(document . (lambda (s) (ac-emmet-document s ac-emmet-html-snippets-hash)))) |
|
ac-emmet-source-defaults) |
|
"Auto-complete source for emmet-mode's html snippet completion.") |
|
|
|
;;;###autoload |
|
(defvar ac-source-emmet-html-aliases |
|
(append |
|
'((candidates . ac-emmet-html-aliases-keys) |
|
(document . (lambda (s) (ac-emmet-document s ac-emmet-html-aliases-hash)))) |
|
ac-emmet-source-defaults) |
|
"Auto-complete source for emmet-mode's html alias completion.") |
|
|
|
;;;###autoload |
|
(defvar ac-source-emmet-css-snippets |
|
(append |
|
'((candidates . ac-emmet-css-snippets-keys) |
|
(document . (lambda (s) (ac-emmet-document s ac-emmet-css-snippets-hash)))) |
|
ac-emmet-source-defaults) |
|
"Auto-complete source for emmet-mode's css snippet completion.") |
|
|
|
;;;###autoload |
|
(defun ac-emmet-html-setup () |
|
"Add the emmet-mode's html completion source to the front of `ac-sources'. |
|
This affects only the current buffer." |
|
(interactive) |
|
(add-to-list 'ac-sources 'ac-source-emmet-html-snippets) |
|
(add-to-list 'ac-sources 'ac-source-emmet-html-aliases)) |
|
|
|
;;;###autoload |
|
(defun ac-emmet-css-setup () |
|
"Add the emmet-mode's css completion source to the front of `ac-sources'. |
|
This affects only the current buffer." |
|
(interactive) |
|
(add-to-list 'ac-sources 'ac-source-emmet-css-snippets)) |
|
|
|
(provide 'ac-emmet) |
|
|
|
;; Local Variables: |
|
;; coding: utf-8 |
|
;; End: |
|
|
|
;;; ac-emmet.el ends here
|
|
|