defkey macro has been added
This commit is contained in:
parent
cab49441b2
commit
f5c6925e5e
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue