From 0c261f982118fad64275a825b543a2af92c5ed50 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 12 Nov 2015 05:40:38 -0500 Subject: [PATCH] Better org evil text-objects --- core/lib/defuns-evil.el | 12 +++++++++++ modules/module-org.el | 45 ++++++----------------------------------- 2 files changed, 18 insertions(+), 39 deletions(-) diff --git a/core/lib/defuns-evil.el b/core/lib/defuns-evil.el index ecb7c0735..d9c762fe6 100644 --- a/core/lib/defuns-evil.el +++ b/core/lib/defuns-evil.el @@ -93,5 +93,17 @@ (call-interactively 'evil-window-vsplit) (evil-window-right 1)) +;;;###autoload +(defmacro define-text-object! (key start-regex end-regex) + (let ((inner-name (make-symbol "narf--inner-name")) + (outer-name (make-symbol "narf--outer-name"))) + `(progn + (evil-define-text-object ,inner-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count nil)) + (evil-define-text-object ,outer-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count t)) + (define-key evil-inner-text-objects-map ,key (quote ,inner-name)) + (define-key evil-outer-text-objects-map ,key (quote ,outer-name))))) + (provide 'defuns-evil) ;;; defuns-evil.el ends here diff --git a/modules/module-org.el b/modules/module-org.el index 6979e6c34..d2c166c8f 100644 --- a/modules/module-org.el +++ b/modules/module-org.el @@ -271,45 +271,12 @@ ;; Add element delimiter text-objects so we can use evil-surround to ;; manipulate them. - (evil-define-text-object evil-inner-org-bold-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?* beg end type count)) - (evil-define-text-object evil-a-org-bold-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?* beg end type count t)) - - (evil-define-text-object evil-inner-org-italic-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?/ beg end type count)) - (evil-define-text-object evil-a-org-italic-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?/ beg end type count t)) - - (evil-define-text-object evil-inner-org-underline-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?_ beg end type count)) - (evil-define-text-object evil-a-org-underline-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?_ beg end type count t)) - - (evil-define-text-object evil-inner-org-code-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?= beg end type count)) - (evil-define-text-object evil-a-org-code-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?= beg end type count t)) - - (evil-define-text-object evil-inner-org-verbatim-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?~ beg end type count)) - (evil-define-text-object evil-a-org-verbatim-element (count &optional beg end type) - :extend-selection nil (evil-select-quote ?~ beg end type count t)) - - (define-key evil-outer-text-objects-map "*" 'evil-a-org-bold-element) - (define-key evil-inner-text-objects-map "*" 'evil-inner-org-bold-element) - - (define-key evil-outer-text-objects-map "/" 'evil-a-org-italic-element) - (define-key evil-inner-text-objects-map "/" 'evil-inner-org-italic-element) - - (define-key evil-outer-text-objects-map "_" 'evil-a-org-underline-element) - (define-key evil-inner-text-objects-map "_" 'evil-inner-org-underline-element) - - (define-key evil-outer-text-objects-map "=" 'evil-a-org-code-element) - (define-key evil-inner-text-objects-map "=" 'evil-inner-org-code-element) - - (define-key evil-outer-text-objects-map "~" 'evil-a-org-verbatim-element) - (define-key evil-inner-text-objects-map "~" 'evil-inner-org-verbatim-element) + (define-text-object! "$" "\\$" "\\$") + (define-text-object! "*" "\\*" "\\*") + (define-text-object! "/" "/" "/") + (define-text-object! "_" "_" "_") + (define-text-object! "=" "=" "=") + (define-text-object! "~" "~" "~") ;; Keybinds (bind! (:map org-mode-map