Skip to content

Instantly share code, notes, and snippets.

@joelmccracken
Created March 6, 2013 19:04
Show Gist options
  • Save joelmccracken/5102049 to your computer and use it in GitHub Desktop.
Save joelmccracken/5102049 to your computer and use it in GitHub Desktop.
(defun modal-emacs-on () (interactive) (modal-emacs-mode 1))
(defun modal-emacs-off () (interactive) (modal-emacs-mode -1))
(defvar modal--normal-mode-map "The standard keymap that starts everything")
(setq modal--normal-mode-map (make-sparse-keymap))
(define-key modal--normal-mode-map "i" 'modal--insert-mode)
(define-key modal--normal-mode-map "n" 'next-line)
(define-key modal--normal-mode-map "p" 'previous-line)
(define-key modal--normal-mode-map "f" 'forward-char)
(define-key modal--normal-mode-map "b" 'backward-char)
(define-key modal--normal-mode-map "o" 'other-window)
(define-key modal--normal-mode-map "/" 'isearch-forward-regexp)
(define-key modal--normal-mode-map "?" 'isearch-backward-regexp)
(define-key modal--normal-mode-map "k" 'paredit-forward)
(define-key modal--normal-mode-map "j" 'paredit-backward)
(define-key modal--normal-mode-map "<" 'beginning-of-buffer)
(define-key modal--normal-mode-map ">" 'end-of-buffer)
(defvar modal--normal-mode-map "emulates the spirit fo vims insert mode, retores functionality")
(setq modal--insert-mode-map (make-sparse-keymap))
(define-key modal--insert-mode-map (kbd "M-ESC") 'modal--normal-mode)
(define-key modal--insert-mode-map (kbd "C-z") 'modal--normal-mode)
;; should use whatever keybinding you want to switch to normal
;; keybinding mode. i recogni
(defun modal--insert-mode ()
""
(interactive)
(setq insert-mode t)
(modal--switch-active-keymap 'insert-mode modal--insert-mode-map)
nil)
(defun modal--normal-mode ()
""
(interactive)
(setq normal-mode t)
(modal--switch-active-keymap 'normal-mode modal--normal-mode-map))
(defun modal--meta-mode())
(defvar modal--active-keymap-alist nil
"contains the keymap that is currently active")
(defun modal--switch-active-keymap (mode-name new-keymap)
;; we only ever have a single active keymap
(setq modal--active-keymap-alist
`((,mode-name . ,new-keymap))))
(define-minor-mode modal-emacs-mode
"minor mode that enables our semi-simplistic \"modal\" keymap system"
:lighter " Modal"
:group 'modal-emacs
(if (not modal-emacs-mode)
(setq emulation-mode-map-alists (delq 'modal--active-keymap-alist emulation-mode-map-alists))
(add-to-ordered-list 'emulation-mode-map-alists 'modal--active-keymap-alist 400)
(modal--insert-mode)))
(define-globalized-minor-mode modal-emacs-globalized-mode modal-emacs-mode
modal-emacs-on)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment