defkey macro has been added

This commit is contained in:
Sameer Rahmani 2019-09-09 09:05:36 +01:00
parent cab49441b2
commit f5c6925e5e
2 changed files with 37 additions and 12 deletions

View File

@ -23,13 +23,38 @@
;;; Commentary:
;;; Code:
(defmacro defkey (docstring map key-map fn)
(require 'fg42/race)
(defun -defkey-god (map key fn)
"Set the given KEY on key map MAP to FN."
(define-key map (kbd key) fn))
(defun -defkey-human (map key fn)
"Set the given KEY on key map MAP to FN."
(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))
(defmacro defkey (map keys fn)
"Defines a key binding for FG42 for different types.
Defines a keybinding in the given MAP for the given KEY-MAP that maps
Defines a keybinding in the given MAP for the given KEYS that maps
to the given FN with the given DOCSTRING.
KEY-MAP should be a plist in the following format:
\(:god <keyma> :human <keymap> :evil <keymap)")
KEYS should be a plist in the following format:
\(:god <keyma> :human <keymap> :evil <keymap)"
(let ((god-key (plist-get keys :god))
(human-key (plist-get keys :human))
(evil-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-key ,fn))))
(error "Wrong 'race' has been selected, Checkout `fg42-user-race'")))
(provide 'fg42/key-bindings)
;;; key-bindings.el ends here

View File

@ -1,44 +1,44 @@
;;; Race --- A utitlity to tweak shortkeys based on user preference
;;; Commentary:
;;; Code:
(defvar user-race :god
(defvar fg42-user-race :god
"The race of the user.")
(defun i-am (race)
"Set the user race to the given RACE."
(if (member race '(:god :human :evil))
(setq user-race race)
(setq fg42-user-race race)
(error "Invalid race '%s'. Choices are ':god', ':human', ':evil'" race)))
(defun i-am-evil ()
"Set the user race to :evil."
(interactive)
(setq user-race :evil))
(setq fg42-user-race :evil))
(defun i-am-god ()
"Set the user race to :god."
(interactive)
(setq user-race :god))
(setq fg42-user-race :god))
(defun i-am-human ()
"Set the user race to :human."
(interactive)
(setq user-race :human))
(setq fg42-user-race :human))
(defun is-evil? ()
"Is user a evil?"
(interactive)
(eq user-race :evil))
(eq fg42-user-race :evil))
(defun is-god? ()
"Is user a god?"
(interactive)
(eq user-race :god))
(eq fg42-user-race :god))
(defun is-human? ()
"Is user a human?"
(interactive)
(eq user-race :human))
(eq fg42-user-race :human))
(provide 'fg42/race)
;;; race.el ends here