Skip to content

Commit

Permalink
Add :meow-state keyword for use-package declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
Olivia5k committed Oct 16, 2022
1 parent d180d47 commit c88a359
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
15 changes: 15 additions & 0 deletions CUSTOMIZATIONS.org
Original file line number Diff line number Diff line change
Expand Up @@ -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.
53 changes: 53 additions & 0 deletions meow-use-package.el
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions meow.el
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit c88a359

Please sign in to comment.