Major optimization refactor, across the board

+ enable lexical-scope everywhere (lexical-binding = t): ~5-10% faster
  startup; ~5-20% general boost
+ reduce consing, function calls & garbage collection by preferring
  cl-loop & dolist over lambda closures (for mapc[ar], add-hook, and
  various cl-lib filter/map/reduce functions) -- where possible
+ prefer functions with dedicated opcodes, like assq (see byte-defop's
  in bytecomp.el for more)
+ prefer pcase & cond (faster) over cl-case
+ general refactor for code readability
+ ensure naming & style conventions are adhered to
+ appease byte-compiler by marking unused variables with underscore
+ defer minor mode activation to after-init, emacs-startup or
  window-setup hooks; a customization opportunity for users + ensures
  custom functionality won't interfere with startup.
This commit is contained in:
Henrik Lissner 2017-06-08 11:47:56 +02:00
parent 64a142b3fc
commit c7254e7bdc
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
154 changed files with 1101 additions and 1118 deletions

View file

@ -1,4 +1,4 @@
;;; lang/assembly/config.el
;;; lang/assembly/config.el -*- lexical-binding: t; -*-
(def-package! mips-mode :mode "\\.mips$")

View file

@ -1,4 +1,4 @@
;;; lang/cc/autoload.el
;;; lang/cc/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +cc/autoclose->-maybe ()

View file

