diff --git a/CUSTOMIZATIONS.org b/CUSTOMIZATIONS.org index 376cdd2..9619f7e 100644 --- a/CUSTOMIZATIONS.org +++ b/CUSTOMIZATIONS.org @@ -358,3 +358,18 @@ change the variable =meow-cursor-type-insert=. Association list of symbols to their corresponding keymaps. Used to generate =meow-*-define-key= helpers. + +* Integration to other packages +** :meow-state use-package keyword + +Simple keyword ~:meow-state~ added to [[https://github.com/jwiegley/use-package][use-package]] declarations. Used to help +populate ~meow-mode-state-list~, as follows: + +#+begin_src emacs-lisp +(use-package sly + :meow-state ((sly-inspector-mode . motion) + (sly-db-mode . motion))) +#+end_src + +The above would make the ~sly-inspector~ and ~sly-db~ modes start in Meow's +~motion~ state. diff --git a/meow-use-package.el b/meow-use-package.el new file mode 100644 index 0000000..58c2544 --- /dev/null +++ b/meow-use-package.el @@ -0,0 +1,53 @@ +;;; meow-use-package.el --- use-package keywords for Meow -*- lexical-binding: t; -*- + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License +;; as published by the Free Software Foundation; either version 3 +;; of the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: +;; Add keywords to be used in `use-package' declarations. +;; - :meow-state +;; Can be used to populate `meow-mode-state-list' in the same manner as +;; setting up hooks with the :hook keyword. For example: + +;; (use-package sly +;; :meow-state ((sly-inspector-mode . motion) +;; (sly-db-mode . motion))) + +;; The above would make the `sly-inspector' and `sly-db' modes start in Meow's +;; motion state. + +;;; Code: + +(require 'cl) +(require 'use-package) + +;;;; :meow-state keyword + +(add-to-list 'use-package-keywords ':meow-state 'append) + +;; We re-use the normalize method from :hook. This way we get the parsing of +;; both a single cons, and a list of several. +(defalias 'use-package-normalize/:meow-state #'use-package-normalize/:hook) + +(defun use-package-handler/:meow-state (name-symbol keyword args rest state) + (use-package-concat + (use-package-process-keywords name-symbol rest state) + `(,@(cl-loop for arg in args + collect `(add-to-list 'meow-mode-state-list (quote ,arg)))))) + +(provide 'meow-use-package) +;;; meow-use-package.el ends here diff --git a/meow.el b/meow.el index 297170b..5da18a6 100644 --- a/meow.el +++ b/meow.el @@ -41,6 +41,8 @@ (require 'meow-core) (require 'meow-cheatsheet) (require 'meow-tutor) +(when (fboundp #'use-package) + (require 'meow-use-package)) (provide 'meow) ;;; meow.el ends here