[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-numbers b754f53c82 039/145: support for increasing su
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/evil-numbers b754f53c82 039/145: support for increasing superscripts |
Date: |
Thu, 6 Jan 2022 03:00:17 -0500 (EST) |
branch: elpa/evil-numbers
commit b754f53c821218856764e89ba090b16503295e3e
Author: Kevin Brubeck Unhammer <unhammer@fsfe.org>
Commit: Kevin Brubeck Unhammer <unhammer@fsfe.org>
support for increasing superscripts
---
evil-numbers.el | 40 +++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/evil-numbers.el b/evil-numbers.el
index eb7c5dbb1e..492c4ab4a7 100644
--- a/evil-numbers.el
+++ b/evil-numbers.el
@@ -58,6 +58,29 @@
;;; Code:
+(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))))
+ (concat
+ (mapcar (lambda (digit)
+ (aref "⁰¹²³⁴⁵⁶⁷⁸⁹" (- digit 48)))
+ (number-to-string 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)))))
+
;;;###autoload
(defun evil-numbers/inc-at-pt (amount &optional no-region)
"Increment the number at point or after point before end-of-line by `amount'.
@@ -77,7 +100,7 @@ applying the regional features of
`evil-numbers/inc-at-point'.
(save-excursion
(save-match-data
(goto-char rb)
- (while (re-search-forward
"\\(?:0\\(?:[Bb][01]+\\|[Oo][0-7]+\\|[Xx][0-9A-Fa-f]+\\)\\|-?[0-9]+\\)" re t)
+ (while (re-search-forward
"\\(?:0\\(?:[Bb][01]+\\|[Oo][0-7]+\\|[Xx][0-9A-Fa-f]+\\)\\|-?[0-9]+\\|⁻?[⁰¹²³⁴⁵⁶⁷⁸⁹]\\)"
re t)
(evil-numbers/inc-at-pt amount 'no-region)
;; Undo vim compatability.
(forward-char 1)))))
@@ -97,7 +120,17 @@ applying the regional features of
`evil-numbers/inc-at-point'.
(evil-numbers/search-and-replace "0[xX][0-9a-fA-F]*"
"0123456789abcdefABCDEF"
"\\([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")
@@ -135,6 +168,7 @@ decimal: [0-9]+, e.g. 42 or 23"
(or
;; numbers or format specifier in front
(looking-back (rx (or (+? digit)
+ (in "⁰¹²³⁴⁵⁶⁷⁸⁹")
(and "0" (or (and (in "bB") (*? (in "01")))
(and (in "oO") (*? (in "0-7")))
(and (in "xX") (*? (in digit "A-Fa-f"))))))))
@@ -142,7 +176,7 @@ decimal: [0-9]+, e.g. 42 or 23"
;; match 0 of specifier or digit, being in a literal and after specifier is
;; handled above
(and
- (re-search-forward "[[:digit:]]" (point-at-eol) t)
+ (re-search-forward "[[:digit:]⁰¹²³⁴⁵⁶⁷⁸⁹]" (point-at-eol) t)
(or
(not (memq (char-after) '(?b ?B ?o ?O ?x ?X)))
(/= (char-before) ?0)
- [nongnu] elpa/evil-numbers 5ec72e6cb5 032/145: Add visual state key documentation., (continued)
- [nongnu] elpa/evil-numbers 5ec72e6cb5 032/145: Add visual state key documentation., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b1ba250f98 078/145: Cleanup: reduce right shift, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 027f8d586c 080/145: Fix #18 operating on bin/hex/octal failed w/ the cursor at the start, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 7ca411f4ac 100/145: CHANGELOG: use fullstops, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 8403eeb125 097/145: Correct oversight in 299e0418caa43cb7c15dd21d2dd40b75b147990f, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers af088b7107 107/145: Cleanup: < 80 chars, reduce right shift, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 407d62222e 126/145: Add separator character support (issue #23), ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers d5c40d2bd1 118/145: Cleanup: docstring line wrapping, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 0ddb39d98e 027/145: Stray paren fix, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 780db06056 018/145: Tag version 0.2., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b754f53c82 039/145: support for increasing superscripts,
ELPA Syncer <=
- [nongnu] elpa/evil-numbers fb16206158 054/145: Fix autoloading, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 4308935a03 061/145: Resolve looking-back warnings, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers aa94cd1b26 063/145: Merge pull request #11 from ideasman42/patch-1, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 5356111930 077/145: Cleanup: avoid let binding to set default values for arguments, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b54cc5ba35 076/145: Fix spelling, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers c37a4cf92a 092/145: Fix padding being ignored with block selection, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers e8dfba58c9 081/145: Cleanup: split skip characters matching out into a function, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 7602f3b484 101/145: Cleanup: split number incrementing into it's own function, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 3fe56219af 091/145: Cleanup: docstring, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b2397f278a 094/145: Cleanup: move forward character check in evil-numbers--search-number, ELPA Syncer, 2022/01/06