2017-06-08 11:47:56 +02:00
|
|
|
;;; feature/file-templates/config.el -*- lexical-binding: t; -*-
|
2017-02-11 07:00:31 -05:00
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(require! :feature snippets)
|
2017-02-11 07:00:31 -05:00
|
|
|
|
2017-02-19 18:44:26 -05:00
|
|
|
(defvar +file-templates-dir
|
|
|
|
(expand-file-name "templates/" (file-name-directory load-file-name))
|
2017-09-24 17:05:42 +02:00
|
|
|
"The path to a directory of yasnippet folders to use for file templates.")
|
2017-02-11 07:00:31 -05:00
|
|
|
|
2018-03-02 22:31:23 -05:00
|
|
|
(def-setting! :file-template (regexp trigger mode &optional project-only-p)
|
|
|
|
"Register a file template (associated with TRIGGER, the uuid of the target
|
|
|
|
snippet) for empty files that match REGEXP in MODE (a major mode symbol).
|
|
|
|
|
|
|
|
If PROJECT-ONLY-P is non-nil, the template won't be expanded if the buffer isn't
|
|
|
|
in a project."
|
|
|
|
`(+file-templates-add (list ,regexp ,trigger ,mode ,project-only-p)))
|
|
|
|
|
2017-12-27 18:19:33 -05:00
|
|
|
|
|
|
|
;;
|
|
|
|
;; Plugins
|
|
|
|
;;
|
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(def-package! autoinsert ; built-in
|
2018-02-20 02:16:07 -05:00
|
|
|
:commands (auto-insert-mode auto-insert)
|
2017-02-11 07:00:31 -05:00
|
|
|
:init
|
|
|
|
(setq auto-insert-query nil ; Don't prompt before insertion
|
|
|
|
auto-insert-alist nil) ; Tabula rasa
|
2018-02-20 02:16:07 -05:00
|
|
|
|
2017-10-23 20:07:54 +02:00
|
|
|
(after! yasnippet
|
|
|
|
(push '+file-templates-dir yas-snippet-dirs))
|
2017-02-11 07:00:31 -05:00
|
|
|
|
2018-02-20 02:16:07 -05:00
|
|
|
;; load autoinsert as late as possible
|
|
|
|
(defun +file-templates|init ()
|
|
|
|
(and (not buffer-read-only)
|
|
|
|
(bobp) (eobp)
|
|
|
|
(remove-hook 'find-file-hook #'+file-templates|init)
|
|
|
|
(auto-insert)))
|
|
|
|
(add-hook 'find-file-hook #'+file-templates|init)
|
|
|
|
|
2017-02-11 07:00:31 -05:00
|
|
|
:config
|
|
|
|
(auto-insert-mode 1)
|
|
|
|
|
|
|
|
(defun +file-templates--expand (key &optional mode project-only)
|
2017-12-27 18:19:33 -05:00
|
|
|
"Auto insert a yasnippet snippet into the blank file."
|
2017-02-11 07:00:31 -05:00
|
|
|
(when (if project-only (doom-project-p) t)
|
|
|
|
(require 'yasnippet)
|
2017-12-27 18:19:33 -05:00
|
|
|
(unless yas-minor-mode
|
|
|
|
(yas-minor-mode-on))
|
2017-02-28 17:58:52 -05:00
|
|
|
(when (and yas-minor-mode
|
2018-01-01 16:11:00 -05:00
|
|
|
(yas-expand-snippet
|
|
|
|
(yas--template-content
|
|
|
|
(cl-find key (yas--all-templates (yas--get-snippet-tables mode))
|
|
|
|
:key #'yas--template-key :test #'equal)))
|
2017-03-02 01:04:35 -05:00
|
|
|
(and (featurep 'evil) evil-mode)
|
|
|
|
(and yas--active-field-overlay
|
|
|
|
(overlay-buffer yas--active-field-overlay)
|
|
|
|
(overlay-get yas--active-field-overlay 'yas--field)))
|
2017-02-28 17:58:52 -05:00
|
|
|
(evil-initialize-state 'insert))))
|
2017-02-19 18:44:26 -05:00
|
|
|
|
2017-06-08 11:47:56 +02:00
|
|
|
(defun +file-templates-add (args)
|
2017-10-28 18:06:47 +02:00
|
|
|
(cl-destructuring-bind (regexp trigger &optional mode project-only-p) args
|
2018-02-20 02:16:07 -05:00
|
|
|
(push `(,regexp . (lambda () (+file-templates--expand ,trigger ',mode ,project-only-p)))
|
|
|
|
auto-insert-alist)))
|
2017-02-19 18:44:26 -05:00
|
|
|
|
2018-02-20 02:16:07 -05:00
|
|
|
(mapc #'+file-templates-add
|
2018-03-23 17:15:31 -04:00
|
|
|
(let ((doom (concat "/" (regexp-opt '(".emacs.d" ".doom.d" "doom-emacs" ".config/doom")) "/")))
|
2018-02-20 02:16:07 -05:00
|
|
|
`(;; General
|
|
|
|
("/\\.gitignore$" "__" gitignore-mode)
|
|
|
|
("/Dockerfile$" "__" dockerfile-mode)
|
|
|
|
("/docker-compose.yml$" "__" yaml-mode)
|
|
|
|
("/Makefile$" "__" makefile-gmake-mode)
|
|
|
|
;; elisp
|
|
|
|
("\\.el$" "__initfile" emacs-lisp-mode)
|
|
|
|
("/.dir-locals.el$" nil)
|
|
|
|
("-test\\.el$" "__" emacs-ert-mode)
|
2018-03-23 17:15:31 -04:00
|
|
|
(,(concat doom ".+\\.el$") "__doom-module" emacs-lisp-mode)
|
|
|
|
(,(concat doom ".*/packages\\.el$") "__doom-packages" emacs-lisp-mode)
|
|
|
|
(,(concat doom ".*/test/.+\\.el$") "__doom-test" emacs-lisp-mode)
|
2018-02-20 02:16:07 -05:00
|
|
|
(snippet-mode "__" snippet-mode)
|
2018-02-17 19:15:13 -05:00
|
|
|
;; C/C++
|
|
|
|
("\\.h$" "__h" c-mode)
|
|
|
|
("\\.c$" "__c" c-mode)
|
|
|
|
("\\.h\\(h\\|pp|xx\\)$" "__hpp" c++-mode)
|
|
|
|
("\\.\\(cc\\|cpp\\)$" "__cpp" c++-mode)
|
|
|
|
("/main\\.\\(cc\\|cpp\\)$" "__main.cpp" c++-mode)
|
|
|
|
("/win32_\\.\\(cc\\|cpp\\)$" "__winmain.cpp" c++-mode)
|
2018-02-20 02:16:07 -05:00
|
|
|
;; go
|
2018-02-17 19:15:13 -05:00
|
|
|
("\\.go$" "__.go" go-mode)
|
|
|
|
("/main\\.go$" "__main.go" go-mode t)
|
2018-02-20 02:16:07 -05:00
|
|
|
;; web-mode
|
2018-02-17 19:15:13 -05:00
|
|
|
("\\.html$" "__.html" web-mode)
|
2018-02-20 02:16:07 -05:00
|
|
|
("\\.scss$" "__" scss-mode)
|
|
|
|
("/master\\.scss$" "__master.scss" scss-mode)
|
|
|
|
("/normalize\\.scss$" "__normalize.scss" scss-mode)
|
2018-02-17 19:15:13 -05:00
|
|
|
;; java
|
2018-02-20 02:16:07 -05:00
|
|
|
("/src/.+\\.java$" "__" java-mode)
|
2018-02-17 19:15:13 -05:00
|
|
|
("/main\\.java$" "__main" java-mode)
|
|
|
|
("/build\\.gradle$" "__build.gradle" android-mode)
|
2018-02-20 02:16:07 -05:00
|
|
|
;; javascript
|
2018-02-17 19:15:13 -05:00
|
|
|
("\\.\\(json\\|jshintrc\\)$" "__" json-mode)
|
|
|
|
("/package\\.json$" "__package.json" json-mode)
|
|
|
|
("/bower\\.json$" "__bower.json" json-mode)
|
|
|
|
("/gulpfile\\.js$" "__gulpfile.js" js-mode)
|
|
|
|
("/webpack\\.config\\.js$" "__webpack.config.js" js-mode)
|
|
|
|
;; Lua
|
|
|
|
("/main\\.lua$" "__main.lua" love-mode)
|
|
|
|
("/conf\\.lua$" "__conf.lua" love-mode)
|
|
|
|
;; Markdown
|
|
|
|
("\\.md$" "__" markdown-mode)
|
|
|
|
;; Org
|
|
|
|
("\\.org$" "__" org-mode)
|
|
|
|
(,(concat doom "/README\\.org$") "__doom-readme" org-mode)
|
|
|
|
;; PHP
|
|
|
|
("\\.php$" "__" php-mode)
|
|
|
|
("\\.class\\.php$" "__.class.php" php-mode)
|
|
|
|
;; Python
|
|
|
|
;;("tests?/test_.+\\.py$" "__" nose-mode)
|
|
|
|
;;("/setup\\.py$" "__setup.py" python-mode)
|
|
|
|
("\\.py$" "__" python-mode)
|
|
|
|
;; Ruby
|
|
|
|
("\\.rb$" "__" ruby-mode)
|
|
|
|
("/Rakefile$" "__Rakefile" ruby-mode t)
|
|
|
|
("/Gemfile$" "__Gemfile" ruby-mode t)
|
|
|
|
("/\\.rspec$" "__.rspec" rspec-mode)
|
|
|
|
("\\.gemspec$" "__.gemspec" ruby-mode t)
|
|
|
|
("/spec_helper\\.rb$" "__helper" rspec-mode t)
|
|
|
|
("/lib/.+\\.rb$" "__module" ruby-mode t)
|
|
|
|
("_spec\\.rb$" "__" rspec-mode t)
|
|
|
|
;; Rust
|
|
|
|
("/main\\.rs$" "__main.rs" rust-mode)
|
|
|
|
("/Cargo.toml$" "__Cargo.toml" rust-mode)
|
|
|
|
;; Slim
|
|
|
|
("/\\(index\\|main\\)\\.slim$" "__" slim-mode)
|
|
|
|
;; Shell scripts
|
|
|
|
("\\.z?sh$" "__" sh-mode)
|
|
|
|
("\\.fish$" "__" fish-mode)
|
|
|
|
("\\.zunit$" "__zunit" sh-mode)))))
|