core-lib: add auto-minor-mode, revise def-project-mode!

- Adds the auto-minor-mode package to replace our in-house
  implementation.
- Merges associate! into the def-project-mode! macro because associate!
  on its own is less useful than auto-minor-mode-alist,
  auto-minor-mode-magic-alist or hooks.
- Changes the semantics of :modes and :add-hooks properties of
  def-project-mode!. Its arguments are evaluated as is; lists will need
  to be quoted.

squash! core-lib: remove associate! macro
This commit is contained in:
Henrik Lissner 2019-07-21 14:49:09 +02:00
parent 3404899ec3
commit 0a84d2f0a9
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
15 changed files with 88 additions and 137 deletions

View file

@ -62,5 +62,5 @@
(add-to-list 'auto-mode-alist '("\\.shader$" . shader-mode))
(def-project-mode! +csharp-unity-mode
:modes (csharp-mode shader-mode)
:modes '(csharp-mode shader-mode)
:files (and "Assets" "Library/MonoManager.asset" "Library/ScriptMapper")))

View file

@ -38,3 +38,4 @@
(def-project-mode! +data-vagrant-mode
:files ("Vagrantfile"))

View file

@ -125,18 +125,16 @@ This marks a foldable marker for `outline-minor-mode' in elisp buffers.")
(advice-add 'helpful-update :after #'elisp-demos-advice-helpful-update))
(def-package! buttercup
:defer t
:minor ("/test[/-].+\\.el$" . buttercup-minor-mode)
:config (set-yas-minor-mode! 'buttercup-minor-mode))
;;
;;; Project modes
(def-project-mode! +emacs-lisp-ert-mode
:modes (emacs-lisp-mode)
:modes '(emacs-lisp-mode)
:match "/test[/-].+\\.el$"
:add-hooks (overseer-enable-mode))
(associate! buttercup-minor-mode
:modes (emacs-lisp-mode)
:match "/test[/-].+\\.el$")
(after! buttercup
(set-yas-minor-mode! 'buttercup-minor-mode))
:add-hooks '(overseer-enable-mode))

View file

@ -11,3 +11,5 @@
(when (featurep! :tools flycheck)
(package! flycheck-cask))
(package! buttercup)

View file

@ -250,9 +250,9 @@ to tide."
;;; Projects
(def-project-mode! +javascript-npm-mode
:modes (html-mode css-mode web-mode typescript-mode js2-mode rjsx-mode json-mode markdown-mode)
:modes '(html-mode css-mode web-mode typescript-mode js2-mode rjsx-mode json-mode markdown-mode)
:when (locate-dominating-file default-directory "package.json")
:add-hooks (+javascript|add-node-modules-path npm-mode))
:add-hooks '(+javascript|add-node-modules-path npm-mode))
(def-project-mode! +javascript-gulp-mode
:when (locate-dominating-file default-directory "gulpfile.js"))

View file

@ -34,7 +34,7 @@
;;; Frameworks
(def-project-mode! +lua-love-mode
:modes (moonscript-mode lua-mode markdown-mode json-mode)
:modes '(moonscript-mode lua-mode markdown-mode json-mode)
:when #'+lua-love-project-root
:on-load
(progn

View file

@ -96,10 +96,9 @@
;; Projects
(def-project-mode! +php-laravel-mode
:modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
:modes '(php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
:files (and "artisan" "server.php"))
(def-project-mode! +php-composer-mode
:modes (web-mode php-mode)
:modes '(web-mode php-mode)
:files ("composer.json"))

View file

@ -109,7 +109,7 @@ called.")
(def-package! nose
:commands nose-mode
:preface (defvar nose-mode-map (make-sparse-keymap))
:init (associate! nose-mode :match "/test_.+\\.py$" :modes (python-mode))
:minor-mode ("/test_.+\\.py$" . nose-mode)
:config
(set-popup-rule! "^\\*nosetests" :size 0.4 :select nil)
(set-yas-minor-mode! 'nose-mode)

View file

@ -22,7 +22,7 @@
;; Framework-based minor-modes
(def-project-mode! +web-jekyll-mode
:modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
:modes '(web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
:files (and (or "_config.yml" "_config.toml")
(or "_layouts/" "_posts/"))
:on-enter
@ -30,18 +30,18 @@
(web-mode-set-engine "django")))
(def-project-mode! +web-wordpress-mode
:modes (php-mode web-mode css-mode haml-mode pug-mode)
:modes '(php-mode web-mode css-mode haml-mode pug-mode)
:files (or "wp-config.php" "wp-config-sample.php"))
(when (featurep! :lang javascript)
(def-project-mode! +web-angularjs-mode
:modes (+javascript-npm-mode)
:modes '(+javascript-npm-mode)
:when (+javascript-npm-dep-p 'angular))
(def-project-mode! +web-react-mode
:modes (+javascript-npm-mode)
:modes '(+javascript-npm-mode)
:when (+javascript-npm-dep-p 'react))
(def-project-mode! +web-phaser-mode
:modes (+javascript-npm-mode)
:modes '(+javascript-npm-mode)
:when (+javascript-npm-dep-p '(or phaser phaser-ce))))

View file

@ -20,6 +20,6 @@
:mode "\\.j2$")
(def-project-mode! +ansible-yaml-mode
:modes (yaml-mode)
:add-hooks (ansible ansible-auto-decrypt-encrypt ansible-doc-mode)
:modes '(yaml-mode)
:add-hooks '(ansible ansible-auto-decrypt-encrypt ansible-doc-mode)
:files ("roles/"))