[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-numbers 30b13905a7 013/145: Move search and replace o
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/evil-numbers 30b13905a7 013/145: Move search and replace out of increment. |
Date: |
Thu, 6 Jan 2022 03:00:14 -0500 (EST) |
branch: elpa/evil-numbers
commit 30b13905a7df2b5ed98d7117cdfbd94c59153dc7
Author: Michael Markert <markert.michael@googlemail.com>
Commit: Michael Markert <markert.michael@googlemail.com>
Move search and replace out of increment.
Signed-off-by: Michael Markert <markert.michael@googlemail.com>
---
evil-numbers.el | 44 +++++++++++++++++++++++---------------------
1 file changed, 23 insertions(+), 21 deletions(-)
diff --git a/evil-numbers.el b/evil-numbers.el
index 8d19ab47bf..804cde1247 100644
--- a/evil-numbers.el
+++ b/evil-numbers.el
@@ -49,31 +49,15 @@
(error "No number at point or until end of line")
(or
;; find binary literals
- (when (looking-back "0[bB][01]*")
- (skip-chars-backward "01")
- (search-forward-regexp "[01]*")
- (replace-match
- (evil-numbers/format-binary (+ amount (string-to-number
(match-string 0) 2))
- (- (match-end 0) (match-beginning 0))))
- t)
+ (evil-numbers/search-and-replace "0[bB][01]*" "01" "\\([01]+\\)" amount
2)
;; find octal literals
- (when (looking-back "0[oO][0-7]*")
- (skip-chars-backward "01234567")
- (search-forward-regexp "[0-7]+")
- (replace-match
- (format (format "%%0%do" (- (match-end 0) (match-beginning 0)))
- (+ amount (string-to-number (match-string 0) 8))))
- t)
+ (evil-numbers/search-and-replace "0[oO][0-7]*" "01234567"
"\\([0-7]+\\)" amount 8)
;; find hex literals
- (when (looking-back "0[xX][0-9a-fA-F]*")
- (skip-chars-backward "0123456789abcdefABCDEF")
- (search-forward-regexp "[0-9a-fA-F]+")
- (replace-match
- (format (format "%%0%dX" (- (match-end 0) (match-beginning 0)))
- (+ amount (string-to-number (match-string 0) 16))))
- t)
+ (evil-numbers/search-and-replace "0[xX][0-9a-fA-F]*"
+ "0123456789abcdefABCDEF"
+ "\\([0-9a-fA-F]+\\)" amount 16)
;; find decimal literals
(progn
@@ -118,6 +102,24 @@ decimal: [0-9]+, e.g. 42 or 23"
;; skip format specifiers and interpret as bool
(<= 0 (skip-chars-forward "bBoOxX")))))
+(defun evil-numbers/search-and-replace (look-back skip-back search-forward inc
base)
+ "When looking back at `LOOK-BACK' skip chars `SKIP-BACK'backwards and
replace number incremented by `INC' in `BASE' and return non-nil."
+ (when (looking-back look-back)
+ (skip-chars-backward skip-back)
+ (search-forward-regexp search-forward)
+ (replace-match (evil-numbers/format (+ inc (string-to-number (match-string
1) base))
+ (length (match-string 1))
+ base))
+ t))
+
+(defun evil-numbers/format (num width base)
+ "Format `NUM' with at least `WIDTH' space in `BASE'"
+ (cond
+ ((= base 2) (evil-numbers/format-binary num width))
+ ((= base 8) (format (format "%%0%do" width) num))
+ ((= base 16) (format (format "%%0%dX" width) num))
+ (t "")))
+
(defun evil-numbers/format-binary (number &optional width fillchar)
"Format `NUMBER' as binary.
Fill up to `WIDTH' with `FILLCHAR' (defaults to ?0) if binary
- [nongnu] elpa/evil-numbers 29859e64c0 138/145: Add automated tests, resolve #22, (continued)
- [nongnu] elpa/evil-numbers 29859e64c0 138/145: Add automated tests, resolve #22, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 95fd1faf90 006/145: Use `while' instead of `do'., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b84ee09de1 012/145: Fix license., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 83b2ad44ff 010/145: Use lowercase and uppercase example., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers bd2359c96f 003/145: Fix provide., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 2301d66203 009/145: Fix docstrings of inc and dec., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 88de7e9622 007/145: Extract number search., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b3e906f734 022/145: Fix last glitches., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 6e13c0450a 030/145: Update documentation., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 0a376ace35 021/145: Add autoload comments., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 30b13905a7 013/145: Move search and replace out of increment.,
ELPA Syncer <=
- [nongnu] elpa/evil-numbers 9e2d6f721f 045/145: Support negative superscripts and fix padding of negative numbers, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 7ff262f36b 042/145: Support block selections, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 8da2221b7b 047/145: Make padding optional and off by default (can be configured), ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers cfa8650393 040/145: Remove extra &optional, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers f033965377 046/145: Support subscript numbers, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 154703dca7 048/145: Make binary, octal and hexadecimal numbers honour padDefault, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b711ef787e 035/145: Document keypad binding variants., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers cbbfd83c79 044/145: Merge https://github.com/unhammer/evil-numbers, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers ebfb368851 055/145: Create evil-numbers customisation group, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers d1b1f503a5 057/145: Autoload operators as interactive commands, ELPA Syncer, 2022/01/06