aboutsummaryrefslogtreecommitdiff
path: root/Emacs/.config/emacs/elisp/move.el
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-04-27 14:42:15 +0530
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-04-27 15:09:46 +0530
commit870ce03d0279bc1ce7215c311b061d68c95fdbc1 (patch)
treeccbdb0d3576055d5427afd923856fcc55aa3b8d7 /Emacs/.config/emacs/elisp/move.el
parenteb5b11e71bfc3a9f8cacd47fa747b05e19479f27 (diff)
downloaddotfiles-870ce03d0279bc1ce7215c311b061d68c95fdbc1.tar.gz
dotfiles-870ce03d0279bc1ce7215c311b061d68c95fdbc1.tar.bz2
dotfiles-870ce03d0279bc1ce7215c311b061d68c95fdbc1.zip
(Emacs/config|core|elisp)+move.el
Library to move words forward and backward as well as lines up and down. These movements keep the object in question under the cursor which provides a nice experience.
Diffstat (limited to 'Emacs/.config/emacs/elisp/move.el')
-rw-r--r--Emacs/.config/emacs/elisp/move.el85
1 files changed, 85 insertions, 0 deletions
diff --git a/Emacs/.config/emacs/elisp/move.el b/Emacs/.config/emacs/elisp/move.el
new file mode 100644
index 0000000..77dd785
--- /dev/null
+++ b/Emacs/.config/emacs/elisp/move.el
@@ -0,0 +1,85 @@
+;;; move-line.el --- Move current line up or down -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2024 Aryadev Chavali
+
+;; Author: Aryadev Chavali <aryadev@aryadevchavali.com>
+;; Keywords:
+
+;; This is free and unencumbered software released into the public domain.
+
+;; Anyone is free to copy, modify, publish, use, compile, sell, or
+;; distribute this software, either in source code form or as a compiled
+;; binary, for any purpose, commercial or non-commercial, and by any
+;; means.
+
+;; In jurisdictions that recognize copyright laws, the author or authors
+;; of this software dedicate any and all copyright interest in the
+;; software to the public domain. We make this dedication for the benefit
+;; of the public at large and to the detriment of our heirs and
+;; successors. We intend this dedication to be an overt act of
+;; relinquishment in perpetuity of all present and future rights to this
+;; software under copyright law.
+
+;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+;; IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+;; OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+;; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+;; OTHER DEALINGS IN THE SOFTWARE.
+
+;; For more information, please refer to <https://unlicense.org>
+
+;;; Commentary:
+
+;; Move the current line up or down. Shamelessly copied from
+;; https://emacsredux.com/blog/2013/04/02/move-current-line-up-or-down/ so
+
+;;; Code:
+
+(defun +move/--normalise-arg (arg)
+ (if (or (null arg) (< arg 1))
+ 1
+ arg))
+
+(defmacro +move/create-move (name description &rest body)
+ `(defun ,name (&optional arg)
+ ,description
+ (interactive "P")
+ (let ((arg (+move/--normalise-arg arg)))
+ (while (not (= arg 0))
+ ,@body
+ (setq arg (- arg 1))))))
+
+(+move/create-move
+ +move/line-up
+ "Move the current line up"
+ (transpose-lines 1)
+ (forward-line -2)
+ (indent-according-to-mode))
+
+(+move/create-move
+ +move/line-down
+ "Move the current line down"
+ (forward-line 1)
+ (transpose-lines 1)
+ (forward-line -1)
+ (indent-according-to-mode))
+
+(+move/create-move
+ +move/word-forward
+ "Move the current word forward"
+ (forward-word 1)
+ (transpose-words 1)
+ (forward-word -1)
+ (indent-according-to-mode))
+
+(+move/create-move
+ +move/word-backward
+ "Move the current word backward"
+ (transpose-words 1)
+ (forward-word -2)
+ (indent-according-to-mode))
+
+(provide 'move)
+;;; move.el ends here