diff --git a/core/defuns/defuns-evil.el b/core/defuns/defuns-evil.el index e92e645fb..935f8a4c6 100644 --- a/core/defuns/defuns-evil.el +++ b/core/defuns/defuns-evil.el @@ -122,5 +122,46 @@ (setq evil-ex-commands (delq (assoc abbrev evil-ex-commands) evil-ex-commands))) (setq evil-ex-commands (delq (assoc cmd evil-ex-commands) evil-ex-commands)))) +(defvar narf:map-maps '()) + +;;;###autoload (autoload 'narf:map "defuns-evil" nil t) +(evil-define-command narf:map (bang input &optional mode) + "Map ex commands to keybindings. INPUT should be in the format [KEY] [EX COMMAND]." + (interactive "") + (let* ((parts (s-split-up-to " " input 2 t)) + (mode (or mode 'normal)) + (key (kbd (car parts))) + (command (s-join " " (cdr parts))) + (map (cl-case mode + ('normal evil-normal-state-local-map) + ('insert evil-insert-state-local-map) + ('visual evil-visual-state-local-map) + ('motion evil-motion-state-local-map) + ('operator evil-operator-state-local-map))) + (fn `(lambda () (interactive) (evil-ex-eval ,command)))) + (if bang + (evil-define-key mode nil key fn) + (define-key map key fn)))) + +;;;###autoload (autoload 'narf:nmap "defuns-evil" nil t) +(evil-define-command narf:nmap (bang input &optional mode) + (interactive "") (narf:map bang input 'normal)) + +;;;###autoload (autoload 'narf:imap "defuns-evil" nil t) +(evil-define-command narf:imap (bang input &optional mode) + (interactive "") (narf:map bang input 'insert)) + +;;;###autoload (autoload 'narf:vmap "defuns-evil" nil t) +(evil-define-command narf:vmap (bang input &optional mode) + (interactive "") (narf:map bang input 'visual)) + +;;;###autoload (autoload 'narf:mmap "defuns-evil" nil t) +(evil-define-command narf:mmap (bang input &optional mode) + (interactive "") (narf:map bang input 'motion)) + +;;;###autoload (autoload 'narf:omap "defuns-evil" nil t) +(evil-define-command narf:omap (bang input &optional mode) + (interactive "") (narf:map bang input 'operator)) + (provide 'defuns-evil) ;;; defuns-evil.el ends here diff --git a/private/my-commands.el b/private/my-commands.el index a56fd04bc..438ca4b0e 100644 --- a/private/my-commands.el +++ b/private/my-commands.el @@ -5,6 +5,12 @@ (exmap "bcomp[ile]" 'narf:compile-el) (exmap "echo" 'narf:echo) (exmap "minor" 'helm-describe-modes) ; list minor modes +;; Quick mapping keys to commands, allows :nmap \m !make +(exmap "nmap" 'narf:nmap) +(exmap "imap" 'narf:imap) +(exmap "vmap" 'narf:vmap) +(exmap "mmap" 'narf:mmap) +(exmap "omap" 'narf:omap) ;; Editing (exmap "@" 'narf/evil-macro-on-all-lines) ; run macro on each line