[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-numbers 9e2d6f721f 045/145: Support negative superscr
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/evil-numbers 9e2d6f721f 045/145: Support negative superscripts and fix padding of negative numbers |
Date: |
Thu, 6 Jan 2022 03:00:17 -0500 (EST) |
branch: elpa/evil-numbers
commit 9e2d6f721f9d36c93502f2de20a61d53963ca92b
Author: Jan Path <jan@jpath.de>
Commit: Jan Path <jan@jpath.de>
Support negative superscripts and fix padding of negative numbers
Previously negative numbers were not padded at all. Specifically calling
inc-at-pt on -1 yields +1.
---
evil-numbers.el | 85 ++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 51 insertions(+), 34 deletions(-)
diff --git a/evil-numbers.el b/evil-numbers.el
index a4610ec8d9..b0e55a2ab4 100644
--- a/evil-numbers.el
+++ b/evil-numbers.el
@@ -58,28 +58,35 @@
;;; Code:
+(defconst evil-superscript-alist
+ (cons
+ (cons ?⁻ ?-)
+ (cons
+ (cons ?⁺ ?+)
+ (mapcar (lambda (i) (cons (aref "⁰¹²³⁴⁵⁶⁷⁸⁹" i)
+ (string-to-char (number-to-string i))))
+ (number-sequence 0 9)))))
+
(defun evil-number-to-superscript (number)
"Turn NUMBER like 29 into superscript like ²⁹.
If argument is a string, uses `number-to-string' on it."
(let ((number (if (numberp number)
- number
- (number-to-string number))))
+ (number-to-string number)
+ number)))
(concat
(mapcar (lambda (digit)
- (aref "⁰¹²³⁴⁵⁶⁷⁸⁹" (- digit 48)))
- (number-to-string number)))))
+ (cdr (assoc digit (mapcar
+ (lambda (x) (cons (cdr x) (car x)))
+ evil-superscript-alist))))
+ number))))
(defun evil-superscript-to-number (string)
"Turn a superscript-number STRING like ²⁹ into a regular number like 29."
- (let ((map ; (⁰ . ?0)
- (mapcar (lambda (i) (cons (aref "⁰¹²³⁴⁵⁶⁷⁸⁹" i)
- (aref (number-to-string i) 0)))
- (number-sequence 0 9))))
- (string-to-number
- (concat
- (mapcar (lambda (c)
- (cdr (assoc c map)))
- string)))))
+ (string-to-number
+ (concat
+ (mapcar (lambda (c)
+ (cdr (assoc c evil-superscript-alist)))
+ string))))
;;;###autoload
(evil-define-operator evil-numbers/inc-at-pt (amount beg end type &optional
incremental)
@@ -134,27 +141,37 @@ INCREMENTAL causes the first number to be increased by
1*amount, the second by
"\\([0-9a-fA-F]+\\)" amount 16)
;; find superscript literals
- (progn
- (skip-chars-backward "⁰¹²³⁴⁵⁶⁷⁸⁹")
- (when (looking-at "⁻?\\([⁰¹²³⁴⁵⁶⁷⁸⁹]+\\)")
- (replace-match
- (format (format "%%0%ds" (- (match-end 1) (match-beginning 1)))
- (evil-number-to-superscript
- (+ amount (evil-superscript-to-number (match-string
0))))))
- ;; Moves point one position back to conform with Vim
- (forward-char -1)
- t))
- ;; find decimal literals
- (progn
- (skip-chars-backward "0123456789")
- (skip-chars-backward "-")
- (when (looking-at "-?\\([0-9]+\\)")
- (replace-match
- (format (format "%%0%dd" (- (match-end 1) (match-beginning 1)))
- (+ amount (string-to-number (match-string 0) 10))))
- ;; Moves point one position back to conform with Vim
- (forward-char -1)
- t))
+ (let ((pad
+ (lambda (len sign arg)
+ (format
+ (format "%%%s0%dd" (if sign "+" "") len)
+ arg))))
+ (progn
+ (skip-chars-backward "⁺⁻⁰¹²³⁴⁵⁶⁷⁸⁹")
+ (when (looking-at "\\(⁻\\|⁺\\)?[⁰¹²³⁴⁵⁶⁷⁸⁹]+")
+ (replace-match
+ (evil-number-to-superscript
+ (funcall
+ pad
+ (- (match-end 0) (match-beginning 0))
+ (memq (string-to-char (match-string 0)) '(?⁺ ?⁻))
+ (+ amount (evil-superscript-to-number (match-string 0))))))
+ ;; Moves point one position back to conform with Vim
+ (forward-char -1)
+ t))
+ ;; find decimal literals
+ (progn
+ (skip-chars-backward "+-0123456789")
+ (when (looking-at "\\(-\\|+\\)?[0-9]+")
+ (replace-match
+ (funcall
+ pad
+ (- (match-end 0) (match-beginning 0))
+ (memq (string-to-char (match-string 0)) '(?+ ?-))
+ (+ amount (string-to-number (match-string 0)))))
+ ;; Moves point one position back to conform with Vim
+ (forward-char -1)
+ t)))
(error "No number at point or until end of line")))))))
;;;###autoload
- [nongnu] elpa/evil-numbers 95fd1faf90 006/145: Use `while' instead of `do'., (continued)
- [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, 2022/01/06
- [nongnu] elpa/evil-numbers 9e2d6f721f 045/145: Support negative superscripts and fix padding of negative numbers,
ELPA Syncer <=
- [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
- [nongnu] elpa/evil-numbers d988041c1f 056/145: List myself as maintainer, ELPA Syncer, 2022/01/06