aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--Emacs/.config/emacs/config.org25
-rw-r--r--Emacs/.config/emacs/core.org8
-rw-r--r--Emacs/.config/emacs/elisp/move.el85
3 files changed, 95 insertions, 23 deletions
diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org
index 56beaf2..f962021 100644
--- a/Emacs/.config/emacs/config.org
+++ b/Emacs/.config/emacs/config.org
@@ -190,26 +190,11 @@ any buffers in ~+oreo/keep-buffer~ and kills the rest.
(kill-buffer buf)))
(buffer-list)))
#+end_src
-** Move line {up/down}
-Shamelessly copied from
-[[https://emacsredux.com/blog/2013/04/02/move-current-line-up-or-down/][this
-article]]. Will be bound in [[file:core.org::*Some binds in
-Emacs][core.org]].
-#+begin_src emacs-lisp
-(defun move-line-up ()
- "Move up the current line."
- (interactive)
- (transpose-lines 1)
- (forward-line -2)
- (indent-according-to-mode))
-
-(defun move-line-down ()
- "Move down the current line."
- (interactive)
- (forward-line 1)
- (transpose-lines 1)
- (forward-line -1)
- (indent-according-to-mode))
+** Move
+Allows {hjkl} movement of text objects. Will be bound in
+[[file:core.org::*Some binds in Emacs][core.org]].
+#+begin_src emacs-lisp
+(load-file (concat user-emacs-directory "elisp/move.el"))
#+end_src
* Aesthetics
General look and feel of Emacs (mostly disabling stuff I don't like).
diff --git a/Emacs/.config/emacs/core.org b/Emacs/.config/emacs/core.org
index 5298760..4756e46 100644
--- a/Emacs/.config/emacs/core.org
+++ b/Emacs/.config/emacs/core.org
@@ -119,9 +119,11 @@ Some bindings that I couldn't fit elsewhere easily.
("C-x d" #'delete-frame)
(nmmap
- :keymaps 'override
- "C-M-j" #'move-line-down
- "C-M-k" #'move-line-up)
+ :keymaps '(text-mode-map prog-mode-map)
+ "C-M-h" #'+move/word-backward
+ "C-M-j" #'+move/line-down
+ "C-M-k" #'+move/line-up
+ "C-M-l" #'+move/word-forward)
(nmmap
"C--" #'text-scale-decrease
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