Previous: Cooperation, Up: Interaction

15.10.2 Packages that lead to conflicts with Org mode

In Emacs 23, shift-selection-mode is on by default, meaning that cursor motions combined with the shift key should start or enlarge regions. This conflicts with the use of S-<cursor> commands in Org to change timestamps, TODO keywords, priorities, and item bullet types if the cursor is at such a location. By default, S-<cursor> commands outside special contexts don't do anything, but you can customize the variable org-support-shift-select. Org mode then tries to accommodate shift selection by (i) using it outside of the special contexts where special commands apply, and by (ii) extending an existing active region even if the cursor moves across a special context.
CUA.el by Kim. F. Storm
Key bindings in Org conflict with the S-<cursor> keys used by CUA mode (as well as pc-select-mode and s-region-mode) to select and extend the region. In fact, Emacs 23 has this built-in in the form of shift-selection-mode, see previous paragraph. If you are using Emacs 23, you probably don't want to use another package for this purpose. However, if you prefer to leave these keys to a different package while working in Org mode, configure the variable org-replace-disputed-keys. When set, Org will move the following key bindings in Org files, and in the agenda buffer (but not during date selection).
          S-UP      ⇒  M-p             S-DOWN     ⇒  M-n
          S-LEFT    ⇒  M--             S-RIGHT    ⇒  M-+
          C-S-LEFT  ⇒  M-S--           C-S-RIGHT  ⇒  M-S-+

Yes, these are unfortunately more difficult to remember. If you want to have other replacement keys, look at the variable org-disputed-keys.

filladapt.el by Kyle Jones
Org mode tries to do the right thing when filling paragraphs, list items and other elements. Many users reported they had problems using both filladapt.el and Org mode, so a safe thing to do is to disable it like this:
          (add-hook 'org-mode-hook 'turn-off-filladapt-mode)

yasnippet.el
The way Org mode binds the TAB key (binding to [tab] instead of "\t") overrules YASnippet's access to this key. The following code fixed this problem:
          (add-hook 'org-mode-hook
                    (lambda ()
                      (org-set-local 'yas/trigger-key [tab])
                      (define-key yas/keymap [tab] 'yas/next-field-or-maybe-expand)))

The latest version of yasnippet doesn't play well with Org mode. If the above code does not fix the conflict, start by defining the following function:

          (defun yas/org-very-safe-expand ()
            (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))

Then, tell Org mode what to do with the new function:

          (add-hook 'org-mode-hook
                    (lambda ()
          	    (make-variable-buffer-local 'yas/trigger-key)
          	    (setq yas/trigger-key [tab])
          	    (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
          	    (define-key yas/keymap [tab] 'yas/next-field)))

windmove.el by Hovav Shacham
This package also uses the S-<cursor> keys, so everything written in the paragraph above about CUA mode also applies here. If you want make the windmove function active in locations where Org mode does not have special functionality on S-<cursor>, add this to your configuration:
          ;; Make windmove work in org-mode:
          (add-hook 'org-shiftup-final-hook 'windmove-up)
          (add-hook 'org-shiftleft-final-hook 'windmove-left)
          (add-hook 'org-shiftdown-final-hook 'windmove-down)
          (add-hook 'org-shiftright-final-hook 'windmove-right)

viper.el by Michael Kifer
Viper uses C-c / and therefore makes this key not access the corresponding Org mode command org-sparse-tree. You need to find another key for this command, or override the key in viper-vi-global-user-map with
          (define-key viper-vi-global-user-map "C-c /" 'org-sparse-tree)