Update modules/lang/*
This commit is contained in:
parent
f0adef1b01
commit
e14e25ecb4
68 changed files with 1487 additions and 750 deletions
|
@ -1,10 +0,0 @@
|
|||
;;; module-asm.el
|
||||
|
||||
(use-package mips-mode :mode "\\.mips$")
|
||||
|
||||
(use-package haxor-mode :mode "\\.hax$")
|
||||
|
||||
(use-package nasm-mode :defer t)
|
||||
|
||||
(provide 'module-asm)
|
||||
;;; module-asm.el ends here
|
8
modules/lang/assembly/config.el
Normal file
8
modules/lang/assembly/config.el
Normal file
|
@ -0,0 +1,8 @@
|
|||
;;; lang/assembly/config.el
|
||||
|
||||
(@def-package mips-mode :mode "\\.mips$")
|
||||
|
||||
(@def-package haxor-mode :mode "\\.hax$")
|
||||
|
||||
(@def-package nasm-mode :commands nasm-mode)
|
||||
|
6
modules/lang/assembly/packages.el
Normal file
6
modules/lang/assembly/packages.el
Normal file
|
@ -0,0 +1,6 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/assembly/packages.el
|
||||
|
||||
(@package mips-mode)
|
||||
(@package haxor-mode)
|
||||
(@package nasm-mode)
|
80
modules/lang/cc/autoload.el
Normal file
80
modules/lang/cc/autoload.el
Normal file
|
@ -0,0 +1,80 @@
|
|||
;;; lang/cc/autoload.el
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc/install ()
|
||||
(interactive)
|
||||
(irony-install-server
|
||||
(format
|
||||
(concat "%s %s %s && %s --build . "
|
||||
"--use-stderr --config Release --target install")
|
||||
(shell-quote-argument irony-cmake-executable)
|
||||
(shell-quote-argument (concat "-DCMAKE_INSTALL_PREFIX="
|
||||
(expand-file-name
|
||||
irony-server-install-prefix)))
|
||||
(shell-quote-argument irony-server-source-dir)
|
||||
(shell-quote-argument irony-cmake-executable))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc/autoclose->-maybe ()
|
||||
"For some reason smartparens won't autoskip >'s, this hack does."
|
||||
(interactive)
|
||||
(if (save-excursion
|
||||
(backward-char)
|
||||
(looking-at-p "[^ \t]>"))
|
||||
(forward-char)
|
||||
(call-interactively 'self-insert-command)))
|
||||
|
||||
(defun +cc--copy-face (new-face face)
|
||||
"Define NEW-FACE from existing FACE."
|
||||
(copy-face face new-face)
|
||||
(eval `(defvar ,new-face nil))
|
||||
(set new-face new-face))
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc|extra-fontify-c++ ()
|
||||
;; We could place some regexes into `c-mode-common-hook', but
|
||||
;; note that their evaluation order matters.
|
||||
;; NOTE modern-cpp-font-lock will eventually supercede some of these rules
|
||||
(font-lock-add-keywords
|
||||
nil '(;; c++11 string literals
|
||||
;; L"wide string"
|
||||
;; L"wide string with UNICODE codepoint: \u2018"
|
||||
;; u8"UTF-8 string", u"UTF-16 string", U"UTF-32 string"
|
||||
("\\<\\([LuU8]+\\)\".*?\"" 1 font-lock-keyword-face)
|
||||
;; R"(user-defined literal)"
|
||||
;; R"( a "quot'd" string )"
|
||||
;; R"delimiter(The String Data" )delimiter"
|
||||
;; R"delimiter((a-z))delimiter" is equivalent to "(a-z)"
|
||||
("\\(\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\)" 1 font-lock-keyword-face t) ; start delimiter
|
||||
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\(.*?\\))[^\\s-\\\\()]\\{0,16\\}\"" 1 font-lock-string-face t) ; actual string
|
||||
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?\\()[^\\s-\\\\()]\\{0,16\\}\"\\)" 1 font-lock-keyword-face t) ; end delimiter
|
||||
) t))
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc|extra-fontify-c/c++ ()
|
||||
(font-lock-add-keywords
|
||||
nil '(;; PREPROCESSOR_CONSTANT, PREPROCESSORCONSTANT
|
||||
("\\<[A-Z]*_[A-Z_]+\\>" . font-lock-constant-face)
|
||||
("\\<[A-Z]\\{3,\\}\\>" . font-lock-constant-face)
|
||||
;; integer/float/scientific numbers
|
||||
("\\<\\([\\-+]*[0-9\\.]+\\)\\>" 1 font-lock-constant-face t)
|
||||
("\\<\\([\\-+]*[0-9\\.]+\\)\\(f\\)\\>"
|
||||
(1 font-lock-constant-face t)
|
||||
(2 font-lock-keyword-face t))
|
||||
("\\<\\([\\-+]*[0-9\\.]+\\)\\([eE]\\)\\([\\-+]?[0-9]+\\)\\>"
|
||||
(1 font-lock-constant-face t)
|
||||
(2 font-lock-keyword-face t)
|
||||
(3 font-lock-constant-face t))
|
||||
) t))
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc-sp-point-is-template-p (id action context)
|
||||
(and (sp-in-code-p id action context)
|
||||
(sp-point-after-word-p id action context)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +cc-sp-point-after-include-p (id action context)
|
||||
(and (sp-in-code-p id action context)
|
||||
(save-excursion
|
||||
(goto-char (line-beginning-position))
|
||||
(looking-at-p "[ ]*#include[^<]+"))))
|
|
@ -1,91 +1,156 @@
|
|||
;;; module-cc.el --- C, C++, and Objective-C
|
||||
;;; lang/cc/config.el --- C, C++, and Objective-C
|
||||
|
||||
(use-package cc-mode
|
||||
(@def-package cc-mode
|
||||
:commands (c-mode c++-mode objc-mode java-mode)
|
||||
:mode ("\\.mm" . objc-mode)
|
||||
:init
|
||||
(add-hook! (c-mode c++-mode) 'doom|extra-fontify-c/c++)
|
||||
(add-hook 'c-mode-hook 'highlight-numbers-mode)
|
||||
(add-hook 'c++-mode-hook 'doom|extra-fontify-c++)
|
||||
(add-hook 'c-initialization-hook 'doom|init-c/c++-settings)
|
||||
|
||||
;; C++ header files
|
||||
(push (cons (lambda () (and (f-ext? buffer-file-name "h")
|
||||
(or (f-exists? (f-swap-ext buffer-file-name "cpp"))
|
||||
(awhen (car-safe (projectile-get-other-files (buffer-file-name) (projectile-current-project-files)))
|
||||
(f-ext? it "cpp")))))
|
||||
;; Auto-detect C++ header files
|
||||
(push (cons (lambda ()
|
||||
(and (equal (file-name-extension buffer-file-name) "h")
|
||||
(or (file-exists-p (expand-file-name
|
||||
(concat (file-name-sans-extension buffer-file-name)
|
||||
".cpp")))
|
||||
(when-let (file (car-safe (projectile-get-other-files
|
||||
buffer-file-name
|
||||
(projectile-current-project-files))))
|
||||
(equal (file-name-extension file) "cpp")))))
|
||||
'c++-mode)
|
||||
magic-mode-alist)
|
||||
|
||||
;; Obj-C
|
||||
(push (cons (lambda () (and (f-ext? buffer-file-name "h")
|
||||
;; Auto-detect Obj-C header files
|
||||
(push (cons (lambda () (and (equal (file-name-extension buffer-file-name) "h")
|
||||
(re-search-forward "@\\<interface\\>" magic-mode-regexp-match-limit t)))
|
||||
'objc-mode)
|
||||
magic-mode-alist)
|
||||
|
||||
:config
|
||||
(def-electric! (c-mode c++-mode objc-mode) :chars (?\n ?\}))
|
||||
(def-company-backend! (c-mode c++-mode objc-mode) (irony-c-headers irony))
|
||||
|
||||
(setq c-tab-always-indent nil
|
||||
c-electric-flag nil)
|
||||
|
||||
(map! :map c-mode-base-map (:localleader :nv ";" 'doom/append-semicolon))
|
||||
;; extra highlights for numbers in C (`modern-cpp-font-lock' offers something better for C++)
|
||||
(add-hook 'c-mode-hook 'highlight-numbers-mode)
|
||||
;; Fontification of C++11 string literals
|
||||
(add-hook 'c++-mode-hook '+cc|extra-fontify-c++)
|
||||
|
||||
(@set :electric '(c-mode c++-mode objc-mode java-mode)
|
||||
:chars ?\n ?\})
|
||||
|
||||
(@set :company-backend
|
||||
'(c-mode c++-mode objc-mode)
|
||||
'(company-irony-c-headers company-irony))
|
||||
|
||||
(sp-with-modes '(c-mode c++-mode objc-mode java-mode)
|
||||
(sp-local-pair "<" ">" :when '(doom/sp-point-is-template-p doom/sp-point-after-include-p))
|
||||
(sp-local-pair "<" ">" :when '(+cc-sp-point-is-template-p +cc-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"))))
|
||||
|
||||
;; Improve indentation of inline lambdas in C++11
|
||||
(advice-add 'c-lineup-arglist :around 'doom/c-lineup-arglist))
|
||||
(advice-add 'c-lineup-arglist :around '+c-lineup-arglist)
|
||||
|
||||
(use-package modern-cpp-font-lock
|
||||
;; C/C++ style settings
|
||||
(c-toggle-electric-state -1)
|
||||
(c-toggle-auto-newline -1)
|
||||
(c-set-offset 'substatement-open '0) ; brackets should be at same indentation level as the statements they open
|
||||
(c-set-offset 'inline-open '+)
|
||||
(c-set-offset 'block-open '+)
|
||||
(c-set-offset 'brace-list-open '+) ; all "opens" should be indented by the c-indent-level
|
||||
(c-set-offset 'case-label '+) ; indent case labels by c-indent-level, too
|
||||
(c-set-offset 'access-label '-)
|
||||
(c-set-offset 'arglist-intro '+)
|
||||
(c-set-offset 'arglist-close '0)
|
||||
|
||||
(defun +cc--c-lineup-inclass (langelem)
|
||||
(let ((inclass (assoc 'inclass c-syntactic-context)))
|
||||
(save-excursion
|
||||
(goto-char (c-langelem-pos inclass))
|
||||
(if (or (looking-at "struct")
|
||||
(looking-at "typedef struct"))
|
||||
'+
|
||||
'++))))
|
||||
(c-set-offset 'inclass '+cc--c-lineup-inclass)
|
||||
|
||||
|
||||
;; Certain mappings interfere with smartparens and custom bindings,
|
||||
;; so unbind them
|
||||
(@map :map c-mode-map
|
||||
"DEL" nil
|
||||
"#" 'self-insert-command
|
||||
"{" 'self-insert-command
|
||||
"}" 'self-insert-command
|
||||
"/" 'self-insert-command
|
||||
"*" 'self-insert-command
|
||||
";" 'self-insert-command
|
||||
"," 'self-insert-command
|
||||
":" 'self-insert-command
|
||||
"(" 'self-insert-command
|
||||
")" 'self-insert-command
|
||||
|
||||
:map c++-mode-map
|
||||
"}" nil
|
||||
|
||||
;; Smartparens and cc-mode both try to autoclose
|
||||
;; angle-brackets intelligently. The result isn't very
|
||||
;; intelligent (causes redundant characters), so we just do it
|
||||
;; ourselves.
|
||||
"<" nil
|
||||
:map (c-mode-base-map c++-mode-map)
|
||||
:i ">" '+cc/autoclose->-maybe))
|
||||
|
||||
|
||||
(@def-package modern-cpp-font-lock
|
||||
:commands modern-c++-font-lock-mode
|
||||
:init (add-hook 'c++-mode-hook 'modern-c++-font-lock-mode))
|
||||
|
||||
(use-package irony
|
||||
|
||||
(@def-package irony
|
||||
:after cc-mode
|
||||
:config
|
||||
(setq irony-server-install-prefix (concat doom-ext-dir "/irony-mode/server/build/irony/"))
|
||||
(add-hook! c++-mode
|
||||
(setq irony-server-install-prefix (concat doom-cache-dir "irony-server/"))
|
||||
(@add-hook 'irony-mode-hook '(irony-eldoc flycheck-mode))
|
||||
(@add-hook 'c++-mode-hook
|
||||
(make-local-variable 'irony-additional-clang-options)
|
||||
(push "-std=c++11" irony-additional-clang-options))
|
||||
(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)
|
||||
(@def-package irony-eldoc :after irony)
|
||||
|
||||
;; some c-mode dervied modes wrongfully trigger these hooks (like php-mode)
|
||||
(add-hook! (c-mode c++-mode objc-mode)
|
||||
(when (memq major-mode '(c-mode c++-mode objc-mode))
|
||||
(flycheck-mode +1)
|
||||
(irony-mode +1)
|
||||
(eldoc-mode +1)
|
||||
(irony-eldoc +1))))
|
||||
(@def-package flycheck-irony :after irony :config (flycheck-irony-setup))
|
||||
|
||||
(use-package disaster :commands (disaster))
|
||||
|
||||
;;
|
||||
(use-package cmake-mode
|
||||
;; Tools
|
||||
;;
|
||||
|
||||
(@def-package disaster :commands disaster)
|
||||
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
||||
(@def-package company-cmake :after cmake-mode)
|
||||
|
||||
(@def-package company-irony :after irony)
|
||||
|
||||
(@def-package company-irony-c-headers :after company-irony)
|
||||
|
||||
|
||||
;;
|
||||
;; Major modes
|
||||
;;
|
||||
|
||||
(@def-package cmake-mode
|
||||
:mode "CMakeLists\\.txt$"
|
||||
:config (def-company-backend! cmake-mode (cmake yasnippet)))
|
||||
:config
|
||||
(@set :company-backend 'cmake-mode '(company-cmake company-yasnippet)))
|
||||
|
||||
(use-package company-cmake :after cmake-mode)
|
||||
(@def-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'"))
|
||||
|
||||
(use-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'"))
|
||||
(@def-package cuda-mode :mode "\\.cuh?$")
|
||||
|
||||
(use-package cuda-mode :mode "\\.cuh?$")
|
||||
(@def-package opencl-mode :mode "\\.cl$")
|
||||
|
||||
(use-package opencl-mode :mode "\\.cl$")
|
||||
|
||||
(use-package demangle-mode
|
||||
(@def-package demangle-mode
|
||||
:commands demangle-mode
|
||||
:init (add-hook 'llvm-mode-hook 'demangle-mode))
|
||||
|
||||
(provide 'module-cc)
|
||||
;;; module-cc.el ends here
|
||||
|
|
19
modules/lang/cc/packages.el
Normal file
19
modules/lang/cc/packages.el
Normal file
|
@ -0,0 +1,19 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/cc/packages.el
|
||||
|
||||
(@package cmake-mode)
|
||||
(@package cuda-mode)
|
||||
(@package demangle-mode)
|
||||
(@package disaster)
|
||||
(@package glsl-mode)
|
||||
(@package irony)
|
||||
(@package irony-eldoc)
|
||||
(@package opencl-mode)
|
||||
(@package modern-cpp-font-lock)
|
||||
|
||||
(when (@featurep :feature syntax-checker)
|
||||
(@package flycheck-irony))
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-irony)
|
||||
(@package company-irony-c-headers))
|
48
modules/lang/cc/setup.sh
Executable file
48
modules/lang/cc/setup.sh
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
source VARS
|
||||
|
||||
#
|
||||
echo "Setting up C/C++ (irony-mode)"
|
||||
|
||||
case "$OSTYPE" in
|
||||
darwin*)
|
||||
brew install cmake
|
||||
brew install llvm --with-clang
|
||||
;;
|
||||
linux*)
|
||||
if is-arch; then
|
||||
sudo pacman --noconfirm --needed -S cmake clang
|
||||
elif is-deb; then
|
||||
echo "Not implemented"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Build irony-server
|
||||
git-repo "https://github.com/Sarcasm/irony-mode" "irony-mode"
|
||||
|
||||
# Reset build directory
|
||||
cd irony-mode/server
|
||||
[ -d build ] && rm -rf build
|
||||
mkdir build && cd build
|
||||
|
||||
DEST="$(pwd)/irony-mode/server/build/irony/"
|
||||
|
||||
# Compile
|
||||
if is-mac
|
||||
then
|
||||
cmake -DCMAKE_INSTALL_RPATH_USE_LINK_PATH\=ON \
|
||||
-DCMAKE_INSTALL_PREFIX\="$DEST" ../
|
||||
else
|
||||
cmake -DCMAKE_INSTALL_PREFIX\="$DEST" ../
|
||||
fi
|
||||
cmake --build . --use-stderr --config Release --target install
|
||||
|
||||
if is-mac
|
||||
then
|
||||
install_name_tool -change @rpath/libclang.dylib \
|
||||
/usr/local/opt/llvm/lib/libclang.dylib \
|
||||
$DEST/bin/irony-server
|
||||
fi
|
|
@ -1,16 +1,11 @@
|
|||
;;; module-crystal.el
|
||||
|
||||
(use-package crystal-mode
|
||||
(@def-package crystal-mode
|
||||
:mode "\\.cr$"
|
||||
:interpreter "crystal"
|
||||
:config
|
||||
(def-docset! crystal-mode "crystal")
|
||||
(after! quickrun
|
||||
(quickrun-add-command
|
||||
"crystal" '((:command . "crystal")
|
||||
(@set :eval 'crystal-mode
|
||||
'((:command . "crystal")
|
||||
(:exec . "%c %s")
|
||||
(:description . "Run Crystal script"))
|
||||
:mode 'crystal-mode)))
|
||||
(:description . "Run Crystal script"))))
|
||||
|
||||
(provide 'module-crystal)
|
||||
;;; module-crystal.el ends here
|
||||
|
|
5
modules/lang/crystal/packages.el
Normal file
5
modules/lang/crystal/packages.el
Normal file
|
@ -0,0 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/crystal/packages.el
|
||||
|
||||
(@package crystal-mode :recipe (:fetcher github :repo "dotmilk/emacs-crystal-mode"))
|
||||
|
|
@ -1,49 +1,49 @@
|
|||
;;; module-csharp.el --- -*- no-byte-compile: t; -*-
|
||||
;;; module-csharp.el
|
||||
|
||||
(use-package csharp-mode
|
||||
(@def-package csharp-mode
|
||||
:mode "\\.cs$"
|
||||
:init (add-hook 'csharp-mode-hook 'flycheck-mode))
|
||||
|
||||
(use-package shader-mode :mode "\\.shader$") ; unity shaders
|
||||
|
||||
(use-package omnisharp
|
||||
:commands (omnisharp-mode)
|
||||
(@def-package omnisharp
|
||||
:commands omnisharp-mode
|
||||
:preface
|
||||
(setq omnisharp-auto-complete-want-documentation nil
|
||||
omnisharp-server-executable-path (concat doom-ext-dir "/OmniSharp.exe"))
|
||||
omnisharp-server-executable-path (concat doom-local-dir "OmniSharp.exe"))
|
||||
:when (file-exists-p omnisharp-server-executable-path)
|
||||
:init (add-hook! csharp-mode '(eldoc-mode omnisharp-mode))
|
||||
:init
|
||||
(@add-hook csharp-mode '(eldoc-mode omnisharp-mode))
|
||||
:config
|
||||
(def-company-backend! csharp-mode (omnisharp))
|
||||
(map! :map omnisharp-mode-map
|
||||
"gd" 'omnisharp-go-to-definition
|
||||
(:localleader
|
||||
"tr" (λ! (omnisharp-unit-test "fixture"))
|
||||
"ts" (λ! (omnisharp-unit-test "single"))
|
||||
"ta" (λ! (omnisharp-unit-test "all"))))
|
||||
(@set :company-backend 'csharp-mode '(company-omnisharp))
|
||||
|
||||
;; Map all refactor commands (see emr)
|
||||
(mapc (lambda (x)
|
||||
(let ((command-name (car x))
|
||||
(title (cadr x)))
|
||||
(emr-declare-command
|
||||
(intern (format "omnisharp-%s" (symbol-name command-name)))
|
||||
:title title :modes 'omnisharp-mode)))
|
||||
'((find-usages "find usages")
|
||||
(find-implementations "find implementations")
|
||||
(fix-code-issue-at-point "fix code issue at point")
|
||||
(fix-usings "fix usings")
|
||||
(rename "rename")
|
||||
(current-type-information "current type information")
|
||||
(current-type-documentation "current type documentation")
|
||||
(navigate-to-current-file-member "navigate to current file member")
|
||||
(navigate-to-solution-member "navigate to solution member")
|
||||
(navigate-to-solution-file-then-file-member "navigate to solution file then member")
|
||||
(navigate-to-solution-file "navigate to solution file")
|
||||
(navigate-to-region "navigate to region")
|
||||
(show-last-auto-complete-result "last auto complete result")
|
||||
(show-overloads-at-point "show overloads at point")
|
||||
(recompile "recompile"))))
|
||||
(@map :map omnisharp-mode-map
|
||||
:n "gd" 'omnisharp-go-to-definition
|
||||
|
||||
:localleader
|
||||
:n "b" 'omnisharp-recompile
|
||||
|
||||
:prefix "r"
|
||||
:n "fu" 'omnisharp-find-usages
|
||||
:n "fi" 'omnisharp-find-implementations
|
||||
:n "i" 'omnisharp-fix-code-issue-at-point
|
||||
:n "u" 'omnisharp-fix-usings
|
||||
:n "r" 'omnisharp-rename
|
||||
:n "ti" 'omnisharp-current-type-information
|
||||
:n "td" 'omnisharp-current-type-documentation
|
||||
:n "gf" 'omnisharp-navigate-to-current-file-member
|
||||
:n "gm" 'omnisharp-navigate-to-solution-member
|
||||
:n "gM" 'omnisharp-navigate-to-solution-file-then-file-member
|
||||
:n "gF" 'omnisharp-navigate-to-solution-file
|
||||
:n "gr" 'omnisharp-navigate-to-region
|
||||
:n "a" 'omnisharp-show-last-auto-complete-result
|
||||
:n "o" 'omnisharp-show-overloads-at-point
|
||||
|
||||
:prefix "t"
|
||||
:n "tr" (@λ (omnisharp-unit-test "fixture"))
|
||||
:n "ts" (@λ (omnisharp-unit-test "single"))
|
||||
:n "ta" (@λ (omnisharp-unit-test "all"))))
|
||||
|
||||
|
||||
(@def-package shader-mode :mode "\\.shader$") ; unity shaders
|
||||
|
||||
(provide 'module-csharp)
|
||||
;;; module-csharp.el ends here
|
||||
|
|
7
modules/lang/csharp/packages.el
Normal file
7
modules/lang/csharp/packages.el
Normal file
|
@ -0,0 +1,7 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/csharp/packages.el
|
||||
|
||||
(@package csharp-mode)
|
||||
(@package omnisharp)
|
||||
(@package shader-mode)
|
||||
|
11
modules/lang/csharp/setup.sh
Executable file
11
modules/lang/csharp/setup.sh
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
source VARS
|
||||
|
||||
#
|
||||
echo "Setting up C# (omnisharp)"
|
||||
|
||||
git-repo "https://github.com/OmniSharp/omnisharp-server" omnisharp
|
||||
cd omnisharp && xbuild
|
||||
mv omnisharp/bin/Debug/OmniSharp.exe ./OmniSharp.exe
|
||||
rm -rf omnisharp
|
|
@ -1,52 +0,0 @@
|
|||
;;; module-css.el
|
||||
|
||||
(after! emr
|
||||
(emr-declare-command 'doom/css-toggle-inline-or-block
|
||||
:title "toggle inline/block"
|
||||
:modes '(css-mode less-css-mode scss-mode)
|
||||
:predicate (lambda () (not (use-region-p)))))
|
||||
|
||||
(sp-with-modes '(css-mode scss-mode less-css-mode stylus-mode)
|
||||
(sp-local-pair "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC"))))
|
||||
|
||||
(map! (:map* (css-mode-map scss-mode-map less-css-mode-map)
|
||||
:n "M-R" 'doom/web-refresh-browser)
|
||||
(:map* (css-mode-map scss-mode-map less-css-mode-map)
|
||||
:localleader :nv ";" 'doom/append-semicolon))
|
||||
|
||||
;; css & scss
|
||||
(use-package css-mode
|
||||
:mode (("\\.css$" . css-mode)
|
||||
("\\.scss$" . scss-mode))
|
||||
:init
|
||||
(add-hook! css-mode
|
||||
'(yas-minor-mode-on flycheck-mode rainbow-mode highlight-numbers-mode
|
||||
doom|counsel-css-imenu-setup))
|
||||
:config
|
||||
(def-company-backend! css-mode (css yasnippet))
|
||||
(push '("css" "scss" "sass" "less" "styl") projectile-other-file-alist)
|
||||
|
||||
(def-builder! scss-mode doom/scss-build)
|
||||
(def-company-backend! scss-mode (css yasnippet))
|
||||
(def-docset! scss-mode "sass,bourbon,compass,neat,css")
|
||||
(push '("scss" "css") projectile-other-file-alist))
|
||||
|
||||
(use-package sass-mode
|
||||
:mode "\\.sass$"
|
||||
:config
|
||||
(setq sass-command-options '("--style compressed"))
|
||||
(def-builder! sass-mode doom/sass-build)
|
||||
(def-company-backend! sass-mode (css yasnippet))
|
||||
(push '("sass" "css") projectile-other-file-alist))
|
||||
|
||||
(use-package less-css-mode
|
||||
:mode "\\.less$"
|
||||
:config (push '("less" "css") projectile-other-file-alist))
|
||||
|
||||
(use-package stylus-mode
|
||||
:mode "\\.styl$"
|
||||
:init (add-hook! stylus-mode '(yas-minor-mode-on flycheck-mode))
|
||||
:config (push '("styl" "css") projectile-other-file-alist))
|
||||
|
||||
(provide 'module-css)
|
||||
;;; module-css.el ends here
|
|
@ -1,40 +1,52 @@
|
|||
;;; module-data.el
|
||||
|
||||
(associate! conf-mode :match "/sxhkdrc$")
|
||||
(@associate conf-mode :match "/sxhkdrc$")
|
||||
|
||||
(associate! nxml-mode :match "\\.plist$")
|
||||
(after! nxml-mode
|
||||
(def-company-backend! nxml-mode (nxml yasnippet)))
|
||||
|
||||
(use-package toml-mode :mode "\\.toml$")
|
||||
|
||||
(use-package yaml-mode :mode "\\.ya?ml$"
|
||||
:config (def-electric! yaml-mode :chars (?\n ?\: ?\-)))
|
||||
|
||||
(use-package json-mode :mode "\\.js\\(on\\|[hl]int\\(rc\\)?\\)$"
|
||||
:config (def-electric! json-mode :chars (?\n ?: ?{ ?})))
|
||||
|
||||
(use-package vimrc-mode
|
||||
:mode ("/\\.?g?vimrc$" "\\.vim$" "/\\.vim/rc/.+$" "/\\.?vimperatorrc$" "\\.vimp$"))
|
||||
|
||||
(use-package dockerfile-mode :mode "/Dockerfile$"
|
||||
(@def-package nxml-mode
|
||||
:mode "\\.plist$"
|
||||
:config
|
||||
(def-docset! dockerfile-mode "docker")
|
||||
(def-builder! dockerfile-mode dockerfile-build-buffer "Dockerfile"))
|
||||
(@set :company-backend 'nxml-mode '(company-nxml company-yasnippet)))
|
||||
|
||||
|
||||
(@def-package toml-mode :mode "\\.toml$")
|
||||
|
||||
|
||||
(@def-package yaml-mode
|
||||
:mode "\\.ya?ml$"
|
||||
:config
|
||||
(@set :electric 'yaml-mode :chars ?\n ?\: ?\-))
|
||||
|
||||
|
||||
(@def-package json-mode :mode "\\.js\\(on\\|[hl]int\\(rc\\)?\\)$"
|
||||
:config
|
||||
(@set :electric 'json-mode :chars ?\n ?: ?{ ?}))
|
||||
|
||||
|
||||
(@def-package vimrc-mode
|
||||
:mode ("/\\.?g?vimrc$" "\\.vim$" "/\\.?vimperatorrc$" "\\.vimp$"))
|
||||
|
||||
|
||||
(@def-package dockerfile-mode
|
||||
:mode "/Dockerfile$"
|
||||
:config
|
||||
;; TODO
|
||||
(@set :build 'docker 'dockerfile-mode '+data-dockerfile-p '+data/dockerfile-build))
|
||||
|
||||
|
||||
;; For ROM hacking or debugging
|
||||
(use-package hexl-mode
|
||||
(@def-package hexl-mode
|
||||
:mode ("\\.hex$" "\\.nes$"))
|
||||
|
||||
|
||||
;;
|
||||
;; Frameworks
|
||||
;;
|
||||
(def-project-type! ansible-mode "ans"
|
||||
:modes (yaml-mode)
|
||||
:files ("roles/")
|
||||
(def-company-backend! ansible-mode (ansible)))
|
||||
(use-package company-ansible :commands (company-ansible))
|
||||
|
||||
(def-project-type! vagrant "vagrant"
|
||||
:files ("Vagrantfile"))
|
||||
;; (@def-project ansible-mode "ans"
|
||||
;; :modes (yaml-mode)
|
||||
;; :files ("roles/"))
|
||||
|
||||
;; (@def-project vagrant "vagrant"
|
||||
;; :files ("Vagrantfile"))
|
||||
|
||||
(provide 'module-data)
|
||||
;;; module-data.el ends here
|
||||
|
|
9
modules/lang/data/packages.el
Normal file
9
modules/lang/data/packages.el
Normal file
|
@ -0,0 +1,9 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/data/packages.el
|
||||
|
||||
(@package dockerfile-mode)
|
||||
(@package json-mode)
|
||||
(@package toml-mode)
|
||||
(@package vimrc-mode)
|
||||
(@package yaml-mode)
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
;;; lang/emacs-lisp/config.el
|
||||
|
||||
(@def-package elisp-mode
|
||||
(@def-package elisp-mode ; built-in
|
||||
:mode ("/Cask$" . emacs-lisp-mode)
|
||||
:init
|
||||
(@add-hook emacs-lisp-mode '(highlight-quoted-mode auto-compile-on-save-mode +emacs-lisp|hook))
|
||||
(add-hook 'emacs-lisp-mode-hook '+emacs-lisp|hook)
|
||||
|
||||
:config
|
||||
(@map :map emacs-lisp-mode-map
|
||||
:m "gd" '+emacs-lisp/find-function
|
||||
:leader :m "gd" '+emacs-lisp/find-function-other-window)
|
||||
:leader :m "gd" '+emacs-lisp/find-function-in-other-window)
|
||||
|
||||
;; Don't affect lisp indentation (only `tab-width')
|
||||
(setq editorconfig-indentation-alist
|
||||
|
@ -19,11 +19,15 @@
|
|||
(setq mode-name "Elisp") ; [pedantry intensifies]
|
||||
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
|
||||
|
||||
(eldoc-mode +1)
|
||||
(highlight-quoted-mode +1)
|
||||
(auto-compile-on-save-mode +1)
|
||||
|
||||
(font-lock-add-keywords
|
||||
nil `(;; Display "lambda" as λ
|
||||
("(\\(lambda\\)" (1 (ignore (compose-region (match-beginning 1) (match-end 1) ?λ 'decompose-region))))
|
||||
;; Highlight doom/module functions
|
||||
("\\(^\\|\\s-\\)(\\(\\(doom\\|\\+\\)[^) ]+\\)[) \n]" (2 font-lock-builtin-face))
|
||||
("\\(^\\|\\s-\\|,\\)(\\(\\(doom\\|\\+\\)[^) ]+\\)[) \n]" (2 font-lock-builtin-face))
|
||||
;; Highlight doom macros (no need, macros are fontified in emacs 25+)
|
||||
;; ("\\(^\\|\\s-\\)(\\(@[^) ]+\\)[) \n]" (2 font-lock-preprocessor-face append))
|
||||
))
|
||||
|
@ -38,20 +42,13 @@
|
|||
("Modes" "^\\s-*(define-\\(?:global\\(?:ized\\)?-minor\\|generic\\|minor\\)-mode +\\([^ ()\n]+\\)" 1)
|
||||
("Macros" "^\\s-*(\\(?:cl-\\)?def\\(?:ine-compile-macro\\|macro\\) +\\([^ )\n]+\\)" 1)
|
||||
("Inline Functions" "\\s-*(\\(?:cl-\\)?defsubst +\\([^ )\n]+\\)" 1)
|
||||
("Functions" "^\\-s*(\\(?:cl-\\)?def\\(?:un\\*?\\|method\\|generic\\) +\\([^ )\n]+\\)" 1)
|
||||
("Functions" "^\\s-*(\\(?:cl-\\)?def\\(?:un\\|un\\*\\|method\\|generic\\) +\\([^ )\n]+\\)" 1)
|
||||
("Variables" "^\\s-*(\\(def\\(?:c\\(?:onst\\(?:ant\\)?\\|ustom\\)\\|ine-symbol-macro\\|parameter\\)\\)\\s-+\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)" 2)
|
||||
("Variables" "^\\s-*(defvar\\(?:-local\\)?\\s-+\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)[[:space:]\n]+[^)]" 1)
|
||||
("Types" "^\\s-*(\\(cl-def\\(?:struct\\|type\\)\\|def\\(?:class\\|face\\|group\\|ine-\\(?:condition\\|error\\|widget\\)\\|package\\|struct\\|t\\(?:\\(?:hem\\|yp\\)e\\)\\)\\)\\s-+'?\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)" 2)
|
||||
))))
|
||||
|
||||
|
||||
(@after debug ;; elisp debugging
|
||||
(@map :map debugger-mode-map
|
||||
:n "RET" 'debug-help-follow
|
||||
:n "n" 'debugger-step-through
|
||||
:n "c" 'debugger-continue))
|
||||
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
|
|
@ -1,43 +1,37 @@
|
|||
;;; module-go.el
|
||||
;;; lang/go/config.el
|
||||
|
||||
(use-package go-mode
|
||||
(@def-package go-mode
|
||||
:mode "\\.go$"
|
||||
:interpreter "go"
|
||||
:init
|
||||
(add-hook 'go-mode-hook 'flycheck-mode)
|
||||
(add-hook! go-mode (add-hook 'before-save-hook 'gofmt-before-save))
|
||||
(@add-hook go-mode (add-hook 'before-save-hook 'gofmt-before-save))
|
||||
:config
|
||||
(def-builder! go-mode "go build")
|
||||
(def-company-backend! go-mode (go yasnippet))
|
||||
(def-repl! go-mode gorepl-run)
|
||||
(map! :map go-mode-map
|
||||
(@set :build 'go-build 'go-mode '+go/build)
|
||||
(@set :company-backend 'go-mode '(company-go company-yasnippet))
|
||||
(@set :repl 'go-mode 'gorepl-run)
|
||||
|
||||
(@map :map go-mode-map
|
||||
:n "gd" 'godef-jump
|
||||
(:leader :n "h" 'godef-describe)
|
||||
(:localleader
|
||||
:n "tr" 'doom:go-test-run-all
|
||||
:n "ta" 'doom:go-test-run-all
|
||||
:n "ts" 'doom:go-test-run-package))
|
||||
:n "k" 'godef-describe
|
||||
:prefix "r"
|
||||
:n "i" go-remove-unused-imports
|
||||
:nv "f" gofmt
|
||||
:prefix "t"
|
||||
:n "r" '+go/test-run-all
|
||||
:n "a" '+go/test-run-all
|
||||
:n "s" '+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 unused imports" nil)
|
||||
(gofmt "Format code" nil))))
|
||||
|
||||
(use-package go-eldoc :after go-mode
|
||||
(@def-package company-go :after go-mode)
|
||||
|
||||
|
||||
(@def-package go-eldoc
|
||||
:after go-mode
|
||||
:init (add-hook 'go-mode-hook 'go-eldoc-setup))
|
||||
|
||||
(use-package company-go :after go-mode)
|
||||
|
||||
(use-package gorepl-mode :commands (gorepl-run gorepl-run-load-current-file))
|
||||
(@def-package gorepl-mode
|
||||
:commands (gorepl-run gorepl-run-load-current-file))
|
||||
|
||||
(provide 'module-go)
|
||||
;;; module-go.el ends here
|
||||
|
|
8
modules/lang/go/packages.el
Normal file
8
modules/lang/go/packages.el
Normal file
|
@ -0,0 +1,8 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/go/packages.el
|
||||
|
||||
(@package go-eldoc)
|
||||
(@package go-mode)
|
||||
(@package gorepl-mode)
|
||||
(when (@featurep :completion company)
|
||||
(@package company-go))
|
|
@ -1,20 +1,20 @@
|
|||
;;; module-haskell.el
|
||||
|
||||
(use-package haskell
|
||||
(@def-package haskell
|
||||
:mode (("\\.hs$" . haskell-mode)
|
||||
("\\.ghci$" . ghci-script-mode)
|
||||
("\\.cabal$" . haskell-cabal-mode))
|
||||
:interpreter (("runghc" . haskell-mode)
|
||||
("runhaskell" . haskell-mode))
|
||||
:init (add-hook! haskell-mode '(interactive-haskell-mode flycheck-mode))
|
||||
:init
|
||||
(@add-hook haskell-mode '(interactive-haskell-mode flycheck-mode))
|
||||
:config
|
||||
(def-popup! "*debug:haskell*" :size 20)
|
||||
(def-repl! haskell-mode switch-to-haskell)
|
||||
(@set :popup "*debug:haskell*" :size 20)
|
||||
(@set :repl 'haskell-mode 'switch-to-haskell)
|
||||
(push ".hi" completion-ignored-extensions))
|
||||
|
||||
(use-package inf-haskell
|
||||
:commands (inferior-haskell-mode inf-haskell-mode switch-to-haskell)
|
||||
:config (map! :map inf-haskell-mode-map "ESC ESC" 'doom/popup-close))
|
||||
|
||||
(provide 'module-haskell)
|
||||
;;; module-haskell.el ends here
|
||||
(@def-package inf-haskell ; part of haskell
|
||||
:commands (inferior-haskell-mode inf-haskell-mode switch-to-haskell)
|
||||
:config (@map :map inf-haskell-mode-map "ESC ESC" 'doom/popup-close))
|
||||
|
||||
|
|
5
modules/lang/haskell/packages.el
Normal file
5
modules/lang/haskell/packages.el
Normal file
|
@ -0,0 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/haskell/packages.el
|
||||
|
||||
(@package haskell-mode)
|
||||
|
33
modules/lang/java/autoload.el
Normal file
33
modules/lang/java/autoload.el
Normal file
|
@ -0,0 +1,33 @@
|
|||
;;; lang/java/config.el
|
||||
|
||||
;; yasnippet defuns
|
||||
;;;###autoload
|
||||
(defun +java-android-mode-is-layout-file ()
|
||||
(and android-mode
|
||||
(eq major-mode 'nxml-mode)
|
||||
(string-equal (file-name-base (directory-file-name default-directory)) "layout")))
|
||||
|
||||
;;;###autoload
|
||||
(defun +java-android-mode-in-tags (&rest tags)
|
||||
(-contains? tags (android-mode-tag-name)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +java-android-mode-tag-name ()
|
||||
(save-excursion
|
||||
(let (beg end)
|
||||
(nxml-backward-up-element)
|
||||
(evil-forward-word-begin)
|
||||
(setq beg (point))
|
||||
(evil-forward-WORD-end)
|
||||
(setq end (1+ (point)))
|
||||
(buffer-substring-no-properties beg end))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +java|android-mode-maybe ()
|
||||
(let ((root (doom-project-root)))
|
||||
(when (or (doom-project-has-files "local.properties" root)
|
||||
(doom-project-has-files "AndroidManifest.xml" root)
|
||||
(doom-project-has-files "src/main/AndroidManifest.xml" root))
|
||||
(android-mode +1)
|
||||
(doom/set-build-command "./gradlew %s" "build.gradle"))))
|
||||
|
|
@ -1,37 +1,35 @@
|
|||
;;; module-java.el
|
||||
;;; lang/java/config.el
|
||||
|
||||
(use-package meghanada
|
||||
(@def-package meghanada
|
||||
:commands meghanada-mode
|
||||
:init
|
||||
(add-hook! java-mode '(meghanada-mode flycheck-mode))
|
||||
(@add-hook java-mode '(meghanada-mode flycheck-mode))
|
||||
:config
|
||||
(def-docset! java-mode "java,javafx,grails,groovy,playjava,spring,cvj,processing,javadoc")
|
||||
(def-builder! java-mode meghanada-compile-project)
|
||||
(@set :build 'compile-file 'java-mode 'meghanada-compile-file)
|
||||
(@set :build 'compile-project 'java-mode 'meghanada-compile-project)
|
||||
|
||||
(setq meghanada-server-install-dir (f-expand "meghanada-server" doom-ext-dir)
|
||||
(setq meghanada-server-install-dir (expand-file-name "meghanada-server" doom-cache-dir)
|
||||
meghanada-use-company t
|
||||
meghanada-use-flycheck t
|
||||
meghanada-use-auto-start t)
|
||||
|
||||
(unless (f-exists? (meghanada--locate-server-jar))
|
||||
(meghanada-install-server))
|
||||
(@map :map meghanada-mode-map :m "gd" 'meghanada-jump-declaration)
|
||||
|
||||
(map! :map meghanada-mode-map :m "gd" 'meghanada-jump-declaration))
|
||||
(unless (file-exists-p (meghanada--locate-server-jar))
|
||||
(meghanada-install-server)))
|
||||
|
||||
(use-package android-mode
|
||||
|
||||
(@def-package android-mode
|
||||
:commands android-mode
|
||||
:init
|
||||
(add-hook! (java-mode groovy-mode nxml-mode) 'doom|android-mode-enable-maybe)
|
||||
(@add-hook (java-mode groovy-mode nxml-mode) '+java|android-mode-maybe)
|
||||
:config
|
||||
(def-yas-mode! android-mode)
|
||||
(after! company-dict
|
||||
(push 'android-mode company-dict-minor-mode-list)))
|
||||
(@set :yas-minor-mode 'android-mode)
|
||||
(@set :company-dict-minor-mode 'android-mode))
|
||||
|
||||
(use-package groovy-mode
|
||||
:mode "\\.g\\(radle\\|vy\\|roovy\\)$"
|
||||
|
||||
(@def-package groovy-mode
|
||||
:mode "\\.g\\(radle\\|roovy\\)$"
|
||||
:config
|
||||
(after! quickrun
|
||||
(push '("\\.gvy$" . "groovy") quickrun-file-alist)))
|
||||
(@set :eval 'groovy-mode "groovy"))
|
||||
|
||||
(provide 'module-java)
|
||||
;;; module-java.el ends here
|
||||
|
|
7
modules/lang/java/packages.el
Normal file
7
modules/lang/java/packages.el
Normal file
|
@ -0,0 +1,7 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/java/packages.el
|
||||
|
||||
(@package meghanada)
|
||||
(@package android-mode)
|
||||
(@package groovy-mode)
|
||||
|
|
@ -165,12 +165,13 @@
|
|||
|
||||
"REACTIONS" "BODYPARTS_ALL" "RESOURCES_ALL" "COLORS_ALL"))
|
||||
|
||||
(project! screeps "screeps"
|
||||
:match "/screeps/.+$"
|
||||
:modes (nodejs-project-mode))
|
||||
;; TODO
|
||||
;; (@def-project screeps "screeps"
|
||||
;; :match "/screeps/.+$"
|
||||
;; :modes (nodejs-project-mode))
|
||||
|
||||
(@add-hook screeps-project-mode
|
||||
(when (eq major-mode 'js2-mode)
|
||||
(add-to-list 'flycheck-disabled-checkers 'javascript-jshint)
|
||||
(setq js2-additional-externs (append '("_") screeps-objects screeps-constants))))
|
||||
;; (@add-hook screeps-project-mode
|
||||
;; (when (eq major-mode 'js2-mode)
|
||||
;; (add-to-list 'flycheck-disabled-checkers 'javascript-jshint)
|
||||
;; (setq js2-additional-externs (append '("_") screeps-objects screeps-constants))))
|
||||
|
||||
|
|
21
modules/lang/javascript/autoload.el
Normal file
21
modules/lang/javascript/autoload.el
Normal file
|
@ -0,0 +1,21 @@
|
|||
;;; lang/javascript/autoload.el
|
||||
|
||||
;;;###autoload
|
||||
(defun +javascript/install ()
|
||||
"Installs NodeJS and tern."
|
||||
(interactive)
|
||||
(pcase (doom-system-os)
|
||||
('arch
|
||||
(unless (and (executable-find "node")
|
||||
(executable-find "npm"))
|
||||
(doom-sudo "pacman --needed --noconfirm -S nodejs npm")))
|
||||
('debian) ;; TODO
|
||||
('macos
|
||||
(unless (executable-find "node")
|
||||
(doom-sh "brew install node")))
|
||||
(_ (error "Not a supported OS")))
|
||||
(unless (executable-find "node")
|
||||
(error "node isn't installed, run `+javascript/install' again"))
|
||||
(unless (executable-find "tern")
|
||||
(sh "npm -g install tern")))
|
||||
|
|
@ -1,58 +1,84 @@
|
|||
;; lang/javascript/config.el
|
||||
|
||||
;; TODO (@load +screeps)
|
||||
|
||||
(@def-package js2-mode
|
||||
:mode "\\.js$"
|
||||
:interpreter "node"
|
||||
:init
|
||||
:config
|
||||
(setq js2-skip-preprocessor-directives t
|
||||
js2-highlight-external-variables nil
|
||||
js2-mode-show-parse-errors nil)
|
||||
|
||||
:config
|
||||
(@add-hook '(tern-mode flycheck-mode highlight-indent-guides-mode))
|
||||
;; Only way to conform switch-case indentation to editorconfig's config
|
||||
(@add-hook (setq js-switch-indent-offset js-indent-level))
|
||||
(@add-hook js2-mode '(tern-mode flycheck-mode highlight-indent-guides-mode))
|
||||
;; Conform switch-case indentation to editorconfig's config
|
||||
(@add-hook js2-mode (setq js-switch-indent-offset js-indent-level))
|
||||
|
||||
(@map :map js2-mode-map :localleader :nv ";" 'doom/append-semicolon)
|
||||
(@set :repl 'js2-mode 'nodejs-repl)
|
||||
|
||||
(@set :repl nodejs-repl)
|
||||
(@set :company-backends tern)
|
||||
(@set :electric-chars ?\} ?\) ?.)
|
||||
(@set :electric-words "||" "&&")
|
||||
(@set :emr
|
||||
(:v js2r-extract-function "extract function")
|
||||
(:v js2r-extract-method "extract method")
|
||||
(:v js2r-introduce-parameter "introduce parameter")
|
||||
(:n js2r-localize-parameter "localize parameter")
|
||||
(:n js2r-expand-object "expand object")
|
||||
(:n js2r-contract-object "contract object")
|
||||
(:n js2r-expand-function "expand function")
|
||||
(:n js2r-contract-function "contract function")
|
||||
(:n js2r-expand-array "expand array")
|
||||
(:n js2r-contract-array "contract array")
|
||||
(:n js2r-wrap-buffer-in-iife "wrap buffer in ii function")
|
||||
(:v js2r-inject-global-in-iife "inject global in ii function")
|
||||
(:n js2r-add-to-globals-annotation "add to globals annotation")
|
||||
(:v js2r-extract-var "extract variable")
|
||||
(:v js2r-inline-var "inline variable")
|
||||
(:n js2r-rename-var "rename variable")
|
||||
(:n js2r-var-to-this "var to this")
|
||||
(:n js2r-arguments-to-object "arguments to object")
|
||||
(:n js2r-ternary-to-if "ternary to if")
|
||||
(:n js2r-split-var-declaration "split var declaration")
|
||||
(:n js2r-split-string "split string")
|
||||
(:v js2r-unwrap "unwrap")
|
||||
(:nv js2r-log-this "log this")
|
||||
(:nv js2r-debug-this "debug this")
|
||||
(:n js2r-forward-slurp "forward slurp")
|
||||
(:n js2r-forward-barf "forward barf")))
|
||||
(@set :company-backend 'js2-mode '(company-tern))
|
||||
|
||||
(@def-package js2-refactor :after emr)
|
||||
(@set :electric 'js2-mode
|
||||
:chars ?\} ?\) ?.
|
||||
:words "||" "&&")
|
||||
|
||||
(@map :map js2-mode-map
|
||||
:localleader
|
||||
:nv ";" 'doom/append-semicolon
|
||||
|
||||
:prefix "r"
|
||||
:n "g" 'js2r-add-to-globals-annotation
|
||||
:n "ca" 'js2r-arguments-to-object
|
||||
:n "Xa" 'js2r-contract-array
|
||||
:n "Xf" 'js2r-contract-function
|
||||
:n "Xo" 'js2r-contract-object
|
||||
:nv "d" 'js2r-debug-this
|
||||
:n "xa" 'js2r-expand-array
|
||||
:n "xf" 'js2r-expand-function
|
||||
:n "xo" 'js2r-expand-object
|
||||
:v "ef" 'js2r-extract-function
|
||||
:v "em" 'js2r-extract-method
|
||||
:v "ev" 'js2r-extract-var
|
||||
:n "F" 'js2r-forward-barf
|
||||
:n "f" 'js2r-forward-slurp
|
||||
:v "ii" 'js2r-inject-global-in-iife
|
||||
:v "iv" 'js2r-inline-var
|
||||
:v "p" 'js2r-introduce-parameter
|
||||
:n "p" 'js2r-localize-parameter
|
||||
:nv "l" 'js2r-log-this
|
||||
:n "r" 'js2r-rename-var
|
||||
:n "ss" 'js2r-split-string
|
||||
:n "sv" 'js2r-split-var-declaration
|
||||
:n "ct" 'js2r-ternary-to-if
|
||||
:v "u" 'js2r-unwrap
|
||||
:n "t" 'js2r-var-to-this
|
||||
:n "ii" 'js2r-wrap-buffer-in-iife))
|
||||
|
||||
|
||||
(@def-package nodejs-repl :commands nodejs-repl)
|
||||
|
||||
|
||||
(@def-package js2-refactor
|
||||
:commands
|
||||
(js2r-extract-function js2r-extract-method js2r-introduce-parameter
|
||||
js2r-localize-parameter js2r-expand-object js2r-contract-object
|
||||
js2r-expand-function js2r-contract-function js2r-expand-array
|
||||
js2r-contract-array js2r-wrap-buffer-in-iife js2r-inject-global-in-iife
|
||||
js2r-add-to-globals-annotation js2r-extract-var js2r-inline-var
|
||||
js2r-rename-var js2r-var-to-this js2r-arguments-to-object js2r-ternary-to-if
|
||||
js2r-split-var-declaration js2r-split-string js2r-unwrap js2r-log-this
|
||||
js2r-debug-this js2r-forward-slurp js2r-forward-barf))
|
||||
|
||||
|
||||
(@def-package company-tern
|
||||
:when (featurep 'company)
|
||||
:commands company-tern
|
||||
:after tern)
|
||||
|
||||
(@def-package company-tern :commands company-tern :after tern)
|
||||
|
||||
(@def-package jsx-mode :mode "\\.jsx$")
|
||||
|
||||
|
||||
(@def-package coffee-mode
|
||||
:mode "\\.coffee$"
|
||||
:init (setq coffee-indent-like-python-mode t))
|
||||
|
@ -62,15 +88,15 @@
|
|||
;; Projects
|
||||
;;
|
||||
|
||||
(project! npm
|
||||
:modes (web-mode js2-mode)
|
||||
:files ("package.json")
|
||||
:config
|
||||
(let* ((project-path (doom-project-root))
|
||||
(hash (gethash project-path npm-conf))
|
||||
(package-file (expand-file-name "package.json" project-path))
|
||||
deps)
|
||||
(-when-let (json (and (not hash) (f-exists? package-file)
|
||||
(ignore-errors (json-read-file package-file))))
|
||||
(puthash project-path json npm-conf))))
|
||||
;; (project! npm
|
||||
;; :modes (web-mode js2-mode)
|
||||
;; :files ("package.json")
|
||||
;; :config
|
||||
;; (let* ((project-path (doom-project-root))
|
||||
;; (hash (gethash project-path npm-conf))
|
||||
;; (package-file (expand-file-name "package.json" project-path))
|
||||
;; deps)
|
||||
;; (when-let (json (and (not hash) (file-exists-p package-file)
|
||||
;; (ignore-errors (json-read-file package-file))))
|
||||
;; (puthash project-path json npm-conf))))
|
||||
|
||||
|
|
|
@ -2,9 +2,12 @@
|
|||
;;; lang/javascript/packages.el
|
||||
|
||||
(@package coffee-mode)
|
||||
(@package company-tern :needs +company)
|
||||
(@package js2-mode)
|
||||
(@package js2-refactor)
|
||||
(@package jsx-mode)
|
||||
(@package nodejs-repl)
|
||||
(@package tern)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-tern))
|
||||
|
||||
|
|
14
modules/lang/julia/autoload.el
Normal file
14
modules/lang/julia/autoload.el
Normal file
|
@ -0,0 +1,14 @@
|
|||
;;; lang/julia/autoload.el
|
||||
|
||||
;;;###autoload
|
||||
(defun +julia/repl ()
|
||||
"Run an inferior instance of `julia' inside Emacs."
|
||||
(interactive)
|
||||
(let ((buffer (get-buffer-create "*Julia*")))
|
||||
(unless (comint-check-proc "*Julia*")
|
||||
(apply #'make-comint-in-buffer "Julia" "*Julia*" julia-program julia-arguments))
|
||||
(pop-to-buffer buffer)
|
||||
(with-current-buffer buffer
|
||||
(inferior-julia-mode))))
|
||||
|
||||
|
|
@ -1,11 +1,8 @@
|
|||
;;; module-julia.el
|
||||
;;; lang/julia/config.el
|
||||
|
||||
(use-package julia-mode
|
||||
:mode "\\.jl$"
|
||||
:interpreter "julia"
|
||||
:config
|
||||
(def-docset! julia-mode "julia")
|
||||
(def-repl! julia-mode doom/julia-repl))
|
||||
(@set :repl 'julia-mode '+julia/repl))
|
||||
|
||||
(provide 'module-julia)
|
||||
;;; module-julia.el ends here
|
||||
|
|
5
modules/lang/julia/packages.el
Normal file
5
modules/lang/julia/packages.el
Normal file
|
@ -0,0 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/julia/packages.el
|
||||
|
||||
(@package julia-mode)
|
||||
|
|
@ -1,40 +1,61 @@
|
|||
;;; module-latex.el
|
||||
;;; lang/latex/config.el
|
||||
|
||||
(defvar doom-bibtex-dir "~/Dropbox/docs/biblio")
|
||||
;; TODO Test me
|
||||
|
||||
(use-package reftex
|
||||
:commands turn-on-reftex
|
||||
:init
|
||||
(setq reftex-plug-into-AUCTeX t
|
||||
reftex-ref-style-default-list '("Cleveref" "Hyperref" "Fancyref")
|
||||
reftex-default-bibliography
|
||||
`(,(expand-file-name "phys.bib" doom-bibtex-dir)))
|
||||
(add-hook! (LaTeX-mode latex-mode) 'turn-on-reftex))
|
||||
|
||||
(use-package helm-bibtex
|
||||
:commands helm-bibtex
|
||||
(defvar +latex-bibtex-dir "~/work/writing/biblio/"
|
||||
"Where bibtex files are kept.")
|
||||
|
||||
(defvar +latex-bibtex-default-file "default.bib"
|
||||
"TODO")
|
||||
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
||||
(@def-package auctex
|
||||
:mode ("\\.tex$" . LaTeX-mode)
|
||||
:init
|
||||
(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
|
||||
:config
|
||||
(setq TeX-auto-save t
|
||||
TeX-parse-self t
|
||||
bibtex-dialect 'biblatex
|
||||
bibtex-align-at-equal-sign t
|
||||
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 latex-mode) 'turn-on-auto-fill)
|
||||
TeX-source-correlate-start-server nil
|
||||
LaTeX-fill-break-at-separators nil)
|
||||
|
||||
(@add-hook LaTeX-mode '(LaTeX-math-mode TeX-source-correlate-mode))
|
||||
|
||||
(@set :company-backend 'LaTeX-mode '(company-auctex)))
|
||||
|
||||
(@def-package company-auctex)
|
||||
|
||||
|
||||
(@def-package bibtex ; built-in
|
||||
:config
|
||||
(setq helm-bibtex-bibliography
|
||||
(list (f-expand "phys.bib" doom-bibtex-dir))
|
||||
(setq bibtex-dialect 'biblatex
|
||||
bibtex-align-at-equal-sign t
|
||||
bibtex-text-indentation 20
|
||||
bibtex-completion-bibliography (list +latex-bibtex-default-file))
|
||||
|
||||
helm-bibtex-library-path
|
||||
(list (f-expand "phys-pdf" doom-bibtex-dir))
|
||||
(@map :map bibtex-mode-map
|
||||
"C-c \\" 'bibtex-fill-entry))
|
||||
|
||||
helm-bibtex-notes-path (f-expand "notes.org" doom-bibtex-dir)
|
||||
|
||||
helm-bibtex-pdf-open-function
|
||||
(lambda (fpath) (async-start-process "open-pdf" "/usr/bin/open" nil fpath))))
|
||||
(@def-package reftex ; built-in
|
||||
:commands turn-on-reftex
|
||||
:init
|
||||
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
|
||||
:config
|
||||
(setq reftex-plug-into-AUCTeX t
|
||||
reftex-default-bibliography (list +latex-bibtex-default-file))
|
||||
|
||||
(@map :map reftex-mode-map
|
||||
:leader :n ";" 'reftex-toc))
|
||||
|
||||
|
||||
(@def-package ivy-bibtex
|
||||
:commands ivy-bibtex)
|
||||
|
||||
(@def-package helm-bibtex
|
||||
:commands helm-bibtex)
|
||||
|
||||
(provide 'module-latex)
|
||||
;;; module-latex.el ends here
|
||||
|
|
12
modules/lang/latex/packages.el
Normal file
12
modules/lang/latex/packages.el
Normal file
|
@ -0,0 +1,12 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/latex/packages.el
|
||||
|
||||
(@package auctex)
|
||||
;; (@package auctex-latexmk)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-auctex))
|
||||
(when (@featurep :completion ivy)
|
||||
(@package ivy-bibtex))
|
||||
(when (@featurep :completion helm)
|
||||
(@package helm-bibtex))
|
9
modules/lang/lua/autoload.el
Normal file
9
modules/lang/lua/autoload.el
Normal file
|
@ -0,0 +1,9 @@
|
|||
;;; lang/lua/autoload.el
|
||||
|
||||
;;;###autoload
|
||||
(defun +lua/repl ()
|
||||
(interactive)
|
||||
(lua-start-process "lua" "lua")
|
||||
(pop-to-buffer lua-process-buffer))
|
||||
|
||||
|
|
@ -1,34 +1,40 @@
|
|||
;;; module-lua.el --- lua + Love2D
|
||||
;;; lang/lua/config.el --- lua + Love2D
|
||||
|
||||
(use-package lua-mode
|
||||
(@def-package lua-mode
|
||||
:mode "\\.lua$"
|
||||
:interpreter "lua"
|
||||
:init (add-hook 'lua-mode-hook 'flycheck-mode)
|
||||
:init
|
||||
(add-hook 'lua-mode-hook 'flycheck-mode)
|
||||
:config
|
||||
(def-company-backend! lua-mode (lua yasnippet))
|
||||
(def-electric! lua-mode :words ("else" "end"))
|
||||
(def-repl! lua-mode doom/inf-lua)
|
||||
(@set :company-backend 'lua-mode '(company-lua company-yasnippet))
|
||||
(@set :electric 'lua-mode :words "else" "end")
|
||||
(@set :repl 'lua-mode '+lua/repl)
|
||||
|
||||
;; sp's lua-specific rules are obnoxious, so we disable them
|
||||
(setq sp-pairs (delete (assq 'lua-mode sp-pairs) sp-pairs)))
|
||||
|
||||
(use-package company-lua :after lua-mode)
|
||||
|
||||
(use-package moonscript
|
||||
(@def-package company-lua
|
||||
:after lua-mode)
|
||||
|
||||
|
||||
(@def-package moonscript
|
||||
:mode ("\\.moon$" . moonscript-mode)
|
||||
:config
|
||||
(push '(moonscript-mode moonscript-indent-offset) editorconfig-indentation-alist))
|
||||
|
||||
|
||||
;;
|
||||
;; TODO Frameworks
|
||||
;;
|
||||
(def-project-type! love "♥"
|
||||
:modes (lua-mode markdown-mode json-mode)
|
||||
:files ("main.lua" "conf.lua")
|
||||
:build ("open -a love.app '%s'" "main.lua"))
|
||||
|
||||
(def-project-type! hammerspoon "hammer"
|
||||
:modes (lua-mode markdown-mode)
|
||||
:match "/\\.?hammerspoon/.+\\.lua$"
|
||||
:build "open hammerspoon://reload")
|
||||
;; (def-project-type! love "♥"
|
||||
;; :modes (lua-mode markdown-mode json-mode)
|
||||
;; :files ("main.lua" "conf.lua")
|
||||
;; :build ("open -a love.app '%s'" "main.lua"))
|
||||
|
||||
;; (def-project-type! hammerspoon "hammer"
|
||||
;; :modes (lua-mode markdown-mode)
|
||||
;; :match "/\\.?hammerspoon/.+\\.lua$"
|
||||
;; :build "open hammerspoon://reload")
|
||||
|
||||
(provide 'module-lua)
|
||||
;;; module-lua.el ends here
|
||||
|
|
9
modules/lang/lua/packages.el
Normal file
9
modules/lang/lua/packages.el
Normal file
|
@ -0,0 +1,9 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/lua/packages.el
|
||||
|
||||
(@package lua-mode)
|
||||
(@package moonscript)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-lua))
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
;;; lang/text/autoload.el
|
||||
;;; lang/markdown/autoload.el
|
||||
|
||||
;; Implement strike-through formatting
|
||||
(defvar +text--markdown-regex-del
|
||||
"\\(^\\|[^\\]\\)\\(\\(~\\{2\\}\\)\\([^ \n \\]\\|[^ \n ]\\(?:.\\|\n[^\n]\\)*?[^\\ ]\\)\\(\\3\\)\\)")
|
||||
|
||||
;;;###autoload
|
||||
(defun +text/markdown-insert-del ()
|
||||
(defun +markdown/insert-del ()
|
||||
"Surround region in github strike-through delimiters."
|
||||
(interactive)
|
||||
(let ((delim "~~"))
|
|
@ -1,4 +1,4 @@
|
|||
;;; lang/text/config.el
|
||||
;;; lang/markdown/config.el
|
||||
|
||||
(@def-package markdown-mode
|
||||
:mode ("\\.m\\(d\\|arkdown\\)$" "/README$"
|
||||
|
@ -11,6 +11,8 @@
|
|||
markdown-gfm-additional-languages '("sh"))
|
||||
|
||||
:config
|
||||
(@set :electric 'markdown-mode :chars "+" "#")
|
||||
|
||||
(@add-hook markdown-mode
|
||||
(auto-fill-mode +1)
|
||||
(setq line-spacing 2
|
||||
|
@ -20,33 +22,38 @@
|
|||
'(markdown-mode gfm-mode)
|
||||
"\`\`\`" "\`\`\`" :post-handlers '(("||\n" "RET")))
|
||||
|
||||
(@set :electric-chars "+" "#")
|
||||
(@map :map gfm-mode-map "`" 'self-insert-command)
|
||||
(@map :map markdown-mode-map
|
||||
(@map :map gfm-mode-map
|
||||
"`" 'self-insert-command
|
||||
|
||||
:map markdown-mode-map
|
||||
"<backspace>" nil
|
||||
"<M-left>" nil
|
||||
"<M-right>" nil
|
||||
"M-*" 'markdown-insert-list-item
|
||||
"M-b" 'markdown-insert-bold
|
||||
"M-i" 'markdown-insert-italic
|
||||
"M-`" '+text/markdown-insert-del
|
||||
"M-`" '+markdown/insert-del
|
||||
:m "gj" 'markdown-next-visible-heading
|
||||
:m "gk" 'markdown-previous-visible-heading
|
||||
;; Assumes you have a markdown renderer plugin in chrome
|
||||
:nv "M-r" (@λ (doom-open-with "Google Chrome"))
|
||||
:n "M-r" 'browse-url-of-file
|
||||
;; TODO: Make context sensitive
|
||||
:n "[p" 'markdown-promote
|
||||
:n "]p" 'markdown-demote
|
||||
:n "[l" 'markdown-next-link
|
||||
:n "]l" 'markdown-previous-link
|
||||
:n "gf" 'markdown-follow-thing-at-point
|
||||
:i "M--" 'markdown-insert-hr
|
||||
(:localleader
|
||||
:nv "o" 'markdown-open
|
||||
:nv "b" 'markdown-preview
|
||||
(:prefix "i"
|
||||
:nv "t" 'markdown-toc-generate-toc
|
||||
:nv "i" 'markdown-insert-image
|
||||
:nv "l" 'markdown-insert-link
|
||||
:nv "L" 'markdown-insert-reference-link-dwim
|
||||
:nv "b" 'markdown-preview)))
|
||||
:nv "L" 'markdown-insert-reference-link-dwim))))
|
||||
|
||||
|
||||
(@def-package markdown-toc
|
||||
:after markdown-mode)
|
||||
:commands markdown-toc-generate-toc)
|
||||
|
||||
|
||||
(@def-package rst ; built-in
|
||||
:mode ("\\.re?st$" . rst-mode)
|
||||
:config (@set :builder '(rst-mode rst-compile-pdf-preview)))
|
|
@ -1,5 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/text/packages.el
|
||||
;;; lang/markdown/packages.el
|
||||
|
||||
(@package markdown-mode)
|
||||
(@package markdown-toc)
|
|
@ -1,18 +1,14 @@
|
|||
;;; module-octave.el
|
||||
;;; lang/octave/config.el
|
||||
|
||||
(use-package octave
|
||||
;; built-in
|
||||
(@def-package octave
|
||||
:mode (("\\.m$" . octave-mode))
|
||||
:config
|
||||
;; (setq inferior-octave-program "/usr/local/bin/octave")
|
||||
)
|
||||
:commands (octave-mode run-octave)
|
||||
:config (@set :repl 'octave-mode 'run-octave))
|
||||
|
||||
;; (use-package ac-octave
|
||||
;; :config
|
||||
;; (add-hook! octave-mode
|
||||
;; (@add-hook octave-mode
|
||||
;; (require 'ac-octave)
|
||||
;; (setq ac-sources '(ac-source-octave))))
|
||||
|
||||
(use-package octave-inf :commands run-octave)
|
||||
|
||||
(provide 'module-octave)
|
||||
;;; module-octave.el ends here
|
||||
|
|
|
@ -1,24 +1,23 @@
|
|||
;;; module-php.el
|
||||
;;; lang/php/config.el
|
||||
|
||||
(use-package hack-mode
|
||||
:mode "\\.hh$"
|
||||
:config (def-company-backend! hack-mode (capf)))
|
||||
;; (@def-package hack-mode
|
||||
;; :mode "\\.hh$"
|
||||
;; :config
|
||||
;; (@set :company-backend 'hack-mode '(company-capf)))
|
||||
|
||||
(use-package php-mode
|
||||
|
||||
(@def-package php-mode
|
||||
:mode ("\\.php[s345]?$" "\\.inc$")
|
||||
:interpreter "php"
|
||||
:init
|
||||
(add-hook 'php-mode-hook 'flycheck-mode)
|
||||
(setq php-template-compatibility nil
|
||||
php-extras-eldoc-functions-file (concat doom-temp-dir "/php-extras-eldoc-functions"))
|
||||
|
||||
:config
|
||||
(def-repl! php-mode php-boris)
|
||||
(def-company-backend! php-mode '(php-extras-company company-yasnippet))
|
||||
(setq php-template-compatibility nil)
|
||||
|
||||
(map! :map php-mode-map (:localleader :nv ";" 'doom/append-semicolon))
|
||||
(@set :repl 'php-mode 'php-boris)
|
||||
(@set :company-bakend 'php-mode '(php-extras-company company-yasnippet))
|
||||
|
||||
(add-hook! php-mode (setq-local sp-max-pair-length 6))
|
||||
(@add-hook php-mode (setq-local sp-max-pair-length 6))
|
||||
|
||||
(sp-with-modes '(php-mode)
|
||||
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
|
||||
|
@ -27,14 +26,35 @@
|
|||
(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]"))))
|
||||
(sp-local-pair "<?php" "?>" :when '(("RET")) :post-handlers '("||\n[i]")))
|
||||
|
||||
(use-package php-extras
|
||||
(@map :map php-mode-map
|
||||
:localleader
|
||||
:nv ";" 'doom/append-semicolon
|
||||
|
||||
:prefix "r"
|
||||
:n "cv" 'php-refactor--convert-local-to-instance-variable
|
||||
:n "u" 'php-refactor--optimize-use
|
||||
:v "xm" 'php-refactor--extract-method
|
||||
:n "rv" 'php-refactor--rename-local-variable
|
||||
|
||||
:prefix "t"
|
||||
:n "r" 'phpunit-current-project
|
||||
:n "a" 'phpunit-current-class
|
||||
:n "s" 'phpunit-current-test))
|
||||
|
||||
|
||||
(@def-package php-extras
|
||||
:after php-mode
|
||||
:init (add-hook 'php-mode-hook 'eldoc-mode)
|
||||
:init
|
||||
(add-hook 'php-mode-hook 'eldoc-mode)
|
||||
:config
|
||||
(defun php-extras-company-setup ()) ;; company will set up itself
|
||||
;; Generate php-extras documentation and completion asynchronously
|
||||
(setq php-extras-eldoc-functions-file (concat doom-cache-dir "/php-extras-eldoc-functions"))
|
||||
|
||||
;; company will set up itself
|
||||
(advice-add 'php-extras-company-setup :override 'ignore)
|
||||
|
||||
;; Make expensive php-extras generation async
|
||||
(unless (file-exists-p (concat php-extras-eldoc-functions-file ".el"))
|
||||
(async-start `(lambda ()
|
||||
,(async-inject-variables "\\`\\(load-path\\|php-extras-eldoc-functions-file\\)$")
|
||||
|
@ -44,56 +64,39 @@
|
|||
(load (concat php-extras-eldoc-functions-file ".el"))
|
||||
(message "PHP eldoc updated!")))))
|
||||
|
||||
(use-package php-refactor-mode
|
||||
:after php-mode
|
||||
:init (add-hook 'php-mode-hook '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 phpunit
|
||||
:commands (phpunit-current-test phpunit-current-class phpunit-current-project)
|
||||
:config
|
||||
(map! :map php-mode-map
|
||||
(:localleader
|
||||
:n "tr" 'phpunit-current-project
|
||||
:n "ta" 'phpunit-current-class
|
||||
:n "ts" 'phpunit-current-test)))
|
||||
(@def-package php-refactor-mode
|
||||
:commands php-refactor-mode
|
||||
:init (add-hook 'php-mode-hook 'php-refactor-mode))
|
||||
|
||||
|
||||
(@def-package phpunit
|
||||
:commands (phpunit-current-test phpunit-current-class phpunit-current-project))
|
||||
|
||||
|
||||
(@def-package php-boris :commands php-boris)
|
||||
|
||||
(use-package php-boris :commands php-boris) ; PHP REPL
|
||||
|
||||
;;
|
||||
(def-project-type! laravel "laravel"
|
||||
:modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
|
||||
:files ("artisan" "server.php"))
|
||||
;; Projects
|
||||
;;
|
||||
|
||||
(defvar php-composer-conf (make-hash-table :test 'equal))
|
||||
(def-project-type! composer "composer"
|
||||
:modes (web-mode php-mode)
|
||||
:files ("composer.json")
|
||||
:when
|
||||
(lambda (&rest _)
|
||||
(let* ((project-path (doom/project-root))
|
||||
(hash (gethash project-path php-composer-conf))
|
||||
(package-file (f-expand "composer.json" project-path))
|
||||
deps)
|
||||
(awhen (and (not hash) (f-exists? package-file)
|
||||
(json-read-file package-file))
|
||||
(puthash project-path it php-composer-conf)))
|
||||
t))
|
||||
;; (@def-project laravel "laravel"
|
||||
;; :modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
|
||||
;; :files ("artisan" "server.php"))
|
||||
|
||||
;; (defvar php-composer-conf (make-hash-table :test 'equal))
|
||||
;; (@def-project composer "composer"
|
||||
;; :modes (web-mode php-mode)
|
||||
;; :files ("composer.json")
|
||||
;; :when
|
||||
;; (lambda (&rest _)
|
||||
;; (let* ((project-path (doom/project-root))
|
||||
;; (hash (gethash project-path php-composer-conf))
|
||||
;; (package-file (expand-file-name "composer.json" project-path))
|
||||
;; deps)
|
||||
;; (awhen (and (not hash) (file-exists-p package-file)
|
||||
;; (json-read-file package-file))
|
||||
;; (puthash project-path it php-composer-conf)))
|
||||
;; t))
|
||||
|
||||
(provide 'module-php)
|
||||
;;; module-php.el ends here
|
||||
|
|
13
modules/lang/php/packages.el
Normal file
13
modules/lang/php/packages.el
Normal file
|
@ -0,0 +1,13 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/php/packages.el
|
||||
|
||||
(@package php-boris)
|
||||
(@package php-extras :recipe (:fetcher github :repo "arnested/php-extras"))
|
||||
(@package php-mode)
|
||||
(@package php-refactor-mode)
|
||||
(@package phpunit)
|
||||
|
||||
;; (@package hack-mode
|
||||
;; :recipe
|
||||
;; (:fetcher url :url "https://raw.githubusercontent.com/facebook/hhvm/master/hphp/hack/editor-plugins/emacs/hack-mode.el"))
|
||||
|
|
@ -1,46 +1,39 @@
|
|||
;;; module-processing.el
|
||||
|
||||
(use-package processing-mode
|
||||
:when IS-MAC
|
||||
(@def-package processing-mode
|
||||
:commands (processing-mode processing-find-sketch)
|
||||
:mode "\\.pde$"
|
||||
:init (add-hook 'processing-compilation-mode-hook 'doom-hide-mode-line-mode)
|
||||
:init
|
||||
(add-hook 'processing-compilation-mode-hook 'doom-hide-modeline-mode)
|
||||
:config
|
||||
(def-builder! processing-mode processing-sketch-build)
|
||||
(def-popup! "*processing-compilation*" :align below :size 10 :noselect t)
|
||||
(@set :build 'build-sketch 'processing-mode 'processing-sketch-build)
|
||||
(@set :popup "*processing-compilation*" :size 10 :noselect t)
|
||||
(@set :eval 'processing-mode
|
||||
'((:command . ,processing-location)
|
||||
(:exec . (lambda () (format "--sketch=%s --output=%s --force --run"
|
||||
(doom/project-root) processing-output-dir)))
|
||||
(:description . "Run Processing sketch")))
|
||||
(@set :company-backend 'processing-mode
|
||||
'(company-keywords :with company-yasnippet company-dabbrev-code))
|
||||
|
||||
(setq processing-location "/usr/local/bin/processing-java"
|
||||
processing-application-dir "/Applications/Processing.app"
|
||||
processing-sketchbook-dir "~/Dropbox/work/pde"
|
||||
processing-output-dir "/tmp")
|
||||
|
||||
(map! :map processing-mode-map
|
||||
(@map :map processing-mode-map
|
||||
:nv "M-r" 'processing-sketch-run
|
||||
:m "gd" 'processing-find-in-reference
|
||||
:m "gF" 'processing-find-sketch
|
||||
(:localleader
|
||||
"e" 'processing-export-application
|
||||
"h" 'processing-open-reference
|
||||
"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"
|
||||
(doom/project-root) processing-output-dir)))
|
||||
(:description . "Run Processing sketch"))
|
||||
:mode 'processing-mode))
|
||||
:localleader
|
||||
:n "e" 'processing-export-application
|
||||
:n "h" 'processing-open-reference
|
||||
:n "e" 'processing-open-examples
|
||||
:n "o" 'processing-open-sketchbook)
|
||||
|
||||
(add-hook! processing-mode
|
||||
(setq-local company-backends '((company-keywords
|
||||
:with
|
||||
company-yasnippet
|
||||
company-dabbrev-code)))
|
||||
(make-local-variable 'company-keywords-alist)
|
||||
(add-to-list 'company-keywords-alist
|
||||
(@after company-keywords
|
||||
(nconc company-keywords-alist
|
||||
(cons 'processing-mode (append processing-functions
|
||||
processing-builtins
|
||||
processing-constants)))))
|
||||
|
||||
(provide 'module-processing)
|
||||
;;; module-processing.el ends here
|
||||
|
|
4
modules/lang/processing/packages.el
Normal file
4
modules/lang/processing/packages.el
Normal file
|
@ -0,0 +1,4 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/processing/packages.el
|
||||
|
||||
(@package processing-mode)
|
|
@ -1,12 +1,9 @@
|
|||
;;; module-python.el
|
||||
;;; lang/python/config.el
|
||||
|
||||
(use-package python
|
||||
:mode ("\\.py\\'" . python-mode)
|
||||
:interpreter ("python" . python-mode)
|
||||
(@def-package python
|
||||
:commands python-mode
|
||||
:init
|
||||
(setq-default
|
||||
python-environment-directory doom-temp-dir
|
||||
(setq python-environment-directory doom-cache-dir
|
||||
python-shell-interpreter "ipython"
|
||||
python-shell-interpreter-args "--deep-reload"
|
||||
python-shell-prompt-regexp "In \\[[0-9]+\\]: "
|
||||
|
@ -20,63 +17,57 @@
|
|||
(add-hook 'python-mode-hook 'flycheck-mode)
|
||||
|
||||
:config
|
||||
(def-company-backend! python-mode (anaconda))
|
||||
(def-repl! python-mode doom/inf-python)
|
||||
(def-version-cmd! python-mode "python --version 2>&1 | cut -d' ' -f2")
|
||||
(@set :repl 'python-mode '+python/repl)
|
||||
(define-key python-mode-map (kbd "DEL") nil)) ; interferes with smartparens
|
||||
|
||||
(use-package anaconda-mode
|
||||
|
||||
(@def-package anaconda-mode
|
||||
:after python
|
||||
:init
|
||||
(add-hook! python-mode '(anaconda-mode anaconda-eldoc-mode eldoc-mode))
|
||||
(setq anaconda-mode-installation-directory (concat doom-temp-dir "/anaconda/")
|
||||
(add-hook 'python-mode-hook 'anaconda-mode)
|
||||
(add-hook 'anaconda-mode-hook 'anaconda-eldoc-mode)
|
||||
(setq anaconda-mode-installation-directory (concat doom-cache-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)
|
||||
(@set :company-backend 'python-mode '(company-anaconda))
|
||||
|
||||
(@map :map anaconda-mode-map :m "gd" 'anaconda-mode-find-definitions
|
||||
:map anaconda-nav-mode-map :n [escape] 'anaconda-nav-quit)
|
||||
|
||||
(advice-add 'anaconda-mode-doc-buffer :after 'doom*anaconda-mode-doc-buffer))
|
||||
|
||||
(use-package company-anaconda
|
||||
(@def-package company-anaconda
|
||||
:after anaconda-mode
|
||||
: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))))
|
||||
(@set :emr 'python-mode
|
||||
'(:nv anaconda-mode-show-doc "view documentation")
|
||||
'(:nv anaconda-mode-find-assignments "find assignments")
|
||||
'(:nv anaconda-mode-find-definitions "find definitions")
|
||||
'(:nv anaconda-mode-find-file "find assignments")
|
||||
'(:n anaconda-mode-find-references "show usages")))
|
||||
|
||||
(use-package pip-requirements
|
||||
:mode ("/requirements.txt$" . pip-requirements-mode)
|
||||
:config (def-company-backend! pip-requirements-mode (capf)))
|
||||
|
||||
(use-package nose
|
||||
(@def-package pip-requirements
|
||||
:mode ("/requirements.txt$" . pip-requirements-mode))
|
||||
|
||||
|
||||
(@def-package nose
|
||||
:commands nose-mode
|
||||
:preface (defvar nose-mode-map (make-sparse-keymap))
|
||||
:init (associate! nose-mode :match "/test_.+\\.py$" :in (python-mode))
|
||||
:preface
|
||||
(defvar nose-mode-map (make-sparse-keymap))
|
||||
:init
|
||||
(@associate nose-mode :match "/test_.+\\.py$" :in (python-mode))
|
||||
:config
|
||||
(def-popup! "*nosetests*" :align below :size 0.4 :noselect t)
|
||||
(def-yas-mode! nose-mode)
|
||||
(map! :map nose-mode-map
|
||||
(:localleader
|
||||
(@set :popup "*nosetests*" :size 0.4 :noselect t)
|
||||
(@set :yas-minor-mode 'nose-mode)
|
||||
(@map :map nose-mode-map
|
||||
:localleader
|
||||
:n "tr" 'nosetests-again
|
||||
:n "ta" 'nosetests-all
|
||||
:n "ts" 'nosetests-one
|
||||
:n "tv" 'nosetests-module
|
||||
:n "tA" 'nosetests-pdb-all
|
||||
:n "tO" 'nosetests-pdb-one
|
||||
:n "tV" 'nosetests-pdb-module)))
|
||||
:n "tV" 'nosetests-pdb-module))
|
||||
|
||||
(provide 'module-python)
|
||||
;;; module-python.el ends here
|
||||
|
|
9
modules/lang/python/packages.el
Normal file
9
modules/lang/python/packages.el
Normal file
|
@ -0,0 +1,9 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/python/packages.el
|
||||
|
||||
(@package anaconda-mode)
|
||||
(@package nose)
|
||||
(@package pip-requirements)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-anaconda))
|
|
@ -1,52 +1,50 @@
|
|||
;;; module-ruby.el
|
||||
;;; lang/ruby/config.el
|
||||
|
||||
(use-package ruby-mode
|
||||
(@def-package ruby-mode
|
||||
:mode ("\\.rb$" "\\.rake$" "\\.gemspec$" "\\.?pryrc$"
|
||||
"/\\(Gem\\|Cap\\|Vagrant\\|Rake\\)file$")
|
||||
:interpreter "ruby"
|
||||
:init (add-hook 'ruby-mode-hook 'flycheck-mode)
|
||||
:init
|
||||
(add-hook 'ruby-mode-hook 'flycheck-mode)
|
||||
:config
|
||||
(def-builder! ruby-mode "rake %s" "Rakefile")
|
||||
(def-company-backend! ruby-mode (dabbrev-code))
|
||||
(def-electric! ruby-mode :words ("else" "end" "elseif"))
|
||||
(def-repl! ruby-mode inf-ruby)
|
||||
(def-version-cmd! ruby-mode "ruby --version | cut -d' ' -f2")
|
||||
(@set :build 'rake 'ruby-mode '+ruby/rake)
|
||||
(@set :company-backend 'ruby-mode '(company-dabbrev-code))
|
||||
(@set :electric 'ruby-mode :words "else" "end" "elseif")
|
||||
(@set :repl 'ruby-mode 'inf-ruby)
|
||||
(setq ruby-deep-indent-paren t)
|
||||
;; Don't interfere with my custom RET behavior
|
||||
(define-key ruby-mode-map [?\n] nil))
|
||||
(define-key ruby-mode-map [?\n] nil)
|
||||
|
||||
(@map :map ruby-mode-map
|
||||
:localleader
|
||||
:prefix "r"
|
||||
:desc "toggle block" :nv "b" 'ruby-toggle-block
|
||||
:desc "extract method" :nv "em" 'ruby-refactor-extract-to-method
|
||||
:desc "extract local variable" :nv "ev" 'ruby-refactor-extract-local-variable
|
||||
:desc "extract constant" :nv "ec" 'ruby-refactor-extract-constant
|
||||
:desc "add parameter" :nv "ad" 'ruby-refactor-add-parameter
|
||||
:desc "extract to let" :nv "el" 'ruby-refactor-extract-to-let
|
||||
:desc "convert post conditional" :nv "cc" 'ruby-refactor-convert-post-conditional))
|
||||
|
||||
|
||||
(@def-package ruby-refactor
|
||||
:commands
|
||||
(ruby-refactor-extract-to-method ruby-refactor-extract-local-variable
|
||||
ruby-refactor-extract-constant ruby-refactor-add-parameter
|
||||
ruby-refactor-extract-to-let ruby-refactor-convert-post-conditional))
|
||||
|
||||
(use-package ruby-refactor
|
||||
:after ruby-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 "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
|
||||
(@def-package yard-mode
|
||||
:commands yard-mode
|
||||
:init (add-hook 'ruby-mode-hook 'yard-mode))
|
||||
|
||||
(use-package rspec-mode
|
||||
|
||||
(@def-package rspec-mode
|
||||
:mode ("/\\.rspec$" . text-mode)
|
||||
:init
|
||||
(associate! rspec-mode :match "/\\.rspec$")
|
||||
(associate! rspec-mode :in (ruby-mode yaml-mode) :files ("spec/"))
|
||||
(@associate rspec-mode :match "/\\.rspec$")
|
||||
(@associate rspec-mode :in (ruby-mode yaml-mode) :files ("/spec/"))
|
||||
(defvar rspec-mode-verifiable-map (make-sparse-keymap))
|
||||
(defvar evilmi-ruby-match-tags
|
||||
'((("unless" "if") ("elsif" "else") "end")
|
||||
|
@ -56,23 +54,27 @@
|
|||
;; Rake
|
||||
(("task" "namespace") () "end")))
|
||||
:config
|
||||
(map! :map rspec-mode-map
|
||||
(:localleader
|
||||
(@map :map rspec-mode-map
|
||||
:localleader
|
||||
:n "tr" 'rspec-rerun
|
||||
:n "ta" 'rspec-verify-all
|
||||
:n "ts" 'rspec-verify-single
|
||||
:n "tv" 'rspec-verify)))
|
||||
:n "tv" 'rspec-verify))
|
||||
|
||||
(use-package inf-ruby
|
||||
|
||||
(@def-package inf-ruby
|
||||
:commands (inf-ruby inf-ruby-console-auto)
|
||||
:config (def-company-backend! inf-ruby-mode (inf-ruby)))
|
||||
:config
|
||||
(@set :company-backend 'inf-ruby-mode '(company-inf-ruby)))
|
||||
|
||||
(use-package company-inf-ruby :after inf-ruby)
|
||||
|
||||
(@def-package company-inf-ruby
|
||||
:after inf-ruby)
|
||||
|
||||
;;
|
||||
;; TODO Parse Rakefile for tasks
|
||||
(def-project-type! rake "rake"
|
||||
:files ("Rakefile"))
|
||||
;; TODO Frameworks
|
||||
;;
|
||||
|
||||
;; (@def-project rake "rake"
|
||||
;; :files ("Rakefile"))
|
||||
|
||||
(provide 'module-ruby)
|
||||
;;; module-ruby.el ends here
|
||||
|
|
10
modules/lang/ruby/packages.el
Normal file
10
modules/lang/ruby/packages.el
Normal file
|
@ -0,0 +1,10 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/ruby/packages.el
|
||||
|
||||
(@package inf-ruby)
|
||||
(@package rspec-mode)
|
||||
(@package ruby-refactor)
|
||||
(@package yard-mode)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-inf-ruby))
|
|
@ -1,25 +1,31 @@
|
|||
;;; module-rust.el
|
||||
|
||||
(use-package rust-mode
|
||||
(@def-package rust-mode
|
||||
:mode "\\.rs$"
|
||||
:init (add-hook 'rust-mode-hook 'flycheck-mode)
|
||||
:init
|
||||
(add-hook 'rust-mode-hook 'flycheck-mode)
|
||||
:config
|
||||
(def-builder! rust-mode "cargo run" "Cargo.toml")
|
||||
(def-builder! toml-mode "cargo run" "Cargo.toml"))
|
||||
(@set :build 'cargo-run '(rust-mode toml-mode)
|
||||
'+rust-is-cargo-project-p '+rust/cargo-run))
|
||||
|
||||
(use-package flycheck-rust
|
||||
:after rust-mode)
|
||||
|
||||
(defvar racer-cmd (concat doom-ext-dir "/racer"))
|
||||
(defvar racer-rust-src-path (concat doom-ext-dir "/rust/src/"))
|
||||
(use-package racer
|
||||
(defvar racer-cmd (concat doom-cache-dir "racer"))
|
||||
(defvar racer-rust-src-path (concat doom-cache-dir "rust/src/"))
|
||||
(@def-package racer
|
||||
:after rust-mode
|
||||
:when (f-exists? racer-cmd)
|
||||
:init (add-hook! rust-mode '(racer-mode eldoc-mode flycheck-rust-setup))
|
||||
:when (file-exists-p racer-cmd)
|
||||
:init
|
||||
(@add-hook rust-mode '(racer-mode eldoc-mode flycheck-rust-setup))
|
||||
:config
|
||||
;; TODO Unit test keybinds
|
||||
(def-company-backend! rust-mode (racer))
|
||||
(map! :map rust-mode-map :m "gd" 'racer-find-definition))
|
||||
(@set :company-backend 'rust-mode '(company-racer))
|
||||
(@map :map rust-mode-map :m "gd" 'racer-find-definition))
|
||||
|
||||
|
||||
(@def-package company-racer
|
||||
:after racer)
|
||||
|
||||
|
||||
(@def-package flycheck-rust
|
||||
:after rust-mode)
|
||||
|
||||
(provide 'module-rust)
|
||||
;;; module-rust.el ends here
|
||||
|
|
10
modules/lang/rust/packages.el
Normal file
10
modules/lang/rust/packages.el
Normal file
|
@ -0,0 +1,10 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/rust/packages.el
|
||||
|
||||
(@package racer)
|
||||
(@package rust-mode)
|
||||
|
||||
(when (@featurep :feature syntax-checker)
|
||||
(@package flycheck-rust))
|
||||
(when (@featurep :completion company)
|
||||
(@package company-racer))
|
25
modules/lang/rust/setup.sh
Executable file
25
modules/lang/rust/setup.sh
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
source VARS
|
||||
|
||||
#
|
||||
echo "Setting up Rust"
|
||||
|
||||
case "$OSTYPE" in
|
||||
darwin*)
|
||||
brew install rust
|
||||
;;
|
||||
linux*)
|
||||
if is-arch; then
|
||||
sudo pacman --noconfirm -S rust cargo
|
||||
elif is-deb; then
|
||||
echo ...
|
||||
exit 1
|
||||
fi
|
||||
esac
|
||||
|
||||
git-repo "https://github.com/rust-lang/rust.git" "rust"
|
||||
git-repo "https://github.com/phildawes/racer.git" "racer-src"
|
||||
|
||||
cd racer-src && cargo build --release
|
||||
mv racer-src/target/release/racer ./racer
|
|
@ -1,16 +1,18 @@
|
|||
;;; module-scala.el
|
||||
;;; lang/scala/config.el
|
||||
|
||||
(use-package scala-mode
|
||||
(@def-package scala-mode
|
||||
:mode "\\.s\\(cala\\|bt\\)$"
|
||||
:init (add-hook 'scala-mode-hook 'eldoc-mode)
|
||||
:config (def-company-backend! scala-mode '(ensime-company (company-yasnippet))))
|
||||
:init
|
||||
(add-hook 'scala-mode-hook 'eldoc-mode)
|
||||
:config
|
||||
(@set :company-backend 'scala-mode '(ensime-company (company-yasnippet))))
|
||||
|
||||
(use-package sbt-mode
|
||||
:after scala-mode)
|
||||
|
||||
(use-package ensime
|
||||
(@def-package sbt-mode :after scala-mode)
|
||||
|
||||
|
||||
(@def-package ensime
|
||||
:commands (ensime ensime-mode ensime-scala-mode-hook)
|
||||
:init (add-hook 'scala-mode-hook 'ensime-scala-mode-hook))
|
||||
:init
|
||||
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook))
|
||||
|
||||
(provide 'module-scala)
|
||||
;;; module-scala.el ends here
|
||||
|
|
6
modules/lang/scala/packages.el
Normal file
6
modules/lang/scala/packages.el
Normal file
|
@ -0,0 +1,6 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/scala/packages.el
|
||||
|
||||
(@package ensime)
|
||||
(@package sbt-mode)
|
||||
(@package scala-mode)
|
49
modules/lang/sh/autoload.el
Normal file
49
modules/lang/sh/autoload.el
Normal file
|
@ -0,0 +1,49 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/sh/config.el
|
||||
|
||||
(defvar sh-extra-font-lock--keywords
|
||||
`((+sh--match-var-in-double-quoted-string
|
||||
(2 font-lock-variable-name-face prepend))
|
||||
(,(concat
|
||||
"\\<"
|
||||
(regexp-opt '("sudo" "echo" "ls" "sleep" "tee" "cd" "cat" "service"))
|
||||
"\\>")
|
||||
(0 'font-lock-builtin-face))))
|
||||
|
||||
;;;###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) ?\")))
|
||||
|
||||
;;;###autoload
|
||||
(defun +sh--match-var-in-double-quoted-string (limit)
|
||||
"Search for variables in double-quoted strings bounded by LIMIT."
|
||||
(let (res)
|
||||
(while
|
||||
(and (setq res
|
||||
(re-search-forward
|
||||
"\\$\\({#?\\)?\\([[:alpha:]_][[:alnum:]_]*\\|[-#?@!]\\)"
|
||||
limit t))
|
||||
(not (+sh--in-double-quoted-string-p))))
|
||||
res))
|
||||
|
||||
;;;###autoload
|
||||
(defun +sh|extra-fontify ()
|
||||
"Activate sh-extra-font-lock."
|
||||
(interactive)
|
||||
(font-lock-add-keywords nil sh-extra-font-lock--keywords)
|
||||
(if (fboundp 'font-lock-flush)
|
||||
(font-lock-flush)
|
||||
(when font-lock-mode
|
||||
(with-no-warnings
|
||||
(font-lock-fontify-buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +sh/repl ()
|
||||
"Open a shell REPL."
|
||||
(let* ((dest-sh (symbol-name sh-shell))
|
||||
(sh-shell-file dest-sh))
|
||||
(sh-shell-process t)
|
||||
(with-current-buffer "*shell*"
|
||||
(rename-buffer (format "*shell [%s]*" dest-sh)))))
|
14
modules/lang/sh/boostrap.el
Normal file
14
modules/lang/sh/boostrap.el
Normal file
|
@ -0,0 +1,14 @@
|
|||
;;; lang/sh/boostrap.el
|
||||
|
||||
(bootstrap!
|
||||
:title "{z,ba}sh"
|
||||
:desc "Sets up the zshdb and bashdb debuggers, and shell-check"
|
||||
|
||||
:if-debian
|
||||
(sudo "apt-get update && apt-get install zshdb bashdb spellcheck")
|
||||
|
||||
:if-arch
|
||||
(sudo "pacman --noconfirm --needed -S zshdb bashdb shellcheck")
|
||||
|
||||
:if-macos
|
||||
(sh "brew install zshdb bashdb"))
|
|
@ -1,24 +1,26 @@
|
|||
;;; module-sh.el
|
||||
;;; lang/sh/config.el
|
||||
|
||||
(use-package sh-script
|
||||
:mode (("\\.\\(ba\\|z\\)sh$" . sh-mode)
|
||||
("/\\.?z\\(sh\\(/.*\\|$\\)\\|profile\\|log\\(in\\|out\\)\\|sh\\(rc\\|env\\)\\)$" . sh-mode)
|
||||
("/\\.?bash\\(/.*\\|rc\\|_profile\\)$" . sh-mode)
|
||||
("/\\.?xinitrc$" . sh-mode)
|
||||
(@def-package sh-script ; built-in
|
||||
:mode (("\\.zsh$" . sh-mode)
|
||||
("/bspwmrc$" . sh-mode))
|
||||
:init (add-hook! sh-mode '(flycheck-mode doom|sh-extra-font-lock-activate highlight-numbers-mode))
|
||||
:init
|
||||
(@add-hook sh-mode '(flycheck-mode highlight-numbers-mode +sh|extra-fontify))
|
||||
:config
|
||||
(def-company-backend! sh-mode (shell))
|
||||
(def-electric! sh-mode :words ("else" "elif" "fi" "done" "then" "do" "esac" ";;"))
|
||||
(def-repl! sh-mode doom/inf-shell)
|
||||
(@set :company-backend 'sh-mode '(company-shell))
|
||||
(@set :electric 'sh-mode :words "else" "elif" "fi" "done" "then" "do" "esac" ";;")
|
||||
(@set :repl 'sh-mode '+sh/repl)
|
||||
(setq sh-indent-after-continuation 'always)
|
||||
|
||||
;; [pedantry intensifies]
|
||||
(add-hook! sh-mode (setq mode-name "sh")))
|
||||
(@add-hook sh-mode (setq mode-name "sh"))
|
||||
|
||||
(use-package company-shell
|
||||
(defun +sh|detect-zsh ()
|
||||
(when (and buffer-file-name (string-match-p "\\.zsh\\'" buffer-file-name))
|
||||
(sh-set-shell "zsh")))
|
||||
(add-hook 'sh-mode-hook '+sh|detect-zsh))
|
||||
|
||||
|
||||
(@def-package company-shell
|
||||
:after sh-script
|
||||
:config (setq company-shell-delete-duplicates t))
|
||||
|
||||
(provide 'module-sh)
|
||||
;;; module-sh.el ends here
|
||||
|
|
5
modules/lang/sh/packages.el
Normal file
5
modules/lang/sh/packages.el
Normal file
|
@ -0,0 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/sh/packages.el
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-shell))
|
12
modules/lang/sh/setup.sh
Executable file
12
modules/lang/sh/setup.sh
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
source VARS
|
||||
|
||||
#
|
||||
echo "Setting up zsh/bash (zshdb, bashdb)"
|
||||
|
||||
if is-mac; then
|
||||
brew install zshdb bashdb
|
||||
elif is-arch; then
|
||||
sudo pacman --noconfirm -S zshdb bashdb
|
||||
fi
|
|
@ -1,17 +1,18 @@
|
|||
;;; module-swift.el
|
||||
;;; lang/swift/config.el
|
||||
|
||||
;; TODO Set up emacs task runners for fruitstrap
|
||||
(use-package swift-mode
|
||||
|
||||
(@def-package swift-mode
|
||||
:mode "\\.swift$"
|
||||
:init (add-hook 'swift-mode-hook 'flycheck-mode)
|
||||
:init
|
||||
(add-hook 'swift-mode-hook 'flycheck-mode)
|
||||
:config
|
||||
(def-company-backend! swift-mode (sourcekit yasnippet))
|
||||
(def-docset! swift-mode "swift")
|
||||
(def-repl! swift-mode swift-mode-run-repl) ; TODO test this
|
||||
(after! flycheck (push 'swift flycheck-checkers)))
|
||||
(@set :repl 'swift-mode 'swift-mode-run-repl) ; TODO test this
|
||||
(@after flycheck (push 'swift flycheck-checkers)))
|
||||
|
||||
(use-package company-sourcekit
|
||||
:after swift-mode)
|
||||
|
||||
(provide 'module-swift)
|
||||
;;; module-swift.el ends here
|
||||
(@def-package company-sourcekit
|
||||
:after swift-mode
|
||||
:config
|
||||
(@set :company-backend 'swift-mode '(company-sourcekit company-yasnippet)))
|
||||
|
||||
|
|
7
modules/lang/swift/packages.el
Normal file
7
modules/lang/swift/packages.el
Normal file
|
@ -0,0 +1,7 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/swift/packages.el
|
||||
|
||||
(@package swift-mode)
|
||||
|
||||
(when (@featurep :completion company)
|
||||
(@package company-sourcekit))
|
44
modules/lang/typescript/config.el
Normal file
44
modules/lang/typescript/config.el
Normal file
|
@ -0,0 +1,44 @@
|
|||
;;; lang/typescript/config.el
|
||||
|
||||
(@def-package typescript-mode
|
||||
:mode "\\.ts$"
|
||||
:init
|
||||
(add-hook 'typescript-mode-hook 'rainbow-delimiters-mode)
|
||||
:config
|
||||
(@set :company-backend 'typescript-mode '(company-tide))
|
||||
(@set :electric 'typescript-mode :chars ?\} ?\) :words "||" "&&")
|
||||
|
||||
;; TODO emr definitions for:
|
||||
;; + tide-jump-back
|
||||
;; + (tide-jump-to-definition t)
|
||||
(@set :emr 'typescript-mode
|
||||
'(tide-find-references "find usages")
|
||||
'(tide-rename-symbol "rename symbol")
|
||||
'(tide-jump-to-definition "jump to definition")
|
||||
'(tide-documentation-at-point "current type documentation")
|
||||
'(tide-restart-server "restart tide server"))
|
||||
|
||||
(defun +typescript|tide-setup ()
|
||||
(when (or (eq major-mode 'typescript-mode)
|
||||
(and (eq major-mode 'web-mode)
|
||||
buffer-file-name
|
||||
(string= (file-name-extension buffer-file-name) "tsx")))
|
||||
(tide-setup)
|
||||
(flycheck-mode +1)
|
||||
(eldoc-mode +1)))
|
||||
(@add-hook (typescript-mode web-mode) '+typescript|tide-setup)
|
||||
|
||||
(advice-add 'tide-project-root :override 'doom-project-root)
|
||||
|
||||
(@map :map typescript-mode-map
|
||||
:m "gd" 'tide-jump-to-definition
|
||||
:m "K" 'tide-documentation-at-point))
|
||||
|
||||
|
||||
(@def-package tide
|
||||
:after typescript-mode
|
||||
:config
|
||||
(setq tide-format-options
|
||||
'(:insertSpaceAfterFunctionKeywordForAnonymousFunctions t
|
||||
:placeOpenBraceOnNewLineForFunctions nil)))
|
||||
|
6
modules/lang/typescript/packages.el
Normal file
6
modules/lang/typescript/packages.el
Normal file
|
@ -0,0 +1,6 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/typescript/packages.el
|
||||
|
||||
(@package tide)
|
||||
(@package typescript-mode)
|
||||
|
47
modules/lang/web/+css.el
Normal file
47
modules/lang/web/+css.el
Normal file
|
@ -0,0 +1,47 @@
|
|||
;;; lang/web/+css.el
|
||||
|
||||
(sp-with-modes '(css-mode scss-mode less-css-mode stylus-mode)
|
||||
(sp-local-pair "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC"))))
|
||||
|
||||
(@map :map* (css-mode-map scss-mode-map less-css-mode-map)
|
||||
:n "M-R" '+css/web-refresh-browser
|
||||
:localleader
|
||||
:nv ";" '+css/append-semicolon
|
||||
:prefix "r"
|
||||
:n "b" '+css/toggle-inline-or-block)
|
||||
|
||||
|
||||
;;
|
||||
;; Packages
|
||||
;;
|
||||
|
||||
(@def-package css-mode
|
||||
:mode "\\.css$"
|
||||
:mode ("\\.scss$" . scss-mode)
|
||||
:init
|
||||
(@add-hook css-mode
|
||||
'(yas-minor-mode-on flycheck-mode rainbow-mode highlight-numbers-mode
|
||||
;; doom|counsel-css-imenu-setup
|
||||
))
|
||||
|
||||
:config
|
||||
(@set :company-backend '(css-mode scss-mode) '(company-css company-yasnippet))
|
||||
(@set :build 'scss 'scss-mode '+css/scss-build))
|
||||
|
||||
|
||||
(@def-package sass-mode
|
||||
:mode "\\.sass$"
|
||||
:config
|
||||
(setq sass-command-options '("--style compressed"))
|
||||
(@set :build 'sass 'sass-mode '+css/sass-build)
|
||||
(@set :company-backend 'sass-mode '(company-css company-yasnippet)))
|
||||
|
||||
|
||||
(@def-package less-css-mode
|
||||
:mode "\\.less$")
|
||||
|
||||
|
||||
(@def-package stylus-mode
|
||||
:mode "\\.styl$"
|
||||
:init (@add-hook stylus-mode '(yas-minor-mode-on flycheck-mode)))
|
||||
|
63
modules/lang/web/+html.el
Normal file
63
modules/lang/web/+html.el
Normal file
|
@ -0,0 +1,63 @@
|
|||
;;; lang/web/config.el
|
||||
|
||||
(@def-package web-mode
|
||||
:mode ("\\.p?html?$"
|
||||
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
|
||||
"\\.erb$"
|
||||
"\\.jsp$"
|
||||
"\\.as[cp]x$"
|
||||
"\\.mustache$"
|
||||
"\\.tsx$"
|
||||
"wp-content/themes/.+/.+\\.php$")
|
||||
:init
|
||||
(add-hook 'web-mode-hook 'turn-off-smartparens-mode)
|
||||
:config
|
||||
(@set :company-backend 'web-mode '(company-web-html company-yasnippet))
|
||||
(setq web-mode-enable-html-entities-fontification t)
|
||||
|
||||
;; Fix blank line numbers after unfolding
|
||||
(advice-add 'web-mode-fold-or-unfold :after 'nlinum--flush)
|
||||
|
||||
(@map :map web-mode-map
|
||||
(:localleader :n "t" 'web-mode-element-rename)
|
||||
"M-/" 'web-mode-comment-or-uncomment
|
||||
:i "SPC" 'self-insert-command
|
||||
:n "M-r" 'doom/web-refresh-browser
|
||||
:n "za" 'web-mode-fold-or-unfold
|
||||
:nv "]a" 'web-mode-attribute-next
|
||||
:nv "[a" 'web-mode-attribute-previous
|
||||
:nv "]t" 'web-mode-tag-next
|
||||
:nv "[t" 'web-mode-tag-previous
|
||||
:nv "]T" 'web-mode-element-child
|
||||
:nv "[T" 'web-mode-element-parent)
|
||||
|
||||
(@def-package company-web :after company))
|
||||
|
||||
|
||||
(@def-package haml-mode :mode "\\.haml$")
|
||||
|
||||
|
||||
(@def-package pug-mode
|
||||
:mode ("\\.jade$" "\\.pug$")
|
||||
:config
|
||||
(@set :company-backend 'pug-mode '(company-yasnippet))
|
||||
(@map :map pug-mode-map
|
||||
:i [tab] 'doom/dumb-indent
|
||||
:i [backtab] 'doom/dumb-dedent))
|
||||
|
||||
|
||||
;;
|
||||
;; Tools
|
||||
;;
|
||||
|
||||
(@def-package emmet-mode
|
||||
:commands emmet-mode
|
||||
:preface (defvar emmet-mode-keymap (make-sparse-keymap))
|
||||
:init
|
||||
(@add-hook (scss-mode web-mode html-mode haml-mode nxml-mode) 'emmet-mode)
|
||||
:config
|
||||
(setq emmet-move-cursor-between-quotes t)
|
||||
(@map :map emmet-mode-keymap
|
||||
:v "M-e" 'emmet-wrap-with-markup
|
||||
:i "M-e" 'emmet-expand-yas
|
||||
:i "M-E" 'emmet-expand-line))
|
7
modules/lang/web/autoload/css.el
Normal file
7
modules/lang/web/autoload/css.el
Normal file
|
@ -0,0 +1,7 @@
|
|||
;;; lang/web/+css.el
|
||||
|
||||
;;;###autoload
|
||||
(defun +css/scss-build ()) ; TODO
|
||||
|
||||
;;;###autoload
|
||||
(defun +css/sass-build ()) ; TODO
|
20
modules/lang/web/autoload/evil.el
Normal file
20
modules/lang/web/autoload/evil.el
Normal file
|
@ -0,0 +1,20 @@
|
|||
;;; lang/html/autoload/evil.el
|
||||
|
||||
;;;###autoload (autoload '+html:encode-html-entities "lang/html/autoload/evil" nil t)
|
||||
(evil-define-operator +html:encode-html-entities (beg end &optional input)
|
||||
"Encodes HTML entities in the selected region."
|
||||
(interactive "<r><a>")
|
||||
(cond (input
|
||||
(insert (+html-encode-entities input)))
|
||||
((and beg end)
|
||||
(+html/encode-entities-region beg end))))
|
||||
|
||||
;;;###autoload (autoload '+html:decode-html-entities "lang/html/autoload/evil" nil t)
|
||||
(evil-define-operator +html:decode-html-entities (beg end &optional input)
|
||||
"Decodes HTML entities in the selected region."
|
||||
(interactive "<r><a>")
|
||||
(cond (input
|
||||
(insert (+html-decode-entities input)))
|
||||
((and beg end)
|
||||
(+html/decode-entities-region beg end))))
|
||||
|
59
modules/lang/web/autoload/html.el
Normal file
59
modules/lang/web/autoload/html.el
Normal file
|
@ -0,0 +1,59 @@
|
|||
;;; lang/web/autoload/html.el
|
||||
|
||||
;;;###autoload
|
||||
(defvar +web-entities-list
|
||||
[[" " " "] [" " " "] [" " " "] [" " " "]
|
||||
["‏" ""] ["‎" ""] ["‍" ""] ["‌" ""]
|
||||
["¡" "¡"] ["¢" "¢"] ["£" "£"] ["¤" "¤"] ["¥" "¥"] ["¦" "¦"] ["§" "§"] ["¨" "¨"] ["©" "©"] ["ª" "ª"] ["«" "«"] ["¬" "¬"] ["­" ""] ["®" "®"] ["¯" "¯"] ["°" "°"] ["±" "±"] ["²" "²"] ["³" "³"] ["´" "´"] ["µ" "µ"] ["¶" "¶"] ["·" "·"] ["¸" "¸"] ["¹" "¹"] ["º" "º"] ["»" "»"] ["¼" "¼"] ["½" "½"] ["¾" "¾"] ["¿" "¿"]
|
||||
["À" "À"] ["Á" "Á"] ["Â" "Â"] ["Ã" "Ã"] ["Ä" "Ä"] ["Å" "Å"] ["Æ" "Æ"] ["Ç" "Ç"] ["È" "È"] ["É" "É"] ["Ê" "Ê"] ["Ë" "Ë"] ["Ì" "Ì"] ["Í" "Í"] ["Î" "Î"] ["Ï" "Ï"] ["Ð" "Ð"] ["Ñ" "Ñ"] ["Ò" "Ò"] ["Ó" "Ó"] ["Ô" "Ô"] ["Õ" "Õ"] ["Ö" "Ö"] ["×" "×"] ["Ø" "Ø"] ["Ù" "Ù"] ["Ú" "Ú"] ["Û" "Û"] ["Ü" "Ü"] ["Ý" "Ý"] ["Þ" "Þ"] ["ß" "ß"] ["à" "à"] ["á" "á"] ["â" "â"] ["ã" "ã"] ["ä" "ä"] ["å" "å"] ["æ" "æ"] ["ç" "ç"] ["è" "è"] ["é" "é"] ["ê" "ê"] ["ë" "ë"] ["ì" "ì"] ["í" "í"] ["î" "î"] ["ï" "ï"] ["ð" "ð"] ["ñ" "ñ"] ["ò" "ò"] ["ó" "ó"] ["ô" "ô"] ["õ" "õ"] ["ö" "ö"]
|
||||
["÷" "÷"] ["ø" "ø"] ["ù" "ù"] ["ú" "ú"] ["û" "û"] ["ü" "ü"] ["ý" "ý"] ["þ" "þ"] ["ÿ" "ÿ"] ["ƒ" "ƒ"]
|
||||
["Α" "Α"] ["Β" "Β"] ["Γ" "Γ"] ["Δ" "Δ"] ["Ε" "Ε"] ["Ζ" "Ζ"] ["Η" "Η"] ["Θ" "Θ"] ["Ι" "Ι"] ["Κ" "Κ"] ["Λ" "Λ"] ["Μ" "Μ"] ["Ν" "Ν"] ["Ξ" "Ξ"] ["Ο" "Ο"] ["Π" "Π"] ["Ρ" "Ρ"] ["Σ" "Σ"] ["Τ" "Τ"] ["Υ" "Υ"] ["Φ" "Φ"] ["Χ" "Χ"] ["Ψ" "Ψ"] ["Ω" "Ω"] ["α" "α"] ["β" "β"] ["γ" "γ"] ["δ" "δ"] ["ε" "ε"] ["ζ" "ζ"] ["η" "η"] ["θ" "θ"] ["ι" "ι"] ["κ" "κ"] ["λ" "λ"] ["μ" "μ"] ["ν" "ν"] ["ξ" "ξ"] ["ο" "ο"] ["π" "π"] ["ρ" "ρ"] ["ς" "ς"] ["σ" "σ"] ["τ" "τ"] ["υ" "υ"] ["φ" "φ"] ["χ" "χ"] ["ψ" "ψ"] ["ω" "ω"] ["ϑ" "ϑ"] ["ϒ" "ϒ"] ["ϖ" "ϖ"]
|
||||
["•" "•"] ["…" "…"] ["′" "′"] ["″" "″"] ["‾" "‾"] ["⁄" "⁄"] ["℘" "℘"] ["ℑ" "ℑ"] ["ℜ" "ℜ"] ["™" "™"] ["ℵ" "ℵ"] ["←" "←"] ["↑" "↑"] ["→" "→"] ["↓" "↓"] ["↔" "↔"] ["↵" "↵"] ["⇐" "⇐"] ["⇑" "⇑"] ["⇒" "⇒"] ["⇓" "⇓"] ["⇔" "⇔"] ["∀" "∀"] ["∂" "∂"] ["∃" "∃"] ["∅" "∅"] ["∇" "∇"] ["∈" "∈"] ["∉" "∉"] ["∋" "∋"] ["∏" "∏"] ["∑" "∑"] ["−" "−"] ["∗" "∗"] ["√" "√"] ["∝" "∝"] ["∞" "∞"] ["∠" "∠"] ["∧" "∧"] ["∨" "∨"] ["∩" "∩"] ["∪" "∪"] ["∫" "∫"] ["∴" "∴"] ["∼" "∼"] ["≅" "≅"] ["≈" "≈"] ["≠" "≠"] ["≡" "≡"] ["≤" "≤"] ["≥" "≥"] ["⊂" "⊂"] ["⊃" "⊃"] ["⊄" "⊄"] ["⊆" "⊆"] ["⊇" "⊇"] ["⊕" "⊕"] ["⊗" "⊗"] ["⊥" "⊥"] ["⋅" "⋅"] ["⌈" "⌈"] ["⌉" "⌉"] ["⌊" "⌊"] ["⌋" "⌋"] ["⟨" "〈"] ["⟩" "〉"] ["◊" "◊"] ["♠" "♠"] ["♣" "♣"] ["♥" "♥"] ["♦" "♦"] [""" "\""] ["Œ" "Œ"] ["œ" "œ"] ["Š" "Š"] ["š" "š"] ["Ÿ" "Ÿ"] ["ˆ" "ˆ"] ["˜" "˜"] ["–" "–"] ["—" "—"] ["‘" "‘"] ["’" "’"] ["‚" "‚"] ["“" "“"] ["”" "”"] ["„" "„"] ["†" "†"] ["‡" "‡"] ["‰" "‰"] ["‹" "‹"] ["›" "›"] ["€" "€"]]
|
||||
"A list of sequence string pairs, representing an html entity and its decoded
|
||||
character.")
|
||||
|
||||
(defun +web--entities-string (text &optional decode-p)
|
||||
"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))))
|
||||
(when (s-contains-p from text)
|
||||
(setq text (s-replace from to text)))))
|
||||
+web-entities-list)
|
||||
text)
|
||||
|
||||
(defun +web--entities-region (beg end &optional decode-p)
|
||||
"HTML encode/decode the selected region. Based on Xah's replace HTML named entities
|
||||
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))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +web-encode-entities (text)
|
||||
"TODO"
|
||||
(+web--entities-string text nil))
|
||||
|
||||
;;;###autoload
|
||||
(defun +web-decode-entities (text)
|
||||
"TODO"
|
||||
(+web--entities-string text t))
|
||||
|
||||
;;;###autoload
|
||||
(defun +web/encode-entities-region (beg end)
|
||||
"Encode HTML entities in region."
|
||||
(interactive "r")
|
||||
(+web--entities-region beg end))
|
||||
|
||||
;;;###autoload
|
||||
(defun +web/decode-entities-region (beg end)
|
||||
"Decode HTML entities in region."
|
||||
(interactive "r")
|
||||
(+web--entities-region beg end t))
|
|
@ -1,113 +1,50 @@
|
|||
;;; module-web.el
|
||||
;;; lang/web/config.el
|
||||
|
||||
(use-package haml-mode :mode "\\.haml$")
|
||||
|
||||
(use-package pug-mode
|
||||
:mode ("\\.jade$" "\\.pug$")
|
||||
:config
|
||||
(def-company-backend! pug-mode (yasnippet))
|
||||
(push '("jade" "html") projectile-other-file-alist)
|
||||
(push '("pug" "html") projectile-other-file-alist)
|
||||
(map! :map pug-mode-map
|
||||
:i [tab] 'doom/dumb-indent
|
||||
:i [backtab] 'doom/dumb-dedent))
|
||||
|
||||
(use-package web-mode
|
||||
:mode ("\\.p?html?$"
|
||||
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
|
||||
"\\.erb$"
|
||||
"\\.jsp$"
|
||||
"\\.as[cp]x$"
|
||||
"\\.mustache$"
|
||||
"\\.tsx$"
|
||||
"wp-content/themes/.+/.+\\.php$")
|
||||
:init
|
||||
(add-hook 'web-mode-hook 'turn-off-smartparens-mode)
|
||||
:config
|
||||
(def-company-backend! web-mode (web-html yasnippet))
|
||||
(setq web-mode-enable-html-entities-fontification t)
|
||||
(push '("html" "jade" "pug" "jsx" "tsx") projectile-other-file-alist)
|
||||
|
||||
(map! :map web-mode-map :i "SPC" 'self-insert-command)
|
||||
|
||||
(after! nlinum
|
||||
;; Fix blank line numbers after unfolding
|
||||
(advice-add 'web-mode-fold-or-unfold :after 'nlinum--flush))
|
||||
|
||||
(map! :map web-mode-map
|
||||
"M-/" 'web-mode-comment-or-uncomment
|
||||
:n "M-r" 'doom/web-refresh-browser
|
||||
:n "za" 'web-mode-fold-or-unfold
|
||||
(:localleader :n "t" 'web-mode-element-rename)
|
||||
:nv "]a" 'web-mode-attribute-next
|
||||
:nv "[a" 'web-mode-attribute-previous
|
||||
:nv "]t" 'web-mode-tag-next
|
||||
:nv "[t" 'web-mode-tag-previous
|
||||
:nv "]T" 'web-mode-element-child
|
||||
:nv "[T" 'web-mode-element-parent))
|
||||
(@load +html)
|
||||
(@load +css)
|
||||
|
||||
|
||||
;;
|
||||
;; Tools
|
||||
;; TODO Frameworks
|
||||
;;
|
||||
|
||||
(use-package emmet-mode
|
||||
:commands (emmet-mode)
|
||||
:init
|
||||
(add-hook! (scss-mode web-mode html-mode haml-mode nxml-mode) 'emmet-mode)
|
||||
(defvar emmet-mode-keymap (make-sparse-keymap))
|
||||
:config
|
||||
(setq emmet-move-cursor-between-quotes t)
|
||||
(map! :map emmet-mode-keymap
|
||||
:v "M-e" 'emmet-wrap-with-markup
|
||||
:i "M-e" 'emmet-expand-yas
|
||||
:i "M-E" 'emmet-expand-line))
|
||||
;; (defvar bower-conf (make-hash-table :test 'equal))
|
||||
;; (@def-project bower "bower"
|
||||
;; :modes (web-mode js-mode coffee-mode css-mode sass-mode pug-mode)
|
||||
;; :files ("bower.json")
|
||||
;; :when
|
||||
;; (lambda (&rest _)
|
||||
;; (let* ((project-path (doom-project-root))
|
||||
;; (hash (gethash project-path bower-conf))
|
||||
;; (package-file (f-expand "bower.json" project-path))
|
||||
;; deps)
|
||||
;; (awhen (and (not hash) (f-exists? package-file)
|
||||
;; (ignore-errors (json-read-file package-file)))
|
||||
;; (puthash project-path it bower-conf)))
|
||||
;; t))
|
||||
|
||||
;; (@def-project angularjs "angular"
|
||||
;; :modes (nodejs-project-mode bower-project-mode)
|
||||
;; :when
|
||||
;; (lambda (&rest _)
|
||||
;; (let* ((project (doom-project-root))
|
||||
;; (bower (gethash project bower-conf))
|
||||
;; (npm (gethash project npm-conf))
|
||||
;; (deps (append (cdr-safe (assq 'dependencies bower))
|
||||
;; (cdr-safe (assq 'dependencies npm))
|
||||
;; (cdr-safe (assq 'devDependencies bower))
|
||||
;; (cdr-safe (assq 'devDependencies npm)))))
|
||||
;; (assq 'angular deps))))
|
||||
|
||||
;;
|
||||
;; Project types
|
||||
;;
|
||||
;; (@def-project jekyll ":{"
|
||||
;; :modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
|
||||
;; :match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$"
|
||||
;; :files ("config.yml" "_layouts/")
|
||||
;; (@add-hook mode
|
||||
;; (when (eq major-mode 'web-mode)
|
||||
;; (web-mode-set-engine "django"))))
|
||||
|
||||
(defvar bower-conf (make-hash-table :test 'equal))
|
||||
(def-project-type! bower "bower"
|
||||
:modes (web-mode js-mode coffee-mode css-mode sass-mode pug-mode)
|
||||
:files ("bower.json")
|
||||
:when
|
||||
(lambda (&rest _)
|
||||
(let* ((project-path (doom/project-root))
|
||||
(hash (gethash project-path bower-conf))
|
||||
(package-file (f-expand "bower.json" project-path))
|
||||
deps)
|
||||
(awhen (and (not hash) (f-exists? package-file)
|
||||
(ignore-errors (json-read-file package-file)))
|
||||
(puthash project-path it bower-conf)))
|
||||
t))
|
||||
|
||||
(def-project-type! angularjs "angular"
|
||||
:modes (nodejs-project-mode bower-project-mode)
|
||||
:when
|
||||
(lambda (&rest _)
|
||||
(let* ((project (doom/project-root))
|
||||
(bower (gethash project bower-conf))
|
||||
(npm (gethash project npm-conf))
|
||||
(deps (append (cdr-safe (assq 'dependencies bower))
|
||||
(cdr-safe (assq 'dependencies npm))
|
||||
(cdr-safe (assq 'devDependencies bower))
|
||||
(cdr-safe (assq 'devDependencies npm)))))
|
||||
(assq 'angular deps))))
|
||||
|
||||
(def-project-type! jekyll ":{"
|
||||
:modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
|
||||
:match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$"
|
||||
:files ("config.yml" "_layouts/")
|
||||
(add-hook! mode
|
||||
(when (eq major-mode 'web-mode)
|
||||
(web-mode-set-engine "django"))))
|
||||
|
||||
(def-project-type! wordpress "wp"
|
||||
:modes (php-mode web-mode css-mode haml-mode pug-mode)
|
||||
:match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$"
|
||||
:files ("wp-config.php" "wp-content/"))
|
||||
|
||||
(provide 'module-web)
|
||||
;;; module-web.el ends here
|
||||
;; (@def-project wordpress "wp"
|
||||
;; :modes (php-mode web-mode css-mode haml-mode pug-mode)
|
||||
;; :match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$"
|
||||
;; :files ("wp-config.php" "wp-content/"))
|
||||
|
|
18
modules/lang/web/packages.el
Normal file
18
modules/lang/web/packages.el
Normal file
|
@ -0,0 +1,18 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/web/packages.el
|
||||
|
||||
;; config.el
|
||||
;; n/a
|
||||
|
||||
;; +html.el
|
||||
(@package company-web)
|
||||
(@package emmet-mode)
|
||||
(@package haml-mode)
|
||||
(@package pug-mode)
|
||||
(@package web-mode)
|
||||
|
||||
;; +css.el
|
||||
(@package less-css-mode)
|
||||
(@package sass-mode)
|
||||
(@package stylus-mode)
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue