Skip to content

Instantly share code, notes, and snippets.

@sooqua
Created September 9, 2019 19:14
Show Gist options
  • Save sooqua/9cf399248eecbd3317141b4ea79966cb to your computer and use it in GitHub Desktop.
Save sooqua/9cf399248eecbd3317141b4ea79966cb to your computer and use it in GitHub Desktop.
;;; javascript-rjsx-web-hybrid.el -*- lexical-binding: t; -*-
(defun ~+javascript-rjsx-web-hybrid--init-web-mode ()
(require 'web-mode)
(setq font-lock-extend-region-functions '(web-mode-extend-region))
(add-hook 'after-change-functions 'web-mode-on-after-change nil t)
(add-hook 'post-command-hook 'web-mode-on-post-command nil t))
(setq ~+javascript-rjsx-web-hybrid--do-web-mode-indent nil)
(defun ~+javascript-rjsx-web-hybrid-newline-and-indent-a ()
(when (derived-mode-p 'rjsx-mode)
(setq ~+javascript-rjsx-web-hybrid--do-web-mode-indent t)))
(defun ~+javascript-rjsx-web-hybrid-indent-line-a ()
(when (and (derived-mode-p 'rjsx-mode)
~+javascript-rjsx-web-hybrid--do-web-mode-indent)
(web-mode-indent-line)
(setq ~+javascript-rjsx-web-hybrid--do-web-mode-indent nil)))
;;;###autoload
(defun ~+javascript-rjsx-web-hybrid-init ()
(add-hook 'rjsx-mode-hook #'~+javascript-rjsx-web-hybrid--init-web-mode)
(advice-add 'newline-and-indent :before #'~+javascript-rjsx-web-hybrid-newline-and-indent-a)
(advice-add 'rjsx-indent-line :before #'~+javascript-rjsx-web-hybrid-indent-line-a)
(map!
(:map rjsx-mode-map
:nv "]t" #'web-mode-tag-next
:nv "[t" #'web-mode-tag-previous
:nv "]T" #'web-mode-element-child
:nv "[T" #'web-mode-element-parent
(:localleader
:nv "]a" #'web-mode-attribute-next
:nv "[a" #'web-mode-attribute-previous
(:prefix ("w" . "web")
(:prefix ("a" . "attribute")
"b" #'web-mode-attribute-beginning
"e" #'web-mode-attribute-end
"i" #'web-mode-attribute-insert
"n" #'web-mode-attribute-next
"s" #'web-mode-attribute-select
"k" #'web-mode-attribute-kill
"p" #'web-mode-attribute-previous
"p" #'web-mode-attribute-transpose)
(:prefix ("b" . "block")
"b" #'web-mode-block-beginning
"c" #'web-mode-block-close
"e" #'web-mode-block-end
"k" #'web-mode-block-kill
"n" #'web-mode-block-next
"p" #'web-mode-block-previous
"s" #'web-mode-block-select)
(:prefix ("d" . "dom")
"a" #'web-mode-dom-apostrophes-replace
"d" #'web-mode-dom-errors-show
"e" #'web-mode-dom-entities-encode
"n" #'web-mode-dom-normalize
"q" #'web-mode-dom-quotes-replace
"t" #'web-mode-dom-traverse
"x" #'web-mode-dom-xpath)
(:prefix ("e" . "element")
"/" #'web-mode-element-close
"a" #'web-mode-element-content-select
"b" #'web-mode-element-beginning
"c" #'web-mode-element-clone
"d" #'web-mode-element-child
"e" #'web-mode-element-end
"f" #'web-mode-element-children-fold-or-unfold
"i" #'web-mode-element-insert
"k" #'web-mode-element-kill
"m" #'web-mode-element-mute-blanks
"n" #'web-mode-element-next
"p" #'web-mode-element-previous
"r" #'web-mode-element-rename
"s" #'web-mode-element-select
"t" #'web-mode-element-transpose
"u" #'web-mode-element-parent
"v" #'web-mode-element-vanish
"w" #'web-mode-element-wrap)
(:prefix ("t" . "tag")
"a" #'web-mode-tag-attributes-sort
"b" #'web-mode-tag-beginning
"e" #'web-mode-tag-end
"m" #'web-mode-tag-match
"n" #'web-mode-tag-next
"p" #'web-mode-tag-previous
"s" #'web-mode-tag-select)
:n "za" #'web-mode-fold-or-unfold)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment