Massive refactor. Refactor all the things

This commit is contained in:
Henrik Lissner 2016-04-23 22:08:46 -04:00
parent 03514fc09d
commit f234be68a4
56 changed files with 792 additions and 831 deletions

View file

@ -9,6 +9,19 @@
'+
'++))))
;;;###autoload
(defun narf/c-lineup-arglist (orig-fun &rest args)
"Improve indentation of continued C++11 lambda function opened as argument."
(if (and (eq major-mode 'c++-mode)
(ignore-errors
(save-excursion
(goto-char (c-langelem-pos langelem))
;; Detect "[...](" or "[...]{". preceded by "," or "(",
;; and with unclosed brace.
(looking-at ".*[(,][ \t]*\\[[^]]*\\][ \t]*[({][^}]*$"))))
0 ; no additional indent
(apply orig-fun args)))
;;;###autoload
(defun narf|init-c/c++-settings ()
(when (memq major-mode '(c-mode c++-mode objc-mode))

View file

@ -1,12 +1,12 @@
;;; extra-ansible.el
(define-project-type! ansible-mode "ans"
(def-project-type! ansible-mode "ans"
:modes (yaml-mode)
:files ("roles/"))
(use-package company-ansible
:commands (company-ansible)
:init (define-company-backend! ansible-mode (ansible)))
:init (def-company-backend! ansible-mode (ansible)))
(provide 'extra-ansible)
;;; module-ansible.el ends here

View file

@ -3,15 +3,17 @@
;; This library offers:
;; + impatient-mode: for broadcasting my emacs session
;; + big-mode: for enlarged text while screencasting
;; + integration with reveal.js for presentations
;; + TODO integration with reveal.js for presentations
;; + TODO peer programming collab
(defvar powerline-height)
;; Big-mode settings
(defconst big-mode-font (font-spec :family "Hack" :size 16))
(defconst big-mode-line-spacing 0)
(defconst big-mode-modeline-height 26)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defconst big-mode-modeline-height 30)
;;
(use-package impatient-mode
:defer t
:commands httpd-start)

10
modules/extra-text.el Normal file
View file

@ -0,0 +1,10 @@
;;; extra-text.el
;; TODO
(evil-define-operator narf/html-encode (beg end)
"HTML encode the selected region."
(interactive "<r>")
(shell-command-on-region beg end "sort" nil t))
(provide 'extra-text)
;;; extra-text.el ends here

View file

@ -1,10 +1,8 @@
;;; extra-tmux.el
;; This library offers:
;; + TODO An integration/abstraction layer to make it seem like tmux and emacs are one
;; program.
;; + TODO A way to manage tmux sessions and layouts from emacs; possibly trigger them
;; depending on current project.
;; + A way of communicating with a tmux instance
;; + TODO A way to manage tmuxifier from emacs
;;;###autoload
(defun tmux (command &optional modes)

View file

@ -1,4 +1,4 @@
;; module-write.el
;; extra-write.el
;; This library offers the following:
;; + Write-mode: a mode that turns Emacs into an app for writing notes, papers, or
@ -14,14 +14,7 @@
(defconst write-mode--last-mode-line mode-line-format)
(defconst write-mode--last-line-spacing line-spacing)
;; (defvar write-mode-org-font-lock-keywords
;; `(("[-+*] \\[X\\] \\([^$\n\r]+\\)"
;; (1 'org-headline-done))
;; ("^ *\\([-+]\\|[0-9]+[).]\\)\\( \\)+[^$\n\r]"
;; (1 'org-list-bullet))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
(setq-default visual-fill-column-center-text nil
visual-fill-column-width 80)
@ -93,43 +86,6 @@ functionality with buffer-local ones, which can be buggy in a minor-mode."
(visual-fill-column--adjust-window))))
(apply fn window args))))
;;; LaTeX
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq bibtex-dialect 'biblatex)
(setq bibtex-align-at-equal-sign t)
(setq bibtex-text-indentation 20)
(add-hook! bibtex-mode
(local-set-key (kbd "C-c \\") 'bibtex-fill-entry)
(setq fill-column 140))
(add-hook! latex-mode 'turn-on-auto-fill)
(add-hook! LaTeX-mode 'turn-on-auto-fill)
(use-package reftex
:config
(add-hook 'latex-mode-hook 'turn-on-reftex)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t
reftex-ref-style-default-list '("Cleveref" "Hyperref" "Fancyref")
reftex-default-bibliography
`(,(expand-file-name "phys.bib" write-mode-biblio-dir))))
;;; Bibtex
;; NOTE: http://bibdesk.sourceforge.net/
(use-package helm-bibtex
:defer t
:config
(setq helm-bibtex-bibliography
`(,(expand-file-name "phys.bib" write-mode-biblio-dir))
helm-bibtex-library-path
`(,(expand-file-name "phys-pdf" write-mode-biblio-dir))
helm-bibtex-notes-path (expand-file-name "notes" write-mode-biblio-dir)
helm-bibtex-notes-extension ".org"
helm-bibtex-pdf-open-function
(lambda (fpath) (async-start-process "open-pdf" "/usr/bin/open" nil fpath))))
(provide 'module-write)
;;; module-write.el ends here
(provide 'extra-write)
;;; extra-write.el ends here

View file

@ -7,7 +7,7 @@
;; LaunchBar: https://www.obdev.at/products/launchbar
;;
(define-project-type! lb6 "lb6"
(def-project-type! lb6 "lb6"
:match "\\.lb\\(action\\|ext\\)/.+$"
:build (lambda ()
(awhen (f-traverse-upwards (lambda (f) (f-ext? f "lbaction")))
@ -21,12 +21,14 @@
;; TODO Set up emacs task runners for fruitstrap
(use-package swift-mode
:mode "\\.swift$"
:init (add-hook 'swift-mode-hook 'flycheck-mode)
:init
(def-company-backend! swift-mode (sourcekit yasnippet))
(add-hook 'swift-mode-hook 'flycheck-mode)
:config
(after! flycheck (push 'swift flycheck-checkers))
(push 'swift flycheck-checkers))
(require 'company-sourcekit)
(define-company-backend! swift-mode (sourcekit yasnippet)))
(use-package company-sourcekit
:after swift-mode)
(provide 'module-apple)
;;; module-apple.el ends here

View file

@ -1,61 +1,13 @@
;;; module-cc.el --- C, C++, and Objective-C
(use-package cmake-mode
:mode "CMakeLists\\.txt$"
:config
(require 'company-cmake)
(define-company-backend! cmake-mode (cmake yasnippet)))
(use-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'"))
(use-package cuda-mode :mode "\\.cuh?$")
(use-package cc-mode
:defines (c-syntactic-context)
:functions (c-toggle-electric-state c-toggle-auto-newline
c-skip-comments-and-strings c-forward-sws c-end-of-macro
c-font-lock-invalid-string csharp-log c-font-lock-declarators
c-get-lang-constant c-forward-keyword-clause
c-fontify-recorded-types-and-refs c-forward-type imenu--split
c-backward-sws c-determine-limit c-beginning-of-decl-1)
:commands (c-mode c++-mode objc-mode java-mode)
:init
(associate! objc-mode :match "\\.mm$")
(def-electric! (c-mode c++-mode objc-mode) :chars (?\n ?\}))
(def-company-backend! (c-mode c++-mode objc-mode) (irony-c-headers irony))
(add-hook! 'c++-mode-hook '(highlight-numbers-mode narf|init-c++-C11-highlights))
(add-hook 'c-initialization-hook 'narf|init-c/c++-settings)
(add-hook 'c++-mode-hook 'highlight-numbers-mode)
(add-hook 'c++-mode-hook 'narf|init-c++-C11-highlights)
:config
(setq c-tab-always-indent nil
c-electric-flag nil)
(map! :map c-mode-base-map
(:localleader :nv ";" 'narf/append-semicolon))
(define-text-object! "<" "<" ">")
(sp-local-pair '(c-mode c++-mode) "<" ">" :when '(narf/sp-point-is-template-p narf/sp-point-after-include-p))
(sp-with-modes '(c-mode c++-mode objc-mode java-mode)
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
;; Doxygen blocks
(sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC")))
(sp-local-pair "/*!" "*/" :post-handlers '(("||\n[i]" "RET") ("[d-1]< | " "SPC"))))
(add-hook! (c-mode c++-mode objc-mode)
(electric-indent-local-mode +1)
(setq electric-indent-chars '(?\n ?})))
;; C/C++
(advice-add 'c-lineup-arglist :around 'narf/c-lineup-arglist)
(defun narf/c-lineup-arglist (orig-fun &rest args)
"Improve indentation of continued C++11 lambda function opened as argument."
(if (and (eq major-mode 'c++-mode)
(ignore-errors
(save-excursion
(goto-char (c-langelem-pos langelem))
;; Detect "[...](" or "[...]{". preceded by "," or "(",
;; and with unclosed brace.
(looking-at ".*[(,][ \t]*\\[[^]]*\\][ \t]*[({][^}]*$"))))
0 ; no additional indent
(apply orig-fun args)))
;; C++ header files
(push `(,(lambda () (and (f-ext? buffer-file-name "h")
@ -71,29 +23,54 @@
. objc-mode)
magic-mode-alist)
(use-package irony
:config
(setq irony-server-install-prefix (concat narf-temp-dir "/irony/"))
(push "-std=c++11" irony-additional-clang-options)
:config
(setq c-tab-always-indent nil
c-electric-flag nil)
(require 'irony-eldoc)
(map! :map c-mode-base-map (:localleader :nv ";" 'narf/append-semicolon))
(require 'flycheck-irony)
(flycheck-irony-setup)
(def-textobj! "<" "<" ">")
(sp-with-modes '(c-mode c++-mode objc-mode java-mode)
(sp-local-pair "<" ">" :when '(narf/sp-point-is-template-p narf/sp-point-after-include-p))
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
;; Doxygen blocks
(sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC")))
(sp-local-pair "/*!" "*/" :post-handlers '(("||\n[i]" "RET") ("[d-1]< | " "SPC"))))
(require 'company-irony)
(require 'company-irony-c-headers)
(define-company-backend! c-mode (irony-c-headers irony))
(define-company-backend! c++-mode (irony-c-headers irony))
(define-company-backend! objc-mode (irony-c-headers irony))
;; Improve indentation of inline lambdas in C++11
(advice-add 'c-lineup-arglist :around 'narf/c-lineup-arglist))
;; some c-mode dervied modes wrongfully trigger these hooks (like php-mode)
(add-hook! (c-mode c++-mode ojbc-mode)
(when (memq major-mode '(c-mode c++-mode objc-mode))
(flycheck-mode +1)
(irony-mode +1)
(eldoc-mode +1)
(irony-eldoc +1)))))
(use-package irony
:after cc-mode
:config
(setq irony-server-install-prefix (concat narf-temp-dir "/irony/"))
(push "-std=c++11" irony-additional-clang-options)
(require 'irony-eldoc)
(require 'company-irony)
(require 'company-irony-c-headers)
(require 'flycheck-irony)
(flycheck-irony-setup)
;; some c-mode dervied modes wrongfully trigger these hooks (like php-mode)
(add-hook! (c-mode c++-mode ojbc-mode)
(when (memq major-mode '(c-mode c++-mode objc-mode))
(flycheck-mode +1)
(irony-mode +1)
(eldoc-mode +1)
(irony-eldoc +1))))
(use-package disaster :commands (disaster))
;;
(use-package cmake-mode
:mode "CMakeLists\\.txt$"
:init (def-company-backend! cmake-mode (cmake yasnippet)))
(use-package company-cmake :after cmake-mode)
(use-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'"))
(use-package cuda-mode :mode "\\.cuh?$")
(provide 'module-cc)
;;; module-cc.el ends here

View file

@ -1,12 +1,10 @@
;;; module-csharp.el
(use-package csharp-mode
:functions (csharp-log)
:mode "\\.cs$"
:init (add-hook 'csharp-mode-hook 'flycheck-mode))
;; unity shaders
(use-package shader-mode :mode "\\.shader$")
(use-package shader-mode :mode "\\.shader$") ; unity shaders
(use-package omnisharp
:commands (omnisharp-mode)
@ -15,7 +13,8 @@
omnisharp-server-executable-path (concat narf-ext-dir "/OmniSharp.exe"))
:when (file-exists-p omnisharp-server-executable-path)
:init
(add-hook! csharp-mode '(emr-initialize omnisharp-mode))
(def-company-backend! csharp-mode (omnisharp))
(add-hook! csharp-mode '(turn-on-eldoc-mode emr-initialize omnisharp-mode))
:config
(map! :map omnisharp-mode-map
"gd" 'omnisharp-go-to-definition
@ -24,9 +23,6 @@
"ts" (λ! (omnisharp-unit-test "single"))
"ta" (λ! (omnisharp-unit-test "all"))))
(define-company-backend! csharp-mode (omnisharp))
(add-hook! csharp-mode 'turn-on-eldoc-mode)
;; Map all refactor commands (see emr)
(mapc (lambda (x)
(let ((command-name (car x))

View file

@ -1,48 +1,45 @@
;;; module-go.el
(use-package gorepl-mode :commands (gorepl-run gorepl-run-load-current-file))
(use-package go-mode
:mode "\\.go$"
:interpreter "go"
:init
(add-hook! go-mode '(emr-initialize flycheck-mode))
(define-builder! go-mode "go build")
(define-repl! go-mode gorepl-run)
(def-builder! go-mode "go build")
(def-company-backend! go-mode (go yasnippet))
(def-repl! go-mode gorepl-run)
(add-hook! go-mode '(emr-initialize flycheck-mode go-eldoc-setup))
:config
(after! emr
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (symbol-name command-name))
:title title :modes 'go-mode :predicate predicate)))
'((go-remove-unused-imports "Remove unushed imports" nil)
(gofmt "Format code" nil))))
(after! helm
(use-package helm-go-package :defer t))
(require 'go-eldoc)
(add-hook 'go-mode-hook 'go-eldoc-setup)
(require 'company-go)
(define-company-backend! go-mode (go yasnippet))
(map! :map go-mode-map
:n "gd" 'godef-jump
:n "gD" 'godef-describe
(:localleader
:n "p" 'helm-go-package
:n "tr" 'narf:go-test-run-all
:n "ta" 'narf:go-test-run-all
:n "ts" 'narf:go-test-run-package)))
:n "p" 'helm-go-package
:n "tr" 'narf:go-test-run-all
:n "ta" 'narf:go-test-run-all
:n "ts" 'narf:go-test-run-package))
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (symbol-name command-name))
:title title :modes 'go-mode :predicate predicate)))
'((go-remove-unused-imports "Remove unushed imports" nil)
(gofmt "Format code" nil))))
(use-package go-eldoc :after go-mode)
(use-package company-go :after go-mode)
(use-package gorepl-mode :commands (gorepl-run gorepl-run-load-current-file))
(use-package helm-go-package :commands helm-go-package)
(provide 'module-go)
;;; module-go.el ends here

View file

@ -7,14 +7,13 @@
:interpreter (("runghc" . haskell-mode)
("runhaskell" . haskell-mode))
:init
(define-repl! haskell-mode switch-to-haskell)
(def-repl! haskell-mode switch-to-haskell)
(add-hook! haskell-mode '(interactive-haskell-mode flycheck-mode))
:config
(push ".hi" completion-ignored-extensions))
(use-package inf-haskell
:commands (inferior-haskell-mode inf-haskell-mode switch-to-haskell)
:init (evil-set-initial-state 'inferior-haskell-mode 'emacs)
:config
(map! :map inf-haskell-mode-map "ESC ESC" 'narf/popup-close))

View file

@ -1,15 +1,15 @@
;;; module-java.el --- the poster child for carpal tunnel
(define-docset! java-mode "java,droid,javafx,grails,groovy,playjava,spring,cvj,processing,javadoc")
(def-docset! java-mode "java,droid,javafx,grails,groovy,playjava,spring,cvj,processing,javadoc")
(use-package eclim
:functions (eclim--project-dir eclim--project-name)
:commands (eclim-mode global-eclim-mode)
:init
:preface
(setq eclim-eclipse-dirs '("/Applications/eclipse")
eclim-executable "/Applications/eclipse/eclim")
(when (file-exists-p eclim-executable)
(add-hook 'java-mode-hook 'eclim-mode))
:when (file-exists-p eclim-executable)
:init (add-hook 'java-mode-hook 'eclim-mode)
:config
;; (require 'eclim-ant)
;; (require 'eclim-maven)
@ -20,25 +20,24 @@
(setq help-at-pt-timer-delay 0.1)
(help-at-pt-set-timer)
(use-package company-emacs-eclim
:functions company-emacs-eclim-setup
:config (company-emacs-eclim-setup))
(map! :map java-mode-map :m "gd" 'eclim-java-find-declaration))
(use-package company-emacs-eclim
:after eclim
:config (company-emacs-eclim-setup))
(use-package android-mode
:commands android-mode
:init
(after! company-dict (add-to-list 'company-dict-minor-mode-list 'android-mode))
(def-yas-mode! 'android-mode)
(add-hook! (java-mode groovy-mode nxml-mode) 'narf|android-mode-enable-maybe)
(add-hook! android-mode (add-yas-minor-mode! 'android-mode)))
:config
(after! company-dict
(push 'android-mode company-dict-minor-mode-list)))
(use-package groovy-mode
:functions (is-groovy-mode)
:mode "\\.g\\(radle\\|vy\\|roovy\\)$")
(use-package groovy-mode :mode "\\.g\\(radle\\|vy\\|roovy\\)$")
(use-package scala-mode2
:mode ("\\.s\\(cala\\|bt\\)$" . scala-mode))
(use-package scala-mode2 :mode ("\\.s\\(cala\\|bt\\)$" . scala-mode))
(provide 'module-java)
;;; module-java.el ends here

View file

@ -4,15 +4,11 @@
:mode "\\.js$"
:interpreter "node"
:init
(add-hook 'js2-mode-hook '(tern-mode emr-initialize))
(define-repl! js2-mode nodejs-repl)
(define-docset! js2-mode "js,javascript,nodejs,angularjs,express,jquery,mongoose")
(define-company-backend! js2-mode (tern))
(add-hook! js2-mode
(electric-indent-local-mode +1)
(setq electric-indent-chars '(?} ?\) ?.)
narf-electric-indent-words '("||" "&&")))
(def-repl! js2-mode nodejs-repl)
(def-docset! js2-mode "js,javascript,nodejs,angularjs,express,jquery,mongoose")
(def-company-backend! js2-mode (tern))
(def-electric! js2-mode :chars (?\} ?\) ?.) :words ("||" "&&"))
(add-hook! js2-mode '(tern-mode emr-initialize))
:config
(setq-default
@ -25,17 +21,21 @@
;; Launchbar API
"LaunchBar" "File" "Action" "HTTP" "include" "Lib"))
(require 'tern)
(require 'company-tern)
;; [pedantry intensifies]
(defadvice js2-mode (after js2-mode-rename-modeline activate)
(setq mode-name "JS2"))
(add-hook! js2-mode (setq mode-name "JS2"))
(map! :map js2-mode-map (:localleader :nv ";" 'narf/append-semicolon))
(map! :map js2-mode-map (:localleader :nv ";" 'narf/append-semicolon)))
(require 'js2-refactor)
(require 'emr)
(use-package tern
:after js2-mode
:commands (tern-mode))
(use-package company-tern
:after tern)
(use-package js2-refactor
:after js2-mode
:config
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
@ -46,8 +46,8 @@
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command
(intern (format "js2r-%s" (symbol-name command-name)))
:title title :modes 'js2-mode :predicate predicate)))
(intern (format "js2r-%s" (symbol-name command-name)))
:title title :modes 'js2-mode :predicate predicate)))
'((extract-function "extract function" t)
(extract-method "extract method" t)
(introduce-parameter "introduce parameter" t)
@ -75,6 +75,9 @@
(forward-slurp "forward slurp" nil)
(forward-barf "forward barf" nil))))
(use-package nodejs-repl :commands (nodejs-repl))
;;
(use-package jsx-mode :mode "\\.jsx$")
(use-package unityjs-mode
@ -85,25 +88,21 @@
:mode "\\.coffee$"
:config (setq-default coffee-indent-like-python-mode t))
(use-package nodejs-repl
:commands (nodejs-repl)
:config (evil-set-initial-state 'nodejs-repl-mode 'emacs))
;;
(define-project-type! nodejs "node"
(def-project-type! nodejs "node"
:modes (web-mode js-mode js2-mode json-mode coffee-mode scss-mode sass-mode less-css-mode)
:files ("package.json"))
(define-project-type! angularjs "angular"
(def-project-type! angularjs "angular"
:modes (web-mode js-mode js2-mode json-mode coffee-mode scss-mode sass-mode less-css-mode)
:files ("public/libraries/angular/"))
(define-project-type! electron "electron"
(def-project-type! electron "electron"
:modes (nodejs-project-mode)
:files ("app/index.html" "app/main.js"))
;; TODO electron-compile support
(define-project-type! expressjs "express"
(def-project-type! expressjs "express"
:modes (nodejs-project-mode)
:files ("node_modules/express/"))

View file

@ -3,10 +3,7 @@
(use-package julia-mode
:mode "\\.jl$"
:interpreter "julia"
:init
(define-repl! julia-mode narf/julia-repl)
(evil-set-initial-state 'inferior-julia-mode 'emacs)
(push '(julia-mode julia-indent-offset) editorconfig-indentation-alist))
:init (def-repl! julia-mode narf/julia-repl))
(provide 'module-julia)
;;; module-julia.el ends here

View file

@ -1,18 +1,30 @@
;;; module-lisp --- all things lisp
(add-hook! emacs-lisp-mode
'(turn-on-eldoc-mode flycheck-mode highlight-numbers-mode highlight-quoted-mode))
;; Pop-up REPL
(define-repl! emacs-lisp-mode narf/elisp-inf-ielm)
(use-package highlight-quoted :commands (highlight-quoted-mode))
;; 'Emacs Lisp' is too long [pedantry intensifies]
(defadvice emacs-lisp-mode (after emacs-lisp-mode-rename-modeline activate)
(setq mode-name "Elisp"))
(associate! emacs-lisp-mode :match "\\(/Cask\\|\\.\\(el\\|gz\\)\\)$")
(def-company-backend! emacs-lisp-mode (elisp yasnippet))
(def-repl! emacs-lisp-mode narf/elisp-inf-ielm)
(add-hook! emacs-lisp-mode
'(turn-on-eldoc-mode flycheck-mode highlight-numbers-mode))
;; Real go-to-definition for elisp
(map! :map emacs-lisp-mode-map :m "gd" 'narf/elisp-find-function-at-pt)
(use-package highlight-quoted
:commands (highlight-quoted-mode)
:init (add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode))
(use-package slime :defer t
:config (setq inferior-lisp-program "clisp"))
;; Don't affect lisp indentation (only `tab-width')
(setq editorconfig-indentation-alist
(delq (assq 'emacs-lisp-mode editorconfig-indentation-alist)
editorconfig-indentation-alist))
(add-hook! emacs-lisp-mode
(setq mode-name "Elisp") ; [pedantry intensifies]
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
(add-hook 'after-save-hook 'narf/elisp-auto-compile nil t)
@ -56,16 +68,18 @@
'emacs-lisp-mode `(("(\\(lambda\\)"
(1 (narf/show-as )))
;; Highlight narf macros (macros are fontified in emacs 25+)
(,(concat
"(\\(def-"
(regexp-opt '("electric" "project-type" "company-backend"
"builder" "repl" "textobj" "tmp-excmd"
"repeat" "yas-mode" "env-command" "docset"))
"!\\)")
(1 font-lock-keyword-face append))
(,(concat
"(\\("
(regexp-opt '("λ" "in" "map" "after" "exmap" "shut-up" "add-hook"
"associate" "open-with" "define-repl"
"define-builder" "narf-space-setup"
"define-env-command" "define-text-object"
"add-yas-minor-mode" "define-docset"
"define-org-link" "define-company-backend"
"define-org-section" "define-temp-ex-cmd"
"define-project-type"))
(regexp-opt '("λ" "in" "map" "after" "shut-up" "add-hook"
"associate" "open-with" "define-org-link"
"define-org-section"))
"!\\)")
(1 font-lock-keyword-face append))
;; Ert
@ -77,19 +91,14 @@
(2 font-lock-function-name-face))))
;;
(use-package slime :defer t
:config (setq inferior-lisp-program "clisp"))
;; Real go-to-definition for elisp
(map! :map emacs-lisp-mode-map :m "gd" 'narf/elisp-find-function-at-pt)
(define-project-type! emacs-ert "ert"
(def-project-type! emacs-ert "ert"
:modes (emacs-lisp-mode)
:match "/test/.+-test\\.el$"
:bind (:localleader
:n "tr" 'narf/ert-rerun-test
:n "ta" 'narf/ert-run-all-tests
:n "ts" 'narf/ert-run-test))
:n "ts" 'narf/ert-run-test)
(add-hook 'ert-results-mode-hook 'narf|hide-mode-line))
(provide 'module-lisp)
;;; module-elisp.el ends here

View file

@ -4,12 +4,11 @@
:mode "\\.lua$"
:interpreter "lua"
:init
(define-repl! lua-mode narf/inf-lua)
(define-company-backend! lua-mode (yasnippet))
(def-company-backend! lua-mode (yasnippet))
(def-electric! lua-mode :words ("else" "end"))
(def-repl! lua-mode narf/inf-lua)
(add-hook 'lua-mode-hook 'flycheck-mode)
(add-hook! lua-mode
(electric-indent-local-mode +1)
(setq narf-electric-indent-words '("else" "end")))
:config
(sp-with-modes '(lua-mode)
;; disable defaults
@ -28,12 +27,12 @@
(sp-local-pair "function " " end" :unless '(sp-point-after-bol-p))))
;;
(define-project-type! love ""
(def-project-type! love ""
:modes (lua-mode markdown-mode json-mode)
:files ("main.lua" "conf.lua")
:build ("open -a love.app '%s'" "main.lua"))
(define-project-type! hammerspoon "hammer"
(def-project-type! hammerspoon "hammer"
:modes (lua-mode markdown-mode)
:match "/\\.?hammerspoon/.+\\.lua$"
:build "open hammerspoon://reload")

View file

@ -2,26 +2,42 @@
(use-package hack-mode
:mode "\\.hh$"
:config (define-company-backend! hack-mode (capf)))
:init (def-company-backend! hack-mode (capf)))
(use-package php-mode
:mode ("\\.php[s345]?$" "\\.inc$" )
:interpreter "php"
:init
(define-docset! php-mode "php,laravel")
(define-company-backend! php-mode '(php-extras-company))
(def-repl! php-mode php-boris)
(def-docset! php-mode "php,laravel")
(def-company-backend! php-mode '(company-ac-php-backend php-extras-company))
(add-hook 'php-mode-hook 'flycheck-mode)
(setq php-template-compatibility nil
php-extras-eldoc-functions-file (concat narf-temp-dir "/php-extras-eldoc-functions"))
:config
(require 'php-extras)
(defun php-extras-company-setup ()) ;; company will set up itself
:config
(map! :map php-mode-map (:localleader :nv ";" 'narf/append-semicolon))
(sp-with-modes '(php-mode)
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
(sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC")))
(sp-local-pair "<? " " ?>")
(sp-local-pair "<?php " " ?>")
(sp-local-pair "<?=" " ?>")
(sp-local-pair "<?" "?>" :when '(("RET")) :post-handlers '("||\n[i]"))
(sp-local-pair "<?php" "?>" :when '(("RET")) :post-handlers '("||\n[i]"))))
(use-package ac-php-company
:after php-mode
:config
(map! :map php-mode-map
(:localleader :nv ";" 'narf/append-semicolon)
:n "gd" 'ac-php-find-symbol-at-point
:n "gD" 'ac-php-location-stack-back)
:n "gD" 'ac-php-location-stack-back))
(use-package php-extras
:after php-mode
:config
(defun php-extras-company-setup ()) ;; company will set up itself
;; Generate php-extras documentation and completion asynchronously
(unless (file-exists-p (concat php-extras-eldoc-functions-file ".el"))
@ -31,43 +47,32 @@
(php-extras-generate-eldoc-1 t))
(lambda (_)
(load (concat php-extras-eldoc-functions-file ".el"))
(message "PHP eldoc updated!"))))
(message "PHP eldoc updated!")))))
(sp-with-modes '(php-mode)
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
(sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC")))
(sp-local-pair "<? " " ?>")
(sp-local-pair "<?php " " ?>")
(sp-local-pair "<?=" " ?>")
(sp-local-pair "<?" "?>" :when '(("RET")) :post-handlers '("||\n[i]"))
(sp-local-pair "<?php" "?>" :when '(("RET")) :post-handlers '("||\n[i]")))
(use-package php-refactor-mode
:after php-mode
:init (add-hook! php-mode '(turn-on-eldoc-mode emr-initialize php-refactor-mode))
:config
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (format "php-refactor--%s" (symbol-name command-name)))
:title title :modes 'php-mode :predicate predicate)))
'((convert-local-to-instance-variable "convert local var to instance var" nil)
(optimize-use "optimize FQNs in file" nil)
(extract-method "extract method" t)
(rename-local-variable "rename local variable" nil))))
(use-package php-refactor-mode
:init (add-hook! php-mode '(turn-on-eldoc-mode emr-initialize php-refactor-mode))
:config
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (format "php-refactor--%s" (symbol-name command-name)))
:title title :modes 'php-mode :predicate predicate)))
'((convert-local-to-instance-variable "convert local var to instance var" nil)
(optimize-use "optimize FQNs in file" nil)
(extract-method "extract method" t)
(rename-local-variable "rename local variable" nil)))))
;; PHP Repl
(use-package php-boris :defer t
:init (define-repl! php-mode php-boris)
:config (evil-set-initial-state 'php-boris-mode 'emacs))
(use-package php-boris :commands php-boris) ; PHP REPL
;;
(define-project-type! laravel "laravel"
(def-project-type! laravel "laravel"
:modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
:files ("artisan" "server.php"))

View file

@ -5,7 +5,7 @@
:commands (processing-mode processing-find-sketch)
:mode "\\.pde$"
:init
(define-builder! processing-mode processing-sketch-build)
(def-builder! processing-mode processing-sketch-build)
(add-hook 'processing-compilation-mode-hook 'narf|hide-mode-line)
:config
@ -14,14 +14,6 @@
processing-sketchbook-dir "~/Dropbox/work/pde"
processing-output-dir "/tmp")
(after! quickrun
(quickrun-add-command
"processing" `((:command . ,processing-location)
(:exec . (lambda () (format "--sketch=%s --output=%s --force --run"
(narf/project-root) processing-output-dir)))
(:description . "Run Processing sketch"))
:mode 'processing-mode))
(map! :map processing-mode-map
:nv "M-r" 'processing-sketch-run
:m "gd" 'processing-find-in-reference
@ -32,6 +24,14 @@
"e" 'processing-open-examples
"o" 'processing-open-sketchbook))
(after! quickrun
(quickrun-add-command
"processing" `((:command . ,processing-location)
(:exec . (lambda () (format "--sketch=%s --output=%s --force --run"
(narf/project-root) processing-output-dir)))
(:description . "Run Processing sketch"))
:mode 'processing-mode))
(add-hook! processing-mode
(setq-local company-backends '((company-keywords
:with

View file

@ -17,55 +17,59 @@
python-shell-completion-string-code
"';'.join(get_ipython().Completer.all_completions('''%s'''))\n")
(define-docset! python-mode "py,py3,python")
(define-env-command! python-mode "python --version 2>&1 | cut -d' ' -f2")
(define-repl! python-mode narf/inf-python)
(add-hook! python-mode '(emr-initialize narf|flycheck-enable-maybe))
(def-company-backend! python-mode (anaconda))
(def-docset! python-mode "py,py3,python")
(def-env-command! python-mode "python --version 2>&1 | cut -d' ' -f2")
(def-repl! python-mode narf/inf-python)
(add-hook 'python-mode-hook 'flycheck-mode)
:config
(define-key python-mode-map (kbd "DEL") nil) ; interferes with smartparens
(define-key python-mode-map (kbd "DEL") nil)) ; interferes with smartparens
(use-package anaconda-mode
:init
(add-hook! python-mode '(anaconda-mode anaconda-eldoc-mode eldoc-mode))
(setq anaconda-mode-installation-directory (concat narf-temp-dir "/anaconda/")
anaconda-mode-eldoc-as-single-line t)
(use-package anaconda-mode
:after python
:init
(add-hook! python-mode '(anaconda-mode anaconda-eldoc-mode eldoc-mode))
(setq anaconda-mode-installation-directory (concat narf-temp-dir "/anaconda/")
anaconda-mode-eldoc-as-single-line t)
:config
(map! :map anaconda-mode-map :m "gd" 'anaconda-mode-find-definitions)
(map! :map anaconda-nav-mode-map :n [escape] 'anaconda-nav-quit)
:config
(map! :map anaconda-mode-map :m "gd" 'anaconda-mode-find-definitions)
(map! :map anaconda-nav-mode-map :n [escape] 'anaconda-nav-quit)
(advice-add 'anaconda-mode-doc-buffer :after 'narf*anaconda-mode-doc-buffer)
(advice-add 'anaconda-mode-doc-buffer :after 'narf*anaconda-mode-doc-buffer))
(require 'company-anaconda)
(define-company-backend! python-mode (anaconda))
(after! emr
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (lambda () (and (anaconda-mode-running-p)
(not (use-region-p))
(not (sp-point-in-string-or-comment)))))
(emr-declare-command (intern (format "anaconda-mode-%s" (symbol-name command-name)))
:title title :modes 'python-mode :predicate predicate)))
'((show-doc "view documentation" t)
(find-assignments "find assignments" t)
(find-definitions "find definitions" t)
(find-file "find assignments" t)
(find-references "show usages" nil))))))
(use-package company-anaconda
:after anaconda-mode
:init (add-hook 'anaconda-mode-hook 'emr-initialize)
:config
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (lambda () (and (anaconda-mode-running-p)
(not (use-region-p))
(not (sp-point-in-string-or-comment)))))
(emr-declare-command (intern (format "anaconda-mode-%s" (symbol-name command-name)))
:title title :modes 'python-mode :predicate predicate)))
'((show-doc "view documentation" t)
(find-assignments "find assignments" t)
(find-definitions "find definitions" t)
(find-file "find assignments" t)
(find-references "show usages" nil))))
(use-package pip-requirements
:mode ("/requirements.txt$" . pip-requirements-mode)
:config (define-company-backend! pip-requirements-mode (capf)))
:config (def-company-backend! pip-requirements-mode (capf)))
(use-package nose
:commands nose-mode
:preface (defvar nose-mode-map (make-sparse-keymap))
:init (associate! nose-mode :match "/test_.+\\.py$" :in (python-mode))
:init
(associate! nose-mode :match "/test_.+\\.py$" :in (python-mode))
(def-yas-mode! 'nose-mode)
:config
(add-yas-minor-mode! 'nose-mode)
(map! :map nose-mode-map
(:localleader
:n "tr" 'nosetests-again

View file

@ -5,57 +5,45 @@
"/\\(Gem\\|Cap\\|Vagrant\\|Rake\\)file$")
:interpreter "ruby"
:init
(add-hook 'ruby-mode-hook 'flycheck-mode)
(define-docset! ruby-mode "rb,ruby,rubygem")
(define-builder! ruby-mode "rake %s" "Rakefile")
(define-env-command! ruby-mode "ruby --version | cut -d' ' -f2")
(define-company-backend! ruby-mode (dabbrev-code))
(def-builder! ruby-mode "rake %s" "Rakefile")
(def-company-backend! ruby-mode (dabbrev-code))
(def-docset! ruby-mode "rb,ruby,rubygem")
(def-env-command! ruby-mode "ruby --version | cut -d' ' -f2")
(def-repl! ruby-mode inf-ruby)
(def-electric! ruby-mode :words ("else" "end" "elseif"))
(add-hook! 'ruby-mode-hook '(flycheck-mode yard-mode))
:config
(setq ruby-deep-indent-paren t) ; Formatting
(add-hook! ruby-mode
(electric-indent-local-mode +1)
(setq narf-electric-indent-words '("else" "end" "elseif")))
;; Don't interfere with my custom RET behavior
(define-key ruby-mode-map [?\n] nil)
(define-key ruby-mode-map [?\n] nil))
;; Highlight doc comments
(use-package yard-mode :init (add-hook 'ruby-mode-hook 'yard-mode))
(use-package ruby-refactor
:after ruby-mode
:init (add-hook 'ruby-mode-hook 'emr-initialize)
:config
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (format "ruby-%s" (symbol-name command-name)))
:title title :modes 'ruby-mode :predicate predicate)))
'((toggle-block "toggle block" nil)
(refactor-extract-to-method "extract method" t)
(refactor-extract-local-variable "extract local variable" t)
(refactor-extract-constant "extract constant" t)
(refactor-add-parameter "add parameter" nil)
(refactor-extract-to-let "extract to let" t)
(refactor-convert-post-conditional "convert post conditional" t))))
;; FIXME: Doesn't work
;; (use-package robe
;; :commands (robe-mode robe-start ruby-load-file company-robe)
;; :init
;; (add-hook! ruby-mode
;; (narf|ruby-load-file)
;; (add-hook 'after-save-hook 'narf|ruby-load-file nil t))
;; (define-company-backend! ruby-mode (robe))
;; :config
;; (require 'company-robe))
(use-package ruby-refactor
:init (add-hook 'ruby-mode-hook 'emr-initialize)
:config
(require 'emr)
(mapc (lambda (x)
(let ((command-name (car x))
(title (cadr x))
(region-p (caddr x))
predicate)
(setq predicate (cond ((eq region-p 'both) nil)
(t (if region-p
(lambda () (use-region-p))
(lambda () (not (use-region-p)))))))
(emr-declare-command (intern (format "ruby-%s" (symbol-name command-name)))
:title title :modes 'ruby-mode :predicate predicate)))
'((toggle-block "toggle block" nil)
(refactor-extract-to-method "extract method" t)
(refactor-extract-local-variable "extract local variable" t)
(refactor-extract-constant "extract constant" t)
(refactor-add-parameter "add parameter" nil)
(refactor-extract-to-let "extract to let" t)
(refactor-convert-post-conditional "convert post conditional" t)))))
;; Highlight doc comments
(use-package yard-mode :commands yard-mode)
(use-package rspec-mode
:mode ("/\\.rspec$" . text-mode)
@ -80,19 +68,13 @@
(use-package inf-ruby
:commands (inf-ruby inf-ruby-console-auto)
:init
(define-repl! ruby-mode inf-ruby)
(evil-set-initial-state 'inf-ruby-mode 'emacs)
:config
(require 'company-inf-ruby)
(define-company-backend! inf-ruby-mode (inf-ruby)))
:init (def-company-backend! inf-ruby-mode (inf-ruby)))
(use-package company-inf-ruby :after inf-ruby)
;;
(define-project-type! rake "rake"
(def-project-type! rake "rake"
:files ("Rakefile"))
(define-project-type! vagrant "vagrant"
:files ("Vagrantfile"))
(provide 'module-ruby)
;;; module-ruby.el ends here

View file

@ -2,25 +2,25 @@
(use-package rust-mode
:mode "\\.rs$"
:init
(def-builder! rust-mode "cargo run" "Cargo.toml")
(def-builder! toml-mode "cargo run" "Cargo.toml")
(add-hook 'rust-mode-hook 'flycheck-mode))
(use-package flycheck-rust :after rust-mode)
(use-package racer
:after rust-mode
:preface
(setq racer-cmd (concat narf-ext-dir "/racer")
racer-rust-src-path (concat narf-ext-dir "/rust/src/"))
:when (file-exists-p racer-cmd)
:init
(add-hook! rust-mode '(racer-mode eldoc-mode flycheck-rust-setup))
:config
(define-builder! rust-mode "cargo run" "Cargo.toml")
(define-builder! toml-mode "cargo run" "Cargo.toml")
(require 'flycheck-rust)
(add-hook 'rust-mode-hook 'flycheck-mode)
(use-package racer
:preface
(setq racer-cmd (concat narf-ext-dir "/racer")
racer-rust-src-path (concat narf-ext-dir "/rust/src/"))
:when (file-exists-p racer-cmd)
:config
(define-company-backend! rust-mode (racer))
(map! :map rust-mode-map :m "gd" 'racer-find-definition)
;; TODO Unit test keybinds
(add-hook! rust-mode '(racer-mode eldoc-mode flycheck-rust-setup))))
;; TODO Unit test keybinds
(def-company-backend! rust-mode (racer))
(map! :map rust-mode-map :m "gd" 'racer-find-definition))
(provide 'module-rust)
;;; module-rust.el ends here

View file

@ -3,20 +3,17 @@
(associate! sh-mode :match "\\.\\(ba\\|z\\)sh$")
(associate! sh-mode :match "/\\.?z\\(sh\\(/.*\\|$\\)\\|profile\\|login\\|logout\\|shrc\\|shenv\\)$")
(associate! sh-mode :match "/\\.?bash\\(/.*\\|rc\\|_profile\\)$")
(after! sh-script
(define-repl! sh-mode narf/inf-shell)
(def-electric! sh-mode :words ("else" "elif" "fi" "done"))
(after! sh-script
(def-repl! sh-mode narf/inf-shell)
(setq sh-indent-after-continuation 'always)
(add-hook 'sh-mode-hook 'flycheck-mode)
(add-hook 'sh-mode-hook 'narf|sh-extra-font-lock-activate) ; Fontify variables in strings
(add-hook! sh-mode (setq mode-name "sh")) ; [pedantry intensifies]
(add-hook! sh-mode
(electric-indent-local-mode +1)
(setq narf-electric-indent-words '("else" "elif" "fi" "done")))
(require 'company-shell)
(setq company-shell-delete-duplicates t)
'(flycheck-mode
;; Fontify variables in strings
narf|sh-extra-font-lock-activate))
(sp-with-modes '(sh-mode)
(sp-local-pair "case" "" :when '(("SPC")) :post-handlers '((:add narf/sp-insert-yasnippet)) :actions '(insert))
@ -25,5 +22,9 @@
(sp-local-pair "elif" "" :when '(("SPC")) :post-handlers '((:add narf/sp-insert-yasnippet)) :actions '(insert))
(sp-local-pair "while" "" :when '(("SPC")) :post-handlers '((:add narf/sp-insert-yasnippet)) :actions '(insert))))
(use-package company-shell
:after sh-script
:config (setq company-shell-delete-duplicates t))
(provide 'module-sh)
;;; module-sh.el ends here

View file

@ -2,8 +2,7 @@
(use-package markdown-mode
:mode ("\\.md$" "/README$")
:init
(add-hook 'markdown-mode-hook 'turn-on-auto-fill)
:init (add-hook 'markdown-mode-hook 'turn-on-auto-fill)
:config
(map! :map markdown-mode-map
"<backspace>" nil
@ -28,9 +27,45 @@
:n "[p" 'markdown-promote
:n "]p" 'markdown-demote
:i "M--" 'markdown-insert-hr)
:i "M--" 'markdown-insert-hr))
(use-package markdown-toc :commands (markdown-toc-generate-toc)))
(use-package markdown-toc :after markdown-mode)
(use-package reftex
:config
(add-hook 'latex-mode-hook 'turn-on-reftex)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t
reftex-ref-style-default-list '("Cleveref" "Hyperref" "Fancyref")
reftex-default-bibliography
`(,(expand-file-name "phys.bib" write-mode-biblio-dir))))
(use-package helm-bibtex
:defer t
:init
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq bibtex-dialect 'biblatex)
(setq bibtex-align-at-equal-sign t)
(setq bibtex-text-indentation 20)
(add-hook! bibtex-mode
(local-set-key (kbd "C-c \\") 'bibtex-fill-entry)
(setq fill-column 140))
(add-hook! latex-mode 'turn-on-auto-fill)
(add-hook! LaTeX-mode 'turn-on-auto-fill)
:config
(setq helm-bibtex-bibliography
`(,(expand-file-name "phys.bib" write-mode-biblio-dir))
helm-bibtex-library-path
`(,(expand-file-name "phys-pdf" write-mode-biblio-dir))
helm-bibtex-notes-path (expand-file-name "notes" write-mode-biblio-dir)
helm-bibtex-notes-extension ".org"
helm-bibtex-pdf-open-function
(lambda (fpath) (async-start-process "open-pdf" "/usr/bin/open" nil fpath))))
(provide 'module-text)
;;; module-text.el ends here

View file

@ -1,8 +1,8 @@
;;; module-web.el
(define-company-backend! sass-mode (css))
(define-company-backend! scss-mode (css))
(define-docset! scss-mode "sass,bourbon")
(def-company-backend! sass-mode (css))
(def-company-backend! scss-mode (css))
(def-docset! scss-mode "sass,bourbon")
(add-hook! (sass-mode scss-mode less-css-mode)
'(flycheck-mode narf|hl-line-off hs-minor-mode))
@ -34,9 +34,6 @@
:n ";" 'helm-css-scss
:n ":" 'helm-css-scss-multi))
(after! web-beautify
(map! :map scss-mode-map :m "gQ" 'web-beautify-css))
(after! emr
(emr-declare-command 'narf/scss-toggle-inline-or-block
:title "toggle inline/block"
@ -44,21 +41,29 @@
:predicate (lambda () (not (use-region-p))))))
(use-package jaded-mode
:load-path "/Volumes/hlissner/Dropbox/work/plugins/jaded-mode"
:mode "\\.jade$"
:config
(push '("jade" "html") projectile-other-file-alist)
(map! :map jaded-mode-map
:i [tab] 'narf/dumb-indent
:i [backtab] 'narf/dumb-dedent))
(use-package web-mode
:mode ("\\.\\(p\\)?htm\\(l\\)?$"
:mode ("\\.p?html?$"
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
"\\.erb$"
"\\.as[cp]x$"
"\\.mustache$"
"wp-content/themes/.+/.+\\.php$")
:init
(add-hook 'web-mode-hook 'turn-off-smartparens-mode)
:config
(setq web-mode-enable-html-entities-fontification t
web-mode-enable-current-column-highlight t)
(push '("html" "jade") projectile-other-file-alist)
(map! :map web-mode-map :i "SPC" 'self-insert-command)
(after! nlinum
@ -67,12 +72,11 @@
(map! :map web-mode-map
"M-/" 'web-mode-comment-or-uncomment
:n "M-r" 'narf/web-refresh-browser
:n "za" 'web-mode-fold-or-unfold
(:localleader :n "t" 'web-mode-element-rename)
:n "M-r" 'narf/web-refresh-browser
:nv "]a" 'web-mode-attribute-next
:nv "[a" 'web-mode-attribute-previous
:nv "]t" 'web-mode-tag-next
@ -81,15 +85,6 @@
:nv "[T" 'web-mode-element-parent))
;;
(use-package web-beautify
:commands (web-beautify-js web-beautify-css web-beautify-html)
:init
(add-hook! (web-mode css-mode scss-mode sass-mode less-css-mode js2-mode)
(setenv "jsbeautify_indent_size" (int-to-string tab-width)))
(map! (:after web-mode :map web-mode-map :m "gQ" 'web-beautify-html)
(:after css-mode :map css-mode-map :m "gQ" 'web-beautify-css)
(:after js2-mode :map js2-mode-map :m "gQ" 'web-beautify-js)))
(use-package emmet-mode
:commands (emmet-mode)
:init
@ -103,7 +98,7 @@
:i "M-E" 'emmet-expand-line))
;;
(define-project-type! jekyll ":{"
(def-project-type! jekyll ":{"
:modes (web-mode scss-mode html-mode markdown-mode yaml-mode)
:match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$"
:files ("config.yml" "_layouts/")
@ -111,7 +106,7 @@
(when (eq major-mode 'web-mode)
(web-mode-set-engine "django"))))
(define-project-type! wordpress "wp"
(def-project-type! wordpress "wp"
:modes (php-mode web-mode css-mode scss-mode sass-mode)
:match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$"
:files ("wp-config.php" "wp-content/"))