Xah Talk Show 2025-01-23 Ep609 Emacs Lisp Coding, xah-increment-digit
vidthumb CpDDAoCDfZ4
xah talk show terminal retro 2025-01-23 190737
- modification needed:
- work on only one digit
- if there is no digit, insert 1
- don't go into negative
- if reach 9, go to 0.
(defun xah-increment-digit ()
"Increment digit under cursor.
If under cursor is not a digit, simply insert 1.
When reaches 9, goto 0. Vice versa.
Use arrow up/down keys to increment or decrement.
Or scroll wheel.
Created: 2025-01-23
Version: 2025-01-23"
(interactive)
(let (xchar)
(if (eq (point-min) (point))
(insert "1")
(progn
(setq xchar (buffer-substring-no-properties (1- (point)) (point)))
(if (string-match "[0-9]" xchar)
(progn
(delete-char -1)
(insert
(if (string-equal xchar "9")
"0"
(number-to-string (1+ (string-to-number xchar))))))
(insert "1")))))
(set-transient-map
(let ((xkmap (make-sparse-keymap)))
(keymap-set xkmap "<up>" 'xah-increment-digit)
(keymap-set xkmap "<down>" 'xah-decrement-digit)
(keymap-set xkmap "<wheel-up>" 'xah-increment-digit)
(keymap-set xkmap "<wheel-down>" 'xah-decrement-digit)
xkmap)))
(defun xah-decrement-digit ()
"Decrement digit under cursor.
If under cursor is not a digit, simply insert 1.
When reaches 0, goto 9. Vice versa.
Use arrow up/down keys to decrement or decrement.
Or scroll wheel.
Created: 2025-01-23
Version: 2025-01-23"
(interactive)
(let (xchar)
(setq xchar (buffer-substring-no-properties (1- (point)) (point)))
(if (string-match "[0-9]" xchar)
(progn
(delete-char -1)
(insert
(if (string-equal xchar "0")
"9"
(number-to-string (1- (string-to-number xchar))))))
(insert "1")))
(set-transient-map
(let ((xkmap (make-sparse-keymap)))
(keymap-set xkmap "<up>" 'xah-increment-digit)
(keymap-set xkmap "<down>" 'xah-decrement-digit)
(keymap-set xkmap "<wheel-up>" 'xah-increment-digit)
(keymap-set xkmap "<wheel-down>" 'xah-decrement-digit)
xkmap)))