;;; funcs.el --- HTML Layer functions File for Spacemacs ;; ;; Copyright (c) 2012-2020 Sylvain Benner & Contributors ;; ;; Author: Sylvain Benner ;; URL: https://github.com/syl20bnr/spacemacs ;; ;; This file is not part of GNU Emacs. ;; ;;; License: GPLv3 (defun spacemacs/emmet-expand () (interactive) (unless (if (bound-and-true-p yas-minor-mode) (call-interactively 'emmet-expand-yas) (call-interactively 'emmet-expand-line)) (indent-for-tab-command))) (defun spacemacs/impatient-mode () (interactive) (if (bound-and-true-p impatient-mode) (impatient-mode -1) (unless (process-status "httpd") (httpd-start)) (impatient-mode) (when (string-match-p "\\.html\\'" (buffer-name)) (imp-visit-buffer)))) (defun spacemacs/css-expand-statement () "Expand CSS block" (interactive) (save-excursion (end-of-line) (search-backward "{") (forward-char 1) (while (or (eobp) (not (looking-at "}"))) (let ((beg (point))) (newline) (search-forward ";") (indent-region beg (point)) )) (newline))) (defun spacemacs/css-contract-statement () "Contract CSS block" (interactive) (end-of-line) (search-backward "{") (while (not (looking-at "}")) (join-line -1)) (beginning-of-line)) (defun spacemacs//setup-lsp-for-web-mode-buffers () "Start lsp-mode and configure for buffer." (if (configuration-layer/layer-used-p 'lsp) (lsp) (message "`lsp' layer is not installed, please add `lsp' layer to your dotfile."))) (defun spacemacs//setup-lsp-for-html-buffer () "If buffer extension is html then turn on lsp." (let ((buffer-extension (save-match-data ;; regex to capture extension part from file.html or file.html (when (string-match "\\.\\([^.<]*\\)<*[^.]*$" (buffer-name)) (match-string 1 (buffer-name)))))) (when (string= buffer-extension "html") (spacemacs//setup-lsp-for-web-mode-buffers)))) (defun spacemacs//web-setup-transient-state () (defvar spacemacs--web-ts-full-hint-toggle nil "Toggle the state of the web transient state documentation.") (defvar spacemacs--web-ts-full-hint nil "Display full web transient state documentation.") (defvar spacemacs--web-ts-minified-hint nil "Display minified web transient state documentation.") (defun spacemacs//web-ts-toggle-hint () "Toggle the full hint docstring for the web transient state." (interactive) (setq spacemacs--web-ts-full-hint-toggle (not spacemacs--web-ts-full-hint-toggle))) (defun spacemacs//web-ts-hint () "Return a condensed/full hint for the web transient state" (concat " " (if spacemacs--web-ts-full-hint-toggle spacemacs--web-ts-full-hint (concat "[" (propertize "?" 'face 'hydra-face-red) "] help" spacemacs--web-ts-minified-hint)))) (spacemacs|transient-state-format-hint web spacemacs--web-ts-minified-hint "\n Navigate: _j_ _k_ _J_ _K_ _h_ _l_ Element: _c_ _d_ _D_ _r_ _w_ Other: _p_") (spacemacs|transient-state-format-hint web spacemacs--web-ts-full-hint (format "\n[_?_] toggle help Navigate^^^^ Element^^ Other [_j_/_k_] next/prev element [_c_] clone [_p_] xpath (display path) [_J_/_K_] next/prev sibling [_d_] vanish (keep content) [_q_] quit [_h_/_l_] parent/child [_D_] kill (inkl. content) ^^^^ [_r_] rename ^^^^ [_w_] wrap")) (spacemacs|define-transient-state web :title "Web Transient State" :hint-is-doc t :dynamic-hint (spacemacs//web-ts-hint) :foreign-keys run :evil-leader-for-mode (web-mode . ".") :bindings ("?" spacemacs//web-ts-toggle-hint) ;; Navigate ("j" web-mode-element-next) ("k" web-mode-element-previous) ("J" web-mode-element-sibling-next) ("gj" web-mode-element-sibling-next) ("K" web-mode-element-sibling-previous) ("gk" web-mode-element-sibling-previous) ("h" web-mode-element-parent) ("l" web-mode-element-child) ;; Element ("c" web-mode-element-clone) ("d" web-mode-element-vanish) ("D" web-mode-element-kill) ("r" web-mode-element-rename) ("w" web-mode-element-wrap) ;; Other ("p" web-mode-dom-xpath) ("q" nil :exit t) ("" nil :exit t)))