* adding custom org-keymaps for EVIL Vim emulator
@ 2012-02-28 23:50 Herbert Sitz
2012-02-28 23:59 ` Herbert Sitz
2012-05-07 5:12 ` Eric S Fraga
0 siblings, 2 replies; 3+ messages in thread
From: Herbert Sitz @ 2012-02-28 23:50 UTC (permalink / raw)
To: emacs-orgmode
I was playing around with Evil and like it quite a bit. It feels better than
the previous Viper/Vimpulse package I was using, plus documentation is good,
clear, and it seems easy to customize.
One problem with Org for me has been keybindings. Even with a Vim emulator that
does a decent job of vim-ifying Emacs, it still leaves all of the (numerous)
Org-specific keymappings to deal with. It turns out to be quite easy to add
custom keymappings to Org-mode to make commands accessible in a more Vim-like
way. I've added the code below to my .emacs and it's a good start. Maybe some
vim-friendly Org users will have ideas on how to grow it from here:
(define-minor-mode evil-org-mode
"minor mode to add evil keymappings to Org-mode."
:keymap (make-sparse-keymap)
(evil-local-mode t))
; the ',<num>' keys give quick and easy way to hide/reveal outline
; structure of entire document (analogous to <shift-tab>);
(evil-define-key 'normal evil-org-mode-map ",1" '(lambda()
(interactive)(hide-sublevels 1)))
(evil-define-key 'normal evil-org-mode-map ",2" '(lambda()
(interactive)(hide-sublevels 2)))
(evil-define-key 'normal evil-org-mode-map ",3" '(lambda()
(interactive)(hide-sublevels 3)))
(evil-define-key 'normal evil-org-mode-map ",4" '(lambda()
(interactive)(hide-sublevels 4)))
(evil-define-key 'normal evil-org-mode-map ",5" '(lambda()
(interactive)(hide-sublevels 5)))
(evil-define-key 'normal evil-org-mode-map ",6" '(lambda()
(interactive)(hide-sublevels 6)))
(evil-define-key 'normal evil-org-mode-map ",7" '(lambda()
(interactive)(hide-sublevels 7)))
(evil-define-key 'normal evil-org-mode-map ",8" '(lambda()
(interactive)(hide-sublevels 8)))
; the ',,<num>' maps below give quick and easy way to hide/reveal outline
; structure of single subtree. depending on what sort of org
; documents you have, and how you use them, you may prefer
; to have these mappings use single ',' and have entire-document
; mappings use ',,' prefix.
(evil-define-key 'normal evil-org-mode-map ",,1" '(lambda()
(interactive)(hide-sublevels 1)))
(evil-define-key 'normal evil-org-mode-map ",,2" '(lambda()
(interactive)(hide-sublevels 1)(show-children 1)))
(evil-define-key 'normal evil-org-mode-map ",,3" '(lambda()
(interactive)(hide-sublevels 1)(show-children 2)))
(evil-define-key 'normal evil-org-mode-map ",,4" '(lambda()
(interactive)(hide-sublevels 1)(show-children 3)))
(evil-define-key 'normal evil-org-mode-map ",,5" '(lambda()
(interactive)(hide-sublevels 1)(show-children 4)))
(evil-define-key 'normal evil-org-mode-map ",,6" '(lambda()
(interactive)(hide-sublevels 1)(show-children 5)))
(evil-define-key 'normal evil-org-mode-map ",,7" '(lambda()
(interactive)(hide-sublevels 1)(show-children 6)))
(evil-define-key 'normal evil-org-mode-map ",,8" '(lambda()
(interactive)(hide-sublevels 1)(show-children 7)))
; various commands mapped below
(evil-define-key 'normal evil-org-mode-map ",dd" 'org-deadline)
(evil-define-key 'normal evil-org-mode-map ",ds" 'org-schedule)
(evil-define-key 'normal evil-org-mode-map ",te" 'org-set-tags-command)
(evil-define-key 'normal evil-org-mode-map ",ts" 'org-todo)
(evil-define-key 'normal evil-org-mode-map ",r" 'org-refile)
(evil-define-key 'normal evil-org-mode-map ",c" 'org-capture)
(evil-define-key 'normal evil-org-mode-map ",ag" 'org-agenda)
(evil-define-key 'normal evil-org-mode-map "<<" 'org-promote-subtree)
(evil-define-key 'normal evil-org-mode-map ">>" 'org-demote-subtree)
(evil-define-key 'normal evil-org-mode-map ">." 'org-move-subtree-down)
(evil-define-key 'normal evil-org-mode-map "<," 'org-move-subtree-up)
(evil-define-key 'normal evil-org-mode-map "gj" 'org-forward-same-level)
(evil-define-key 'normal evil-org-mode-map "gk" 'org-backward-same-level)
(evil-define-key 'normal evil-org-mode-map "gh" 'outline-up-heading)
(evil-define-key 'normal evil-org-mode-map "gl" 'outline-next-visible-heading)
(evil-define-key 'normal evil-org-mode-map ",g" 'org-goto)
(evil-define-key 'normal evil-org-mode-map ",ex" 'org-export)
(evil-define-key 'normal evil-org-mode-map ",ns" 'org-narrow-to-subtree)
(evil-define-key 'normal evil-org-mode-map ",nw" 'widen)
(evil-define-key 'normal evil-org-mode-map [(return)]
'org-insert-heading-respect-content)
; add hook to load evil-org mappings in all org documents
(add-hook 'org-mode-hook 'evil-org-mode)
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: adding custom org-keymaps for EVIL Vim emulator
2012-02-28 23:50 adding custom org-keymaps for EVIL Vim emulator Herbert Sitz
@ 2012-02-28 23:59 ` Herbert Sitz
2012-05-07 5:12 ` Eric S Fraga
1 sibling, 0 replies; 3+ messages in thread
From: Herbert Sitz @ 2012-02-28 23:59 UTC (permalink / raw)
To: emacs-orgmode
Herbert Sitz <hesitz <at> gmail.com> writes:
>
> (define-minor-mode evil-org-mode
> "minor mode to add evil keymappings to Org-mode."
> :keymap (make-sparse-keymap)
> (evil-local-mode t))
>
Whoops, I left out the earlier lines to load and enable Evil. They are
below. I commented out the (evil-mode 1), which enables evil-mode
in all buffers and instead call evil-local-mode in the hook function
that's called when a buffer is set to 'org' type. I assume there's
some better way to do this, since I do want to use Evil mode in
most buffers, not just org buffers. But I was having problems in
the date-editing mini buffer if I had (evil-mode 1) so I took the
easy way of getting rid of that. . .
Also, Evil must of course be installed before you can do these
custom mappings. Here's home page for Evil:
https://gitorious.org/evil/pages/Home
vvvvv below to be in .emacs file vvvvv
--------------------------------
(add-to-list 'load-path "c:/Program Files (x86)/Emacs/emacs/lisp/evil")
(require 'evil)
; comment out line below to activate evil only in org-buffers
;(evil-mode 1)
; lines above go in .emacs above lines from previous post, which
; start as. . .
(define-minor-mode evil-org-mode
"minor mode to add evil keymappings to Org-mode."
:keymap (make-sparse-keymap)
(evil-local-mode t))
[. . .]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: adding custom org-keymaps for EVIL Vim emulator
2012-02-28 23:50 adding custom org-keymaps for EVIL Vim emulator Herbert Sitz
2012-02-28 23:59 ` Herbert Sitz
@ 2012-05-07 5:12 ` Eric S Fraga
1 sibling, 0 replies; 3+ messages in thread
From: Eric S Fraga @ 2012-05-07 5:12 UTC (permalink / raw)
To: Herbert Sitz; +Cc: emacs-orgmode
Herbert Sitz <hesitz@gmail.com> writes:
> I was playing around with Evil and like it quite a bit. It feels better than
> the previous Viper/Vimpulse package I was using, plus documentation is good,
> clear, and it seems easy to customize.
>
> One problem with Org for me has been keybindings. Even with a Vim emulator that
> does a decent job of vim-ifying Emacs, it still leaves all of the (numerous)
> Org-specific keymappings to deal with. It turns out to be quite easy to add
> custom keymappings to Org-mode to make commands accessible in a more Vim-like
> way. I've added the code below to my .emacs and it's a good start. Maybe some
> vim-friendly Org users will have ideas on how to grow it from here:
Herbert,
thanks for these. Very useful. I already had some bindings but have
added some more based on yours. My current setup is:
#+begin_src emacs-lisp
(defun esf/evil-key-bindings-for-org ()
;;(message "Defining evil key bindings for org")
(evil-declare-key 'normal org-mode-map
"gh" 'outline-up-heading
"gj" 'org-forward-same-level
"gk" 'org-backward-same-level
"gl" 'outline-next-visible-heading
"H" 'org-beginning-of-line ; smarter behaviour on headlines etc.
"L" 'org-end-of-line ; smarter behaviour on headlines etc.
"t" 'org-todo ; mark a TODO item as DONE
",c" 'org-cycle
",e" 'org-export-dispatch
",n" 'outline-next-visible-heading
",p" 'outline-previous-visible-heading
",t" 'org-set-tags-command
",u" 'outline-up-heading
"$" 'org-end-of-line ; smarter behaviour on headlines etc.
"^" 'org-beginning-of-line ; ditto
"-" 'org-ctrl-c-minus ; change bullet style
"<" 'org-metaleft ; out-dent
">" 'org-metaright ; indent
)
(mapcar (lambda (state)
(evil-declare-key state org-mode-map
(kbd "M-l") 'org-metaright
(kbd "M-h") 'org-metaleft
(kbd "M-k") 'org-metaup
(kbd "M-j") 'org-metadown
(kbd "M-L") 'org-shiftmetaright
(kbd "M-H") 'org-shiftmetaleft
(kbd "M-K") 'org-shiftmetaup
(kbd "M-J") 'org-shiftmetadown))
'(normal insert)))
#+end_src
I've been using evil now for quite a few months and I am very happy with
it. Especially for RSI sufferers, a mode based editor avoiding most C-
and M- commands is very nice.
Combined with ratpoison and keynav, my fingers seldom have to leave the
home row!
--
: Eric S Fraga (GnuPG: 0xC89193D8FFFCF67D) in Emacs 24.1.50.1
: using Org release_7.8.09-529-g035ab3.dirty
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-07 5:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-28 23:50 adding custom org-keymaps for EVIL Vim emulator Herbert Sitz
2012-02-28 23:59 ` Herbert Sitz
2012-05-07 5:12 ` Eric S Fraga
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.