Compare commits

...

6 Commits

Author SHA1 Message Date
Case Duckworth 578c540e12 Fix quoting bugs (merge) 2021-09-07 18:25:10 -05:00
Case Duckworth 782d8c8c78 Signal wrong arguments instead of erroring 2021-09-07 18:24:37 -05:00
Case Duckworth db53b9008f Change arity of define-repeat-map--map-commands
I changed the actual function's arity earlier ... oops.
2021-09-07 18:22:50 -05:00
Case Duckworth f50f0d84e0 Fix typo 2021-09-07 18:22:43 -05:00
Case Duckworth ad22b9a7e8 Rewrite documentation for `checkdoc`
Thanks, u/nv-elisp!
2021-09-07 18:21:48 -05:00
Case Duckworth 5cbc08b864 Fix typo
Thanks u/nv-elisp :)
2021-09-07 18:10:08 -05:00
2 changed files with 22 additions and 25 deletions

View File

@ -90,7 +90,7 @@ installation method.
I use `straight.el`:
```lisp
(straight-get-package
(straight-use-package
'(define-repeat-map
:host nil
:repo "https://tildegit.org/acdw/define-repeat-map.el"))

View File

@ -4,7 +4,7 @@
;; Author: Case Duckworth <acdw@acdw.net>
;; Keywords: convenience
;; URL:
;; URL: https://tildegit.org/acdw/define-repeat-map.el/
;;; License:
@ -24,11 +24,11 @@
;;; Code:
(defun define-repeat-map--make-alias (cmd map)
"Internal. Make an alias for CMD in repeat-map MAP."
"Internal. Make an alias for CMD in `repeat-map' MAP."
(intern (concat (symbol-name cmd) "|"
(symbol-name map))))
(defun define-repeat-map--map-commands (map fn args)
(defun define-repeat-map--map-commands (fn args)
"Internal. Map FN over ARGS, whch are commands in MAP."
(let (res)
(dolist (arg args)
@ -37,9 +37,9 @@
(reverse res)))
(defun define-repeat-map--define-keys (map fn args)
"Internal. Map `define-key' over ARGS, transorming them with FN."
"Internal. Map `define-key' in MAP over ARGS, transorming them with FN."
(unless (zerop (mod (length args) 2))
(error "Wrong number of args"))
(signal 'wrong-number-of-arguments (length args)))
(let (res)
(while args
(let ((key (pop args))
@ -49,24 +49,24 @@
(reverse res)))
;;;###autoload
(defmacro define-repeat-map (name &rest args)
"Define a repeat-map, NAME-repeat-map, and bind keys to it.
Each ARG is a list of lists containing keybind definitions of
the form (KEY DEFINITION) KEY is anything `kbd' can recognize,
and DEFINITION is passed directly to `define-key'.
(defmacro define-repeat-map (name &rest keys)
"Define a `repeat-map', NAME -repeat-map, and bind KEYS to it.
Each ARG is a list of lists containing keybind definitions of
the form (KEY DEFINITION) KEY is anything `kbd' can recognize,
and DEFINITION is passed directly to `define-key'.
Optionally, the car of an arglist can contain the following
symbols, which changes the behavior of the key definitions in the
rest of the list:
Optionally, the car of an arglist can contain the following
symbols, which changes the behavior of the key definitions in the
rest of the list:
:enter - Provided commands can enter the repeat-map, but aren't
bound in the map. They need to be bound elsewhere, however.
:enter - Provided commands can enter the `repeat-map', but aren't
bound in the map. They need to be bound elsewhere, however.
:exit - Keys are bound in the repeat-map, but can't enter the
map. Their invocation exits the repeat-map.
:exit - Keys are bound in the `repeat-map', but can't enter the
map. Their invocation exits the `repeat-map'.
:continue - Keys are bound in the repeat-map, but can't enter the
map. However, their invocations keep the repeat-map active."
:continue - Keys are bound in the `repeat-map', but can't enter the
map. However, their invocations keep the `repeat-map' active."
(declare (indent 1))
(let ((define-repeat-map--result)
(map (intern (concat (symbol-name name) "-repeat-map"))))
@ -75,14 +75,13 @@
"Defined by `define-repeat-map'.")
define-repeat-map--result)
;; Iterate through ARGS
(dolist (arg args)
;; Iterate through KEYS
(dolist (arg keys)
(pcase (car arg)
(:enter
;; Add the map to the commands' repeat-map property.
(push `(progn
,@(define-repeat-map--map-commands
`,map
(lambda (cmd) `(put ',cmd 'repeat-map ',map))
(cdr arg)))
define-repeat-map--result))
@ -103,7 +102,6 @@
(lambda (cmd) (define-repeat-map--make-alias cmd map))
(cdr arg))
,@(define-repeat-map--map-commands
`,map
(lambda (cmd)
(let ((alias (define-repeat-map--make-alias cmd map)))
`(progn
@ -120,7 +118,6 @@
(push `(progn
,@(define-repeat-map--define-keys `,map #'identity arg)
,@(define-repeat-map--map-commands
`,map
(lambda (cmd) `(put ',cmd 'repeat-map ',map))
arg))
define-repeat-map--result))))