diff options
| author | condy <condy0919@gmail.com> | 2020-11-22 02:21:05 +0800 |
|---|---|---|
| committer | Pierre Neidhardt <mail@ambrevar.xyz> | 2020-11-23 17:08:07 +0100 |
| commit | 04df79eadc952eaa9469094426b008426d3c5bee (patch) | |
| tree | 9984befaba26f99105a9d0d4bade45543b3c1d85 /modes | |
| parent | b6cc7c891f524224e59961731a5ce1bebaf7da00 (diff) | |
unimpaired: exchange line0.0.4
Diffstat (limited to 'modes')
| -rw-r--r-- | modes/unimpaired/evil-collection-unimpaired.el | 40 |
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)) |
