summaryrefslogtreecommitdiff
path: root/modes/unimpaired/evil-collection-unimpaired.el
diff options
context:
space:
mode:
authorcondy <condy0919@gmail.com>2020-11-22 02:21:05 +0800
committerPierre Neidhardt <mail@ambrevar.xyz>2020-11-23 17:08:07 +0100
commit04df79eadc952eaa9469094426b008426d3c5bee (patch)
tree9984befaba26f99105a9d0d4bade45543b3c1d85 /modes/unimpaired/evil-collection-unimpaired.el
parentb6cc7c891f524224e59961731a5ce1bebaf7da00 (diff)
unimpaired: exchange line0.0.4
Diffstat (limited to 'modes/unimpaired/evil-collection-unimpaired.el')
-rw-r--r--modes/unimpaired/evil-collection-unimpaired.el40
1 files changed, 40 insertions, 0 deletions
diff --git a/modes/unimpaired/evil-collection-unimpaired.el b/modes/unimpaired/evil-collection-unimpaired.el
index fef595d..ac1719f 100644
--- a/modes/unimpaired/evil-collection-unimpaired.el
+++ b/modes/unimpaired/evil-collection-unimpaired.el
@@ -112,6 +112,41 @@
(ignore count)
(evil-collection-unimpaired--encode beg end #'url-unhex-string))
+;; https://stackoverflow.com/questions/2423834/move-line-region-up-and-down-in-emacs
+(defun evil-collection-unimpaired--move-text (arg)
+ "Move text down if ARG is positive, otherwise move text up."
+ (cond
+ ((and mark-active transient-mark-mode)
+ (when (> (point) (mark))
+ (exchange-point-and-mark))
+ (let ((column (current-column))
+ (text (delete-and-extract-region (point) (mark))))
+ (forward-line arg)
+ (move-to-column column :force)
+ (set-mark (point))
+ (insert text)
+ (exchange-point-and-mark)
+ (setq deactivate-mark nil)))
+ (t
+ (let ((column (current-column)))
+ (beginning-of-line)
+ (when (or (> arg 0) (not (bobp)))
+ (forward-line)
+ (when (or (< arg 0) (not (eobp)))
+ (transpose-lines arg))
+ (forward-line -1))
+ (move-to-column column)))))
+
+(defun evil-collection-unimpaired-move-text-down (arg)
+ "Move region (transient-mark-mode active) or current line ARG lines down."
+ (interactive "*p")
+ (evil-collection-unimpaired--move-text arg))
+
+(defun evil-collection-unimpaired-move-text-up (arg)
+ "Move region (transient-mark-mode active) or current line ARG lines up."
+ (interactive "*p")
+ (evil-collection-unimpaired--move-text (- arg)))
+
;;;###autoload
(defun evil-collection-unimpaired-setup ()
"Set up unimpaired-like bindings."
@@ -119,10 +154,15 @@
(evil-collection-define-key 'normal 'evil-collection-unimpaired-mode-map
"[b" 'evil-prev-buffer
"]b" 'evil-next-buffer
+ "[e" 'evil-collection-unimpaired-move-text-up
+ "]e" 'evil-collection-unimpaired-move-text-down
"]l" 'evil-collection-unimpaired-next-error
"[l" 'evil-collection-unimpaired-previous-error
(kbd "[ SPC") 'evil-collection-unimpaired-insert-newline-above
(kbd "] SPC") 'evil-collection-unimpaired-insert-newline-below)
+ (evil-collection-define-key 'visual 'evil-collection-unimpaired-mode-map
+ "[e" 'evil-collection-unimpaired-move-text-up
+ "]e" 'evil-collection-unimpaired-move-text-down)
(evil-collection-define-key 'motion 'evil-collection-unimpaired-mode-map
"[u" 'evil-collection-unimpaired-url-encode
"]u" 'evil-collection-unimpaired-url-decode))