[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/speedrect 61d828134a 01/12: add increment/decrement on
From: |
ELPA Syncer |
Subject: |
[elpa] externals/speedrect 61d828134a 01/12: add increment/decrement on +/- |
Date: |
Mon, 16 Dec 2024 12:59:28 -0500 (EST) |
branch: externals/speedrect
commit 61d828134aeb31bc1286b885a9181b1cff5bc9e2
Author: JD Smith <93749+jdtsmith@users.noreply.github.com>
Commit: JD Smith <93749+jdtsmith@users.noreply.github.com>
add increment/decrement on +/-
---
speedrect.el | 48 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/speedrect.el b/speedrect.el
index 0c8a20704f..4c36e8fc3b 100644
--- a/speedrect.el
+++ b/speedrect.el
@@ -196,7 +196,41 @@ RECT (a list of strings)."
minimize (- (length s) (match-beginning 2)) into right
finally return (cons left right)))
-;;;; Calc integration
+;;;; Numerical/calc integration
+(defun speedrect--increment-first-number (startcol endcol increment)
+ "Increment the first number in the rectangle line by INCREMENT.
+The rectangle line spans columns from STARTCOL to ENDCOL."
+ (save-excursion
+ (let* ((width (- endcol startcol))
+ (end (progn (move-to-column startcol)
+ (min (+ (point) width) (line-end-position)))))
+ (cond
+ ((re-search-forward (rx (* space) "0x" (group (+ xdigit))) end t)
+ (let ((fmt (format "0x%%0%dx" (- (match-end 1) (match-beginning 1))))
+ (num (string-to-number (match-string-no-properties 1) 16)))
+ (replace-match (format fmt (+ num increment)))))
+ ((re-search-forward (rx (* space) (group (? (any ?- ?+)) (+ (any
"0-9")))) end t)
+ (let* ((txt (match-string-no-properties 1))
+ (prefix (if (= (aref txt 0) ?0) "0" ""))
+ (num (string-to-number txt 10))
+ (fmt (format "%%%s%dd" prefix (length txt))))
+ (replace-match (format fmt (+ num increment)))))))))
+
+(defun speedrect-increment-first-number (start end &optional increment)
+ "Increment the first integer or hexadecimal number in the rectangle.
+The rectangle spans from START to END. Increment is 1 by
+default, but can be set with INCREMENT."
+ (interactive "r\np")
+ (apply-on-rectangle #'speedrect--increment-first-number
+ start end (or increment 1)))
+
+(defun speedrect-decrement-first-number (start end &optional decrement)
+ "Decrement the first integer or hexadecimal number in the rectangle.
+The rectangle spans from START to END. Decrement is 1 by
+default, but can be set with DECREMENT."
+ (interactive "r\np")
+ (speedrect-increment-first-number start end (- (or decrement 1))))
+
(defun speedrect-yank-from-calc (start end)
"Yank matrix from top of calc stack, overwriting the marked rectangle.
START and END are the interactively-defined region beginning and
@@ -209,7 +243,7 @@ minimum of one padding space is preserved on each side of
the
inserted text."
(interactive "r")
(if-let* ((rectangle-mark-mode)
- (buf (get-buffer "*Calculator*")))
+ (buf (get-buffer "*Calculator*")))
(let* ((lines (with-current-buffer buf
(string-lines
(let ((calc-vector-brackets nil)
@@ -228,10 +262,11 @@ inserted text."
(wdth (length (car lines))) ; note: last line may differ
(low (max 0 (1- (car lr))))
(high (min 0 (- (1- (cdr lr))))))
- (apply-on-rectangle 'speedrect--replace-with-rect
+ (apply-on-rectangle #'speedrect--replace-with-rect
start end lines wdth low high)))
(user-error "Calc rectangle yank not possible here")))
+;;*
;;;; Multiple Cursors
(declare-function mc/edit-lines "mc-edit-lines")
(defun speedrect-multiple-cursors ()
@@ -327,6 +362,8 @@ Change Rectangle:\n
[l] last restore the last used rectangle, if possible\n
Numerical:\n
[N] numbers fill the rectangle with numbers (prefix to set start)
+ [-] decrement decrement the first number (prefix to set decrement)
+ [+/=] increment increment the first number (prefix to set increment)
[#] grab grab the rectangle as a matrix in calc
[_] across sum across rows and grab result in calc as a vector
[:] down sum down the columns and grab result in calc
@@ -392,7 +429,10 @@ prior to deactivating mark."
("S-<down>" speedrect-shift-down)
("M-S-<up>" speedrect-shift-up-fast)
("M-S-<down>" speedrect-shift-down-fast)
- ;; Calc commands
+ ;; Numerical/Calc commands
+ ("-" speedrect-decrement-first-number after)
+ ("+" speedrect-increment-first-number after)
+ ("=" speedrect-increment-first-number after)
("_" calc-grab-sum-across)
(":" calc-grab-sum-down)
("#" calc-grab-rectangle)
- [elpa] externals/speedrect updated (0a97e82913 -> 8cda38a010), ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect a3ac64cee9 02/12: docstring: remove outdated advice mention, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 2d9bdd37f1 04/12: speedrect-undo: restarting, using no region, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 1935a0266a 06/12: kill-rectangle: new option to preserve space on kill with prefix, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect cd7e2e71fe 09/12: help tweaks, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 14fa816ebb 10/12: Updated NEWS, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 06771a6d96 05/12: delete-ws: space-preserving left and right WS-deletion, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 896f577d06 08/12: replace-with-rect: move to column first to properly add spaces, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 94a9462ccf 03/12: increment: preserve space padding when possible, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 61d828134a 01/12: add increment/decrement on +/-,
ELPA Syncer <=
- [elpa] externals/speedrect 67bd27132c 07/12: fill: use last killed rectangle if selected rect is fully blank, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 8cda38a010 12/12: Update README.md, ELPA Syncer, 2024/12/16
- [elpa] externals/speedrect 50d793aaa1 11/12: README: added help info, ELPA Syncer, 2024/12/16