diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-04-27 14:42:15 +0530 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-04-27 15:09:46 +0530 |
commit | 870ce03d0279bc1ce7215c311b061d68c95fdbc1 (patch) | |
tree | ccbdb0d3576055d5427afd923856fcc55aa3b8d7 /Emacs/.config | |
parent | eb5b11e71bfc3a9f8cacd47fa747b05e19479f27 (diff) | |
download | dotfiles-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')
-rw-r--r-- | Emacs/.config/emacs/config.org | 25 | ||||
-rw-r--r-- | Emacs/.config/emacs/core.org | 8 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/move.el | 85 |
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 |