Re: [O] adding custom org-keymaps for EVIL Vim emulator

2012-05-06 Thread Eric S Fraga
Herbert Sitz hes...@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




[O] adding custom org-keymaps for EVIL Vim emulator

2012-02-28 Thread Herbert Sitz
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) 






Re: [O] adding custom org-keymaps for EVIL Vim emulator

2012-02-28 Thread Herbert Sitz
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

v  below to be in .emacs file v

(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))

[. . .]