From cac46dec349ae4c8b6f4442f1aab75f8f041b963 Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 02:56:25 +0330 Subject: [PATCH 1/9] WIP: improved -defkey-evil --- lib/fg42/key-bindings.el | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index c590703..3c83cb8 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -35,9 +35,10 @@ (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." + (mapcar (lambda (state) + (evil-define-key state map (kbd key) fn)) states)) (defmacro defkey (map keys fn) @@ -49,12 +50,16 @@ KEYS should be a plist in the following format: \(:god :human :evil Date: Thu, 12 Mar 2020 03:05:50 +0330 Subject: [PATCH 2/9] WIP: still working on -defkey-evil --- lib/fg42/key-bindings.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 3c83cb8..13e5997 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -37,8 +37,11 @@ (defun -defkey-evil (map state-keys fn) "Set the given STATE-KEYS on key map MAP to FN." - (mapcar (lambda (state) - (evil-define-key state map (kbd key) fn)) states)) + (message "%s" state-keys) + (mapcar (lambda (k) (message "k=>%s" k)) state-keys) + ) + ;;(mapcar (lambda (state) + ;; (evil-define-key state map (kbd key) fn)) states)) (defmacro defkey (map keys fn) @@ -59,7 +62,7 @@ KEYS should be a plist in the following format: ((is-evil?) `(-defkey-evil ,map ,evil-state-key ,fn))))) -(macroexpand '(defkey python-map (:evil (:normal "g s" :visual "v")) foo)) +(macroexpand (defkey 'python-map (:evil '(:normal "g s" :visual "v") :god "who cares") 'foo)) (provide 'fg42/key-bindings) ;;; key-bindings.el ends here From 7f8f62c02afa92339ce7ce420f2b1fbbc303170b Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 03:20:57 +0330 Subject: [PATCH 3/9] WIP: naive solution for -defkey-evil --- lib/fg42/key-bindings.el | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 13e5997..2bce921 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -37,8 +37,12 @@ (defun -defkey-evil (map state-keys fn) "Set the given STATE-KEYS on key map MAP to FN." - (message "%s" state-keys) - (mapcar (lambda (k) (message "k=>%s" k)) state-keys) + (let ( + (normal-key (plist-get state-keys :normal)) + (visual-key (plist-get state-keys :visual)) + (insert-key (plist-get state-keys :insert)) + ) + (message "%s" normal-key)) ) ;;(mapcar (lambda (state) ;; (evil-define-key state map (kbd key) fn)) states)) From 50114c2686b6137aa81f998e9691900dc228fafc Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 05:38:05 +0330 Subject: [PATCH 4/9] fix -defkey-evil function. --- lib/fg42/key-bindings.el | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 2bce921..3825672 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -41,11 +41,13 @@ (normal-key (plist-get state-keys :normal)) (visual-key (plist-get state-keys :visual)) (insert-key (plist-get state-keys :insert)) - ) - (message "%s" normal-key)) + (emacs-key (plist-get state-keys :emacs))) + (when (not (null normal-key)) (evil-define-key 'normal map normal-key fn)) + (when (not (null visual-key)) (evil-define-key 'normal map normal-key fn)) + (when (not (null insert-key)) (evil-define-key 'normal map normal-key fn)) + (when (not (null emacs-key)) (evil-define-key 'normal map normal-key fn)) + ) ) - ;;(mapcar (lambda (state) - ;; (evil-define-key state map (kbd key) fn)) states)) (defmacro defkey (map keys fn) From b6149629cb9bd9a0fbc760997cb9099fff075459 Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 05:40:09 +0330 Subject: [PATCH 5/9] remove test macroexpand --- lib/fg42/key-bindings.el | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 3825672..c0659fe 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -68,7 +68,6 @@ KEYS should be a plist in the following format: ((is-evil?) `(-defkey-evil ,map ,evil-state-key ,fn))))) -(macroexpand (defkey 'python-map (:evil '(:normal "g s" :visual "v") :god "who cares") 'foo)) (provide 'fg42/key-bindings) ;;; key-bindings.el ends here From 57fd2e7cc24dedc87c1a38981bd4f01b43190e8a Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 10:22:26 +0330 Subject: [PATCH 6/9] some improvements and bug fixes --- lib/fg42/key-bindings.el | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index c0659fe..6f5fa67 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -43,9 +43,9 @@ (insert-key (plist-get state-keys :insert)) (emacs-key (plist-get state-keys :emacs))) (when (not (null normal-key)) (evil-define-key 'normal map normal-key fn)) - (when (not (null visual-key)) (evil-define-key 'normal map normal-key fn)) - (when (not (null insert-key)) (evil-define-key 'normal map normal-key fn)) - (when (not (null emacs-key)) (evil-define-key 'normal map normal-key fn)) + (when (not (null visual-key)) (evil-define-key 'visual map normal-key fn)) + (when (not (null insert-key)) (evil-define-key 'insert map normal-key fn)) + (when (not (null emacs-key)) (evil-define-key 'emacs map normal-key fn)) ) ) @@ -67,7 +67,5 @@ KEYS should be a plist in the following format: ((is-human?) `(-defkey-human ,map ,human-key ,fn)) ((is-evil?) `(-defkey-evil ,map ,evil-state-key ,fn))))) - - (provide 'fg42/key-bindings) ;;; key-bindings.el ends here From 75955eee1925544a7706d08b8c393a31502a6e2b Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 11:04:03 +0330 Subject: [PATCH 7/9] every thing works almost --- lib/fg42/key-bindings.el | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 6f5fa67..38876b5 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -42,10 +42,10 @@ (visual-key (plist-get state-keys :visual)) (insert-key (plist-get state-keys :insert)) (emacs-key (plist-get state-keys :emacs))) - (when (not (null normal-key)) (evil-define-key 'normal map normal-key fn)) - (when (not (null visual-key)) (evil-define-key 'visual map normal-key fn)) - (when (not (null insert-key)) (evil-define-key 'insert map normal-key fn)) - (when (not (null emacs-key)) (evil-define-key 'emacs map normal-key fn)) + (when (not (null normal-key)) (evil-define-key 'normal map (kbd normal-key) fn)) + (when (not (null visual-key)) (evil-define-key 'visual map (kbd visual-key) fn)) + (when (not (null insert-key)) (evil-define-key 'insert map (kbd insert-key) fn)) + (when (not (null emacs-key)) (evil-define-key 'emacs map (kbd emacs-key) fn)) ) ) @@ -60,12 +60,10 @@ KEYS should be a plist in the following format: (let ((god-key (plist-get keys :god)) (human-key (plist-get keys :human)) (evil-state-key (plist-get keys :evil))) - - (cond - ((is-god?) `(-defkey-god ,map ,god-key ,fn)) - ((is-human?) `(-defkey-human ,map ,human-key ,fn)) - ((is-evil?) `(-defkey-evil ,map ,evil-state-key ,fn))))) + ((is-god?) `(-defkey-god ,map ,god-key (quote ,fn))) + ((is-human?) `(-defkey-human ,map ,human-key (quote ,fn))) + ((is-evil?) `(-defkey-evil ,map (quote ,evil-state-key) (quote ,fn)))))) (provide 'fg42/key-bindings) ;;; key-bindings.el ends here From 579b50c317aa1c1b8783b2418ffed9f24aedc404 Mon Sep 17 00:00:00 2001 From: amirrezaask Date: Thu, 12 Mar 2020 11:10:33 +0330 Subject: [PATCH 8/9] add example usage of macro --- lib/fg42/key-bindings.el | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index 38876b5..d57ec75 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -45,18 +45,17 @@ (when (not (null normal-key)) (evil-define-key 'normal map (kbd normal-key) fn)) (when (not (null visual-key)) (evil-define-key 'visual map (kbd visual-key) fn)) (when (not (null insert-key)) (evil-define-key 'insert map (kbd insert-key) fn)) - (when (not (null emacs-key)) (evil-define-key 'emacs map (kbd emacs-key) fn)) - ) - ) + (when (not (null emacs-key)) (evil-define-key 'emacs map (kbd emacs-key) fn)))) + + (defmacro defkey (map keys fn) "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` (:evil (:normal \"SPC s u\") :god \"C-x C-y\") counsel-M-x)" -KEYS should be a plist in the following format: -\(:god :human :evil Date: Thu, 12 Mar 2020 21:02:22 +0330 Subject: [PATCH 9/9] resolve discussions --- lib/fg42/key-bindings.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/fg42/key-bindings.el b/lib/fg42/key-bindings.el index d57ec75..973aeab 100644 --- a/lib/fg42/key-bindings.el +++ b/lib/fg42/key-bindings.el @@ -37,32 +37,32 @@ (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)) + (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))) - (when (not (null normal-key)) (evil-define-key 'normal map (kbd normal-key) fn)) - (when (not (null visual-key)) (evil-define-key 'visual map (kbd visual-key) fn)) - (when (not (null insert-key)) (evil-define-key 'insert map (kbd insert-key) fn)) - (when (not (null emacs-key)) (evil-define-key 'emacs map (kbd emacs-key) fn)))) + (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` (:evil (:normal \"SPC s u\") :god \"C-x C-y\") counsel-M-x)" +Example usage : (defkey `'global-map`' 'counsel-M-x :evil (:normal \"SPC s u\") :god \"C-x C-n\")" (let ((god-key (plist-get keys :god)) (human-key (plist-get keys :human)) (evil-state-key (plist-get keys :evil))) (cond - ((is-god?) `(-defkey-god ,map ,god-key (quote ,fn))) - ((is-human?) `(-defkey-human ,map ,human-key (quote ,fn))) - ((is-evil?) `(-defkey-evil ,map (quote ,evil-state-key) (quote ,fn)))))) - + ((is-god?) `(-defkey-god ,map ,god-key ,fn)) + ((is-human?) `(-defkey-human ,map ,human-key ,fn)) + ((is-evil?) `(-defkey-evil ,map (quote ,evil-state-key) ,fn))))) (provide 'fg42/key-bindings) ;;; key-bindings.el ends here