;;; ravi-init-web.el --- Web development -*- lexical-binding: t; -*- ;; Copyright (C) 2014 ;; Author: ;; Keywords: ;; 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 . ;;; Commentary: ;; Web development tools ;;; Code: (use-package emmet-mode :commands (emmet-mode) :init (progn (add-hook 'css-mode-hook 'emmet-mode) (add-hook 'sgml-mode-hook 'emmet-mode)) :config (progn (unbind-key "C-j" emmet-mode-keymap) (bind-key "M-r" 'emmet-expand-line emmet-mode-keymap)) :diminish emmet-mode) ;; Javascript (use-package js2-mode :mode (("\\.js$" . js2-mode) ("\\.json$" . js2-mode) ("Jakefile$" . js2-mode)) ;; :interpreter ("node" . js2-mode) :config (progn (use-package js2-refactor :config (progn (js2r-add-keybindings-with-prefix "C-c C-m"))) (defun ravi/js2-mode-hook () (emmet-mode) (setq js2-basic-offset 2) (when (functionp 'helm-dash) (setq-local dash-docs-docsets '("JavaScript" "jQuery" "jQuery UI"))) (when (functionp 'ravi/dash) (setq-local ravi/dash-docsets '("JavaScript" "jQuery" "jQuery UI")))) (add-hook 'js2-mode-hook 'ravi/js2-mode-hook))) ;; Interact with the browser (use-package skewer-mode :config (progn (skewer-setup))) ;; HTML with web-mode (use-package web-mode :mode (("\\.html" . web-mode)) :config (progn ;; Make it work with smartparens (defun ravi/web-mode-sp-hook () (setq web-mode-enable-auto-pairing nil) (smartparens-mode) (sp-use-smartparens-bindings)) (add-hook 'web-mode-hook 'ravi/web-mode-sp-hook) (add-hook 'web-mode-hook 'emmet-mode) (defun sp-web-mode-is-code-context (id action context) (when (and (eq action 'insert) (not (or (get-text-property (point) 'part-side) (get-text-property (point) 'block-side)))) t)) (sp-local-pair 'web-mode "<" nil :when '(sp-web-mode-is-code-context)) (defun ravi/web-mode-extra-hook () (when (functionp 'helm-dash) (setq-local dash-docs-docsets '("HTML"))) (when (functionp 'ravi/dash) (setq-local ravi/dash-docsets '("HTML")))) (add-hook 'web-mode-hook 'ravi/web-mode-extra-hook) ;; Customization (setq web-mode-enable-current-element-highlight t) (setq web-mode-markup-indent-offset 2) (setq web-mode-css-indent-offset 2) (setq web-mode-code-indent-offset 2) (setq web-mode-enable-part-face t))) (defun ravi/css-mode-extra-hook () (when (functionp 'helm-dash) (setq-local dash-docs-docsets '("CSS"))) (when (functionp 'ravi/dash) (setq-local ravi/dash-docsets '("CSS")))) (add-hook 'css-mode-hook 'ravi/css-mode-extra-hook) (provide 'ravi-init-web) ;;; ravi-init-web.el ends here