forked from FG42/FG42
1
0
Fork 0

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: ;;; Commentary:
;;; Code: ;;; 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 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. to the given FN with the given DOCSTRING.
KEY-MAP should be a plist in the following format: KEYS should be a plist in the following format:
\(:god <keyma> :human <keymap> :evil <keymap)") \(: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) (provide 'fg42/key-bindings)
;;; key-bindings.el ends here ;;; key-bindings.el ends here

View File

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