@ -1,4 +1,4 @@
;;; lang/cc/config.el --- C, C++, and Objective-C
;;; lang/cc/config.el --- c, c++, and obj-c -*- lexical-binding: t; -*-
(def-package! cc-mode
:commands (c-mode c++-mode objc-mode java-mode)
@ -67,7 +67,7 @@
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close '0)
(defun +cc--c-lineup-inclass (langelem)
(defun +cc--c-lineup-inclass (_langelem)
(if (memq major-mode '(c-mode c++-mode))
(let ((inclass (assq 'inclass c-syntactic-context)))
(save-excursion
@ -115,12 +115,15 @@
(def-package! irony
:after cc-mode
:commands irony-install-server
:init
(add-hook! 'c-mode-common-hook
(when (memq major-mode '(c-mode c++-mode objc-mode))
(irony-mode +1)))
:config
:preface
(setq irony-server-install-prefix (concat doom-etc-dir "irony-server/"))
:init
(defun +cc|init-irony-mode ()
(when (memq major-mode '(c-mode c++-mode objc-mode))
(when (file-directory-p irony-server-install-prefix)
(irony-mode +1))))
(add-hook 'c-mode-common-hook #'+cc|init-irony-mode)
:config
(add-hook! 'irony-mode-hook #'(irony-eldoc flycheck-mode))
(add-hook! 'c++-mode-hook
(make-local-variable 'irony-additional-clang-options)

View file

@ -1,4 +1,4 @@
;;; lang/clojure/config.el
;;; lang/clojure/config.el -*- lexical-binding: t; -*-
(def-package! clojure-mode
:mode "\\.clj$")
@ -6,5 +6,4 @@
(def-package! cider
:commands (cider-jack-in cider-mode)
:config
(setq
nrepl-hide-special-buffers t))
(setq nrepl-hide-special-buffers t))

View file

@ -1,4 +1,4 @@
;;; module-crystal.el
;;; lang/crystal/config.el -*- lexical-binding: t; -*-
(def-package! crystal-mode
:mode "\\.cr$"

View file

@ -1,4 +1,4 @@
;;; module-csharp.el
;;; lang/csharp/config.el -*- lexical-binding: t; -*-
(def-package! csharp-mode :mode "\\.cs$")

View file

@ -1,4 +1,4 @@
;;; module-data.el
;;; lang/data/config.el -*- lexical-binding: t; -*-
(push '("/sxhkdrc" . conf-mode) auto-mode-alist)

View file

@ -1,2 +1,2 @@
;;; lang/elixir/autoload/elixir.el
;;; lang/elixir/autoload/elixir.el -*- lexical-binding: t; -*-

View file

@ -1,10 +1,9 @@
;;; lang/elixir/config.el
;;; lang/elixir/config.el -*- lexical-binding: t; -*-
(def-package! elixir-mode
:mode ("\\.ex$")
:mode "\\.ex$"
:init
(add-hook 'elixir-mode-hook #'turn-off-smartparens-mode)
(add-hook 'elixir-mode-hook #'alchemist)
(add-hook! 'elixir-mode-hook #'(turn-off-smartparens-mode alchemist))
:config
(set! :company-backend 'elixir-mode '(alchemist-company company-yasnippet)))

View file

@ -1,4 +1,4 @@
;;; lang/elm/config.el
;;; lang/elm/config.el -*- lexical-binding: t; -*-
(def-package! elm-mode
:mode "\\.elm$"

View file

@ -1,4 +1,4 @@
;;; lang/emacs-lisp/autoload.el
;;; lang/emacs-lisp/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +emacs-lisp/repl ()
@ -20,18 +20,16 @@ to a pop up buffer."
(buf (get-buffer-create "*doom eval*"))
(inhibit-read-only t)
lines)
(unwind-protect
(progn
(with-current-buffer buf
(read-only-mode +1)
(erase-buffer)
(setq-local scroll-margin 0)
(emacs-lisp-mode)
(prin1 result buf)
(pp-buffer)
(setq lines (count-lines (point-min) (point-max)))
(goto-char (point-min))
(if (> lines 1)
(doom-popup-buffer buf)
(message "%s" (buffer-substring (point-min) (point-max)))
(kill-buffer buf)))))))
(with-current-buffer buf
(read-only-mode +1)
(erase-buffer)
(setq-local scroll-margin 0)
(emacs-lisp-mode)
(prin1 result buf)
(pp-buffer)
(setq lines (count-lines (point-min) (point-max)))
(goto-char (point-min))
(if (> lines 1)
(doom-popup-buffer buf)
(message "%s" (buffer-substring (point-min) (point-max)))
(kill-buffer buf)))))

View file

@ -1,10 +1,9 @@
;;; lang/emacs-lisp/config.el
;;; lang/emacs-lisp/config.el -*- lexical-binding: t; -*-
(def-package! elisp-mode ; built-in
:mode ("/Cask$" . emacs-lisp-mode)
:init
(add-hook 'emacs-lisp-mode-hook #'+emacs-lisp|hook)
:config
(set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl)
(set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval)

View file

@ -1,4 +1,4 @@
;;; lang/go/autoload.el
;;; lang/go/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
;; TODO (defun +go/build ())

View file

@ -1,4 +1,4 @@
;;; lang/go/config.el
;;; lang/go/config.el -*- lexical-binding: t; -*-
(def-package! go-mode
:mode "\\.go$"

View file

@ -1,4 +1,4 @@
;;; module-haskell.el
;;; lang/haskell/config.el -*- lexical-binding: t; -*-
(def-package! haskell-mode
:mode "\\.hs$"
@ -10,7 +10,6 @@
(load "haskell-mode-autoloads" nil t)
(set! :repl 'haskell-mode #'switch-to-haskell)
(push ".hi" completion-ignored-extensions)
(autoload 'switch-to-haskell "inf-haskell" nil t)

View file

@ -1,4 +1,4 @@
;;; lang/java/config.el
;;; lang/java/config.el -*- lexical-binding: t; -*-
;; yasnippet defuns
;;;###autoload
@ -9,7 +9,7 @@
;;;###autoload
(defun +java-android-mode-in-tags (&rest tags)
(-contains? tags (android-mode-tag-name)))
(cl-find (android-mode-tag-name) tags))
;;;###autoload
(defun +java-android-mode-tag-name ()

View file

@ -1,4 +1,4 @@
;;; lang/java/config.el
;;; lang/java/config.el -*- lexical-binding: t; -*-
(def-package! meghanada
:commands meghanada-mode

View file

@ -1,4 +1,4 @@
;;; lang/javascript/+screeps.el
;;; lang/javascript/+screeps.el -*- lexical-binding: t; -*-
;; TODO Constants may be out-of-date
@ -171,8 +171,9 @@
:match "/screeps/.+$"
:modes (+javascript-npm-mode))
(add-hook! '+javascript-screeps-mode-hook
(defun +javascript|init-screeps-mode ()
(when (eq major-mode 'js2-mode)
(push 'javascript-jshint flycheck-disabled-checkers)
(cl-pushnew 'javascript-jshint flycheck-disabled-checkers)
(setq js2-additional-externs (append '("_") screeps-objects screeps-constants))))
(add-hook '+javascript-screeps-mode-hook #'+javascript|init-screeps-mode)

View file

@ -1,4 +1,4 @@
;;; lang/javascript/autoload.el
;;; lang/javascript/autoload.el -*- lexical-binding: t; -*-
(defvar +javascript-npm-conf (make-hash-table :test 'equal))
@ -17,13 +17,13 @@ ignore the cache."
;;;###autoload
(defun +javascript-npm-dep-p (packages &optional project-root refresh-p)
(when-let (data (and (bound-and-true-p +javascript-npm-mode)
(+javascript-npm-conf)))
(+javascript-npm-conf project-root refresh-p)))
(let ((deps (append (cdr (assq 'dependencies data))
(cdr (assq 'devDependencies data)))))
(cond ((listp packages)
(funcall (if (eq (car packages) 'and)
'cl-every
'cl-some)
#'cl-every
#'cl-some)
(lambda (pkg) (assq pkg deps))
(if (listp packages) packages (list packages))))
((symbolp packages)

View file

@ -1,4 +1,4 @@
;; lang/javascript/config.el
;;; lang/javascript/config.el -*- lexical-binding: t; -*-
(load! +screeps)
@ -17,12 +17,13 @@
(add-hook! 'js2-mode-hook (setq js-switch-indent-offset js-indent-level))
;; Favor local eslint over global, if available
(add-hook! 'flycheck-mode-hook
(defun +javascript|init-flycheck-elint ()
(when (derived-mode-p 'js-mode 'js2-mode)
(when-let ((eslint (expand-file-name "node_modules/eslint/bin/eslint.js" (doom-project-root)))
(exists-p (file-exists-p eslint))
(executable-p (file-executable-p eslint)))
(setq-local flycheck-javascript-eslint-executable eslint))))
(add-hook 'flycheck-mode-hook #'+javascript|init-flycheck-elint)
(set! :repl 'js2-mode '+javascript/repl)
(set! :electric 'js2-mode :chars '(?\} ?\) ?.))

View file

@ -1,4 +1,4 @@
;;; lang/julia/autoload.el
;;; lang/julia/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +julia/repl ()

View file

@ -1,4 +1,4 @@
;;; lang/julia/config.el
;;; lang/julia/config.el -*- lexical-binding: t; -*-
(use-package julia-mode
:mode "\\.jl$"

View file

@ -1,4 +1,4 @@
;;; lang/latex/config.el
;;; lang/latex/config.el -*- lexical-binding: t; -*-
(defvar +latex-bibtex-dir "~/work/writing/biblio/"
"Where bibtex files are kept.")

View file

@ -1,9 +1,9 @@
;;; lang/lua/autoload.el
;;; lang/lua/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +lua/repl ()
"Open Lua REPL."
(interactive)
(lua-start-process "lua" "lua")
(pop-to-buffer lua-process-buffer))

View file

@ -1,4 +1,4 @@
;;; lang/lua/config.el --- lua + Love2D
;;; lang/lua/config.el --- lua + Love2D -*- lexical-binding: t; -*-
(def-package! lua-mode
:mode "\\.lua$"

View file

@ -1,7 +1,7 @@
;;; lang/markdown/autoload.el
;;; lang/markdown/autoload.el -*- lexical-binding: t; -*-
;; Implement strike-through formatting
(defvar +text--markdown-regex-del
(defvar +markdown--regex-del
"\\(^\\|[^\\]\\)\\(\\(~\\{2\\}\\)\\([^ \n \\]\\|[^ \n ]\\(?:.\\|\n[^\n]\\)*?[^\\ ]\\)\\(\\3\\)\\)")
;;;###autoload
@ -11,12 +11,13 @@
(let ((delim "~~"))
(if (markdown-use-region-p)
;; Active region
(let ((bounds (markdown-unwrap-things-in-region
(region-beginning) (region-end)
+text--markdown-regex-del 2 4)))
(markdown-wrap-or-insert delim delim nil (car bounds) (cdr bounds)))
(destructuring-bind (beg end)
(markdown-unwrap-things-in-region
(region-beginning) (region-end)
+markdown--regex-del 2 4)
(markdown-wrap-or-insert delim delim nil beg end))
;; Bold markup removal, bold word at point, or empty markup insertion
(if (thing-at-point-looking-at +text--markdown-regex-del)
(if (thing-at-point-looking-at +markdown--regex-del)
(markdown-unwrap-thing-at-point nil 2 4)
(markdown-wrap-or-insert delim delim 'word nil nil)))))

View file

@ -1,4 +1,4 @@
;;; lang/markdown/config.el
;;; lang/markdown/config.el -*- lexical-binding: t; -*-
(def-package! markdown-mode
:mode ("\\.m\\(d\\|arkdown\\)$" "/README$"

View file

@ -1,4 +1,4 @@
;;; lang/php/autoload.el
;;; lang/php/autoload.el -*- lexical-binding: t; -*-
(defvar +php-composer-conf (make-hash-table :test 'equal))

View file

@ -1,4 +1,4 @@
;;; lang/php/config.el
;;; lang/php/config.el -*- lexical-binding: t; -*-
;; (def-package! hack-mode
;; :mode "\\.hh$"
@ -52,7 +52,8 @@
;; company will set up itself
(advice-add #'php-extras-company-setup :override #'ignore)
:config
(setq php-extras-eldoc-functions-file (concat doom-etc-dir "php-extras-eldoc-functions"))
(setq php-extras-eldoc-functions-file
(concat doom-etc-dir "php-extras-eldoc-functions"))
;; Make expensive php-extras generation async
(unless (file-exists-p (concat php-extras-eldoc-functions-file ".el"))

View file

@ -1,25 +1,20 @@
;;; lang/purescript/config.el
;;; lang/purescript/config.el -*- lexical-binding: t; -*-
(def-package! purescript-mode
:mode "\\.purs$"
:config
(add-hook! 'purescript-mode-hook #'flycheck-mode)
(add-hook! 'purescript-mode-hook #'company-mode)
(add-hook! 'purescript-mode-hook #'purescript-indentation-mode)
(add-hook! 'purescript-mode-hook #'rainbow-delimiters-mode)
(load "purescript-mode-autoloads" nil t)
)
(add-hook! 'purescript-mode-hook
#'(flycheck-mode purescript-indentation-mode rainbow-delimiters-mode))
(load "purescript-mode-autoloads" nil t))
;; (def-package! flycheck-purescript
;; :after purescript-mode
;; :config
;; (add-hook! 'flycheck-mode-hook #'flycheck-purescript-setup)
;; )
;; (add-hook 'flycheck-mode-hook #'flycheck-purescript-setup))
(def-package! psc-ide
:after purescript-mode
:config
(require 'psc-ide)
(add-hook! 'purescript-mode-hook #'psc-ide-mode)
)
(add-hook 'purescript-mode-hook #'psc-ide-mode))

View file

@ -2,10 +2,10 @@
;;; lang/purescript/packages.el
;; As far as I can tell, at the moment, flycheck-purescript does not work well
;; due to expecting the compiler to be psc rather than purs.
;; However, one of purescript-mode or psc-ide seems to handle flycheck, so it
;; might be unnecessary altogether.
;; (package! flycheck-purescript)
;; due to expecting the compiler to be psc rather than purs. However, one of
;; purescript-mode or psc-ide seems to handle flycheck, so it might be
;; unnecessary altogether.
;;(package! flycheck-purescript)
(package! psc-ide)
(package! purescript-mode)

View file

@ -1,4 +1,4 @@
;;; lang/python/autoload.el
;;; lang/python/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +python/repl ()

View file

@ -1,4 +1,4 @@
;;; lang/python/config.el
;;; lang/python/config.el -*- lexical-binding: t; -*-
(def-package! python
:commands python-mode

View file

@ -1,4 +1,4 @@
;;; lang/rest/config.el
;;; lang/rest/config.el -*- lexical-binding: t; -*-
(def-package! restclient
:commands restclient-mode

View file

@ -1,4 +1,4 @@
;;; lang/ruby/config.el
;;; lang/ruby/config.el -*- lexical-binding: t; -*-
(def-package! ruby-mode
:mode ("\\.rb$" "\\.rake$" "\\.gemspec$" "\\.?pryrc$"

View file

@ -1,4 +1,4 @@
;;; lang/rust/autoload.el
;;; lang/rust/autoload.el -*- lexical-binding: t; -*-
;; TODO (defun +rust/run-cargo () (interactive))

View file

@ -1,4 +1,4 @@
;;; module-rust.el
;;; lang/rust/config.el -*- lexical-binding: t; -*-
(defvar +rust-ext-dir (concat doom-etc-dir "rust/")
"TODO")
@ -16,11 +16,14 @@
:after rust-mode
:preface
:init
(add-hook! rust-mode '(racer-mode eldoc-mode flycheck-rust-setup))
(add-hook! 'rust-mode-hook #'(racer-mode eldoc-mode flycheck-rust-setup))
:config
(setq racer-cmd (expand-file-name "racer/target/release/racer" +rust-ext-dir)
racer-rust-src-path (expand-file-name "rust/src/" +rust-ext-dir))
(unless (file-exists-p racer-cmd)
(warn "rust-mode: racer binary can't be found; auto-completion is disabled"))
;; TODO Unit test keybinds
(map! :map rust-mode-map :m "gd" #'racer-find-definition))

View file

@ -1,4 +1,4 @@
;;; lang/scala/config.el
;;; lang/scala/config.el -*- lexical-binding: t; -*-
(def-package! scala-mode
:mode "\\.s\\(cala\\|bt\\)$"

View file

@ -1,5 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; lang/sh/config.el
;;; lang/sh/autoload.el -*- lexical-binding: t; -*-
(defvar sh-extra-font-lock--keywords
`((+sh--match-var-in-double-quoted-string
@ -13,8 +12,7 @@
;;;###autoload
(defun +sh--in-double-quoted-string-p ()
"Non-nil if point in inside a double-quoted string."
(let ((state (syntax-ppss)))
(eq (nth 3 state) ?\")))
(eq (nth 3 (syntax-ppss)) ?\"))
;;;###autoload
(defun +sh--match-var-in-double-quoted-string (limit)
@ -39,6 +37,7 @@
(with-no-warnings
(font-lock-fontify-buffer)))))
(defvar sh-shell-file)
;;;###autoload
(defun +sh/repl ()
"Open a shell REPL."

View file

@ -1,4 +1,4 @@
;;; lang/sh/config.el
;;; lang/sh/config.el -*- lexical-binding: t; -*-
(def-package! sh-script ; built-in
:mode ("\\.zsh$" . sh-mode)

View file

@ -1,4 +1,4 @@
;;; lang/swift/config.el
;;; lang/swift/config.el -*- lexical-binding: t; -*-
;; TODO Set up emacs task runners for fruitstrap
@ -8,7 +8,7 @@
(add-hook 'swift-mode-hook #'flycheck-mode)
:config
(set! :repl 'swift-mode #'swift-mode-run-repl) ; TODO test this
(push 'swift flycheck-checkers))
(cl-pushnew 'swift flycheck-checkers))
(def-package! company-sourcekit

View file

@ -1,4 +1,4 @@
;;; lang/typescript/config.el
;;; lang/typescript/config.el -*- lexical-binding: t; -*-
(def-package! typescript-mode
:mode "\\.ts$"

View file

@ -1,4 +1,4 @@
;;; lang/web/+css.el
;;; lang/web/+css.el -*- lexical-binding: t; -*-
;; css-mode hooks apply to scss and less-css modes
(add-hook 'css-mode-hook #'rainbow-delimiters-mode)
@ -53,5 +53,5 @@
(def-package! stylus-mode
:mode "\\.styl$"
:init (add-hook! stylus-mode '(yas-minor-mode-on flycheck-mode)))
:init (add-hook! stylus-mode #'(yas-minor-mode-on flycheck-mode)))

View file

@ -1,14 +1,14 @@
;;; lang/web/config.el
;;; lang/web/+html.el -*- lexical-binding: t; -*-
(def-package! web-mode
:mode ("\\.p?html?$"
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
"\\.erb$"
"\\.jsp$"
"\\.as[cp]x$"
"\\.mustache$"
"\\.tsx$"
"wp-content/themes/.+/.+\\.php$")
:mode "\\.p?html?$"
:mode "\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
:mode "\\.erb$"
:mode "\\.jsp$"
:mode "\\.as[cp]x$"
:mode "\\.mustache$"
:mode "\\.tsx$"
:mode "wp-content/themes/.+/.+\\.php$"
:init
(add-hook 'web-mode-hook #'turn-off-smartparens-mode)
:config
@ -38,7 +38,8 @@
(def-package! pug-mode
:mode ("\\.jade$" "\\.pug$")
:mode "\\.jade$"
:mode "\\.pug$"
:config
(set! :company-backend 'pug-mode '(company-yasnippet))
(map! :map pug-mode-map

View file

@ -1,4 +1,4 @@
;;; lang/web/+css.el
;;; lang/web/autoload/css.el -*- lexical-binding: t; -*-
;;;###autoload
;; TODO (defun +css/scss-build ())
@ -12,10 +12,9 @@
(interactive)
;; TODO Remove evil dependency
(save-excursion
(let* ((bounds (or (ignore-errors (evil-a-curly))
(user-error "No block found")))
(beg (car bounds))
(end (cadr bounds)))
(destructuring-bind (beg end)
(or (ignore-errors (evil-a-curly))
(user-error "No block found"))
(if (= (line-number-at-pos beg) (line-number-at-pos end))
(save-excursion
(goto-char (1+ beg)) (insert "\n")

View file

@ -1,4 +1,4 @@
;;; lang/html/autoload/evil.el
;;; lang/html/autoload/evil.el -*- lexical-binding: t; -*-
;;;###autoload (autoload '+web:encode-html-entities "lang/web/autoload/evil" nil t)
(evil-define-operator +web:encode-html-entities (beg end &optional input)

View file

@ -1,4 +1,4 @@
;;; lang/web/autoload/html.el
;;; lang/web/autoload/html.el -*- lexical-binding: t; -*-
;;;###autoload
(defvar +web-entities-list
@ -16,14 +16,12 @@ character.")
"HTML encode/decode TEXT. Based on Xah's replace HTML named entities function
@ http://ergoemacs.org/emacs/elisp_replace_html_entities_command.html"
(interactive "<!><r>")
(mapc (lambda (rep)
(let ((from (elt rep (if decode-p 0 1)))
(to (elt rep (if decode-p 1 0)))
(case-fold-search t))
(when (string-match-p (regexp-quote from) text)
(setq text (s-replace from to text)))))
+web-entities-list)
text)
(dolist (rep +web-entities-list text)
(let ((from (elt rep (if decode-p 0 1)))
(to (elt rep (if decode-p 1 0)))
(case-fold-search t))
(when (string-match-p (regexp-quote from) text)
(setq text (s-replace from to text))))))
(defun +web--entities-region (beg end &optional decode-p)
"HTML encode/decode the selected region. Based on Xah's replace HTML named entities
@ -31,11 +29,10 @@ function @ http://ergoemacs.org/emacs/elisp_replace_html_entities_command.html"
(save-restriction
(narrow-to-region beg end)
(let (case-fold-search)
(mapc (lambda (rep)
(goto-char (point-min))
(while (search-forward (elt rep (if decode-p 0 1)) nil t)
(replace-match (elt rep (if decode-p 1 0)) 'FIXEDCASE 'LITERAL)))
reps))))
(dolist (rep reps)
(goto-char (point-min))
(while (search-forward (elt rep (if decode-p 0 1)) nil t)
(replace-match (elt rep (if decode-p 1 0)) 'FIXEDCASE 'LITERAL))))))
;;;###autoload
(defun +web-encode-entities (text)

View file

@ -1,2 +1,2 @@
;;; lang/web/autoload/web.el
;;; lang/web/autoload/web.el -*- lexical-binding: t; -*-

View file

@ -1,4 +1,4 @@
;;; lang/web/config.el
;;; lang/web/config.el -*- lexical-binding: t; -*-
(load! +html)
(load! +css)
@ -39,9 +39,10 @@
:modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
:files (and "config.yml" (or "_layouts/" "_posts/"))
:init
(add-hook! '+web-jekyll-mode-hook
(defun +web|init-jekyll-mode ()
(when (eq major-mode 'web-mode)
(web-mode-set-engine "django"))))
(web-mode-set-engine "django")))
(add-hook '+web-jekyll-mode-hook #'+web|init-jekyll-mode))
(def-project-mode! +web-wordpress-mode
:modes (php-mode web-mode css-mode haml-mode pug-mode)