Download
(defvar drill-instructor nil
"Enforce key-bind of Emacs.")
(defvar drill-instructor-global nil
"drill-instructor-global")
(defvar drill-instructor-unset-major-mode-list '(term-mode)
"Drill instructor unset list")
(if (not (assq 'drill-instructor minor-mode-alist))
(setq minor-mode-alist
(cons '(drill-instructor " Drill")
minor-mode-alist)))
(defun drill-instructor (&optional arg)
"Enforce key-bind of Emacs."
(interactive)
(cond
((< (prefix-numeric-value arg) 0)
(setq drill-instructor nil))
(arg
(setq drill-instructor t))
(t
(setq drill-instructor (not drill-instructor))))
(if drill-instructor
(progn
(if window-system
(progn
(define-key drill-instructor-key-map [return] 'drill-instructor-alert-return)
(define-key drill-instructor-key-map [tab] 'drill-instructor-alert-tab)))
(add-to-list 'minor-mode-map-alist (cons 'drill-instructor drill-instructor-key-map)))
nil)
)
(defun drill-instructor-switch ()
"drill-instructor-switch"
(if drill-instructor-global
(if (memq major-mode drill-instructor-unset-major-mode-list)
(setq drill-instructor nil)
(drill-instructor t)
)))
(defadvice switch-to-buffer (after drill-instructor-switch-to-buffer activate)
"drill-instructor-switch-to-buffer"
(drill-instructor-switch))
(defadvice kill-buffer (after drill-instructor-kill-buffer activate)
"drill-instructor-kill-buffer"
(drill-instructor-switch))
(defadvice other-window (after drill-instructor-other-window activate)
"drill-instructor-other-window"
(drill-instructor-switch))
(defadvice delete-window (after drill-instructor-delete-window activate)
"drill-instructor-delete-window"
(drill-instructor-switch))
(defvar drill-instructor-key-map
(let ((map (make-sparse-keymap)))
(define-key map [up] 'drill-instructor-alert-up)
(define-key map [down] 'drill-instructor-alert-down)
(define-key map [right] 'drill-instructor-alert-right)
(define-key map [left] 'drill-instructor-alert-left)
(define-key map (kbd "DEL") 'drill-instructor-alert-del)
(define-key map "\C-h" 'delete-backward-char)
map))
(defun drill-instructor-alert-up ()
(interactive)
(message "Don't use up-key!!! Press C-p!! M-p!!!"))
(defun drill-instructor-alert-down ()
(interactive)
(message "Don't use down-key!!! Press C-n!! M-n!!!"))
(defun drill-instructor-alert-right ()
(interactive)
(message "Don't use right-key!!! Press C-f!! C-f!!!"))
(defun drill-instructor-alert-left ()
(interactive)
(message "Don't use left-key!!! Press C-b!! C-b!!!"))
(defun drill-instructor-alert-del ()
(interactive)
(message "Don't use DEL!!! Press C-h!! C-h!!!"))
(defun drill-instructor-alert-return ()
(interactive)
(message "Don't use RETURN!!! Press C-m!! C-m!!!"))
(defun drill-instructor-alert-tab ()
(interactive)
(message "Don't use TAB!!! Press C-i!! C-i!!!"))
(provide 'drill-instructor)