diff options
| -rw-r--r-- | doc/changelog.org | 1 | ||||
| -rw-r--r-- | evil-org.el | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/doc/changelog.org b/doc/changelog.org index 781b180..00bef37 100644 --- a/doc/changelog.org +++ b/doc/changelog.org @@ -1,5 +1,6 @@ * Version 0.8 - Make evil-org-a-greater-org-object (ar), evil-org-inner/a-subtree (iR, aR) text objects linewise. The other text objects remain characterwise. + - Improvements to o/O * Version 0.7 - A hook is no longer created automatically. The following line of code is from now on required in a user config: #+BEGIN_SRC emacs-lisp diff --git a/evil-org.el b/evil-org.el index 6c21e47..8becff3 100644 --- a/evil-org.el +++ b/evil-org.el @@ -7,7 +7,7 @@ ;; Git-Repository: git://github.com/Somelauw/evil-org-mode.git ;; Created: 2012-06-14 ;; Forked-since: 2017-02-12 -;; Version: 0.8.1 +;; Version: 0.8.2 ;; Package-Requires: ((emacs "24.4") (evil "1.0") (org "8.0.0")) ;; Keywords: evil vim-emulation org-mode key-bindings presets @@ -91,6 +91,13 @@ By default, o and O are bound to evil-org-open-above and evil-org-open-below." :group 'evil-org :type '(set (const table-row) (const item))) +;; Constants +(defconst evil-org-special-o/O-ignore + (append '(latex-environment drawer property-drawer) + (cl-remove-if-not (lambda (s) (string-suffix-p "block" (symbol-name s))) + org-element-all-elements)) + "Org elements on which o/O should not special.") + ;;; Variable declarations (defvar browse-url-generic-program) (defvar browse-url-generic-args) @@ -130,7 +137,9 @@ Passing in any prefix argument, executes the command without special behavior." (interactive "P") (end-of-visible-line) (let* ((special (and (null count) evil-org-special-o/O)) - (e (org-element-lineage (org-element-at-point) special t))) + (ignore (when (memq 'item special) evil-org-special-o/O-ignore)) + (elements (append special ignore)) + (e (org-element-lineage (org-element-at-point) elements t))) (cl-case (org-element-type e) ((table-row) (org-table-insert-row '(4)) (evil-insert nil)) ((item) (org-insert-item) (evil-insert nil)) @@ -144,7 +153,9 @@ Passing in any prefix argument, executes the command without special behavior." (interactive "P") (end-of-visible-line) (let* ((special (and (null count) evil-org-special-o/O)) - (e (org-element-lineage (org-element-at-point) special t))) + (ignore (when (memq 'item special) evil-org-special-o/O-ignore)) + (elements (append special ignore)) + (e (org-element-lineage (org-element-at-point) elements t))) (cl-case (org-element-type e) ((table-row) (org-table-insert-row) (evil-insert nil)) ((item) (beginning-of-line) (org-insert-item) (evil-insert nil)) |
