diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index c590703..973aeab 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -35,26 +35,34 @@ (define-key map (kbd key) fn)) -(defun -defkey-evil (map key fn) - "Set the given KEY on key map MAP to FN." - (define-key map (kbd key) fn)) +(defun -defkey-evil (map state-keys fn) + "Set the given STATE-KEYS on key map MAP to FN." + (let ((normal-key (plist-get state-keys :normal)) + (visual-key (plist-get state-keys :visual)) + (insert-key (plist-get state-keys :insert)) + (emacs-key (plist-get state-keys :emacs))) + (cond + ((not (null normal-key)) (evil-define-key 'normal map (kbd normal-key) fn)) + ((not (null visual-key)) (evil-define-key 'visual map (kbd visual-key) fn)) + ((not (null insert-key)) (evil-define-key 'insert map (kbd insert-key) fn)) + ((not (null emacs-key)) (evil-define-key 'emacs map (kbd emacs-key) fn))))) -(defmacro defkey (map keys fn) + + + +(defmacro defkey (map fn &rest keys) "Defines a key binding for FG42 for different types. Defines a keybinding in the given MAP for the given KEYS that maps to the given FN with the given DOCSTRING. +Example usage : (defkey `'global-map`' 'counsel-M-x :evil (:normal \"SPC s u\") :god \"C-x C-n\")" -KEYS should be a plist in the following format: -\(:god :human :evil