summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi R Kiran <aine.marina@gmail.com>2022-04-17 15:14:12 (GMT)
committerRavi R Kiran <aine.marina@gmail.com>2022-04-17 15:14:59 (GMT)
commit26067be3a4d90df83bcc9cd0364c185b6f2fa68b (patch)
treec6733f464bbab91e8844fa419dccf23b48188cfa
parent44114c64270223bf7f85d1a34fe247dca9b71e12 (diff)
downloaddotemacs-26067be3a4d90df83bcc9cd0364c185b6f2fa68b.zip
dotemacs-26067be3a4d90df83bcc9cd0364c185b6f2fa68b.tar.gz
dotemacs-26067be3a4d90df83bcc9cd0364c185b6f2fa68b.tar.bz2
Easy kill extras and nicer hints
-rw-r--r--lisp/ravi-init-navigation.el82
1 files changed, 70 insertions, 12 deletions
diff --git a/lisp/ravi-init-navigation.el b/lisp/ravi-init-navigation.el
index 1f1770b..f2aafda 100644
--- a/lisp/ravi-init-navigation.el
+++ b/lisp/ravi-init-navigation.el
@@ -289,19 +289,44 @@
nil)))
(when on-exit-with-map (lambda () (funcall on-exit-with-map map))))))
+ (defun ravi/concat-easy-kill-hints (hints max-size)
+ (let ((current-line-size 0)
+ (current-hint-size)
+ (result ""))
+ (dolist (hint hints)
+ (setq current-hint-size (1+ (length hint)))
+ (when (> (+ current-line-size current-hint-size) max-size)
+ (setq result (concat result "\n"))
+ (setq current-line-size 0))
+ (setq result (concat result " " hint))
+ (setq current-line-size (+ current-line-size current-hint-size)))
+ result))
+
(defun ravi/easy-kill-make-hint-message ()
- (let ((basic "+=:expand -:shrink SPC:cycle @:append 0:original 1-9:more ?:help")
- (remapped-basic (mapconcat 'identity
- (delq nil (mapcar
- (lambda (c)
- (when-let ((binding (where-is-internal (car c) nil t)))
- (concat (key-description binding) ":" (symbol-name (car c)))))
- (cdr (alist-get 'remap easy-kill-base-map))))
- " "))
- (configurable (mapconcat (lambda (item)
- (concat (char-to-string (car item)) ":" (symbol-name (cadr item))))
- easy-kill-alist " ")))
- (concat basic "\n" remapped-basic "\n" configurable)))
+ (let* ((hint-maker (lambda (key-desc)
+ (concat (propertize (car key-desc) 'face 'font-lock-keyword-face) ":" (cdr key-desc))))
+ (basic (mapcar hint-maker '(("+=" . "expand")
+ ("-" . "shrink")
+ ("SPC" . "cycle")
+ ("@" . "append")
+ ("0" . "original")
+ ("1-9" . "more")
+ ("?" . "help"))))
+ (remapped-basic (delq nil (mapcar
+ (lambda (c)
+ (when-let ((binding (where-is-internal (car c) nil t)))
+ (funcall hint-maker
+ (cons (propertize (key-description binding) 'face 'font-lock-keyword-face)
+ (symbol-name (car c))))))
+ (cdr (alist-get 'remap easy-kill-base-map)))))
+ (configurable (mapcar (lambda (item)
+ (funcall hint-maker
+ (cons (propertize (char-to-string (car item)) 'face 'font-lock-keyword-face)
+ (symbol-name (cadr item)))))
+ easy-kill-alist)))
+ (mapconcat (lambda (hints) (ravi/concat-easy-kill-hints hints (window-width (minibuffer-window))))
+ (list basic remapped-basic configurable)
+ "\n")))
(defvar ravi/easy-kill-hint-delay 2.0
"Delay before easy-kill hints are shown")
@@ -324,6 +349,39 @@
(advice-add 'easy-kill-activate-keymap :override #'ravi/easy-kill-activate-keymap)
)
+(use-package easy-kill-extras
+ :after (easy-kill)
+ :init
+ (setq easy-kill-ace-jump-enable-p nil) ; we use avy instead of ace-jump
+ :config
+ (bind-key "o" 'easy-kill-er-expand easy-kill-base-map)
+ (bind-key "i" 'easy-kill-er-unexpand easy-kill-base-map)
+ (require 'extra-things)
+ (dolist (cmd '((?^ backward-line-edge "")
+ (?$ forward-line-edge "")
+ (?a buffer "")
+ (?f string-to-char-forward "")
+ (?F string-up-to-char-forward "")
+ (?t string-to-char-backward "")
+ (?T string-up-to-char-backward "")
+ ;; The rest come from extra-things
+ (?W WORD " ")
+ (?\' squoted-string "")
+ (?\" dquoted-string "")
+ (?\` bquoted-string "")
+ (?q quoted-string "")
+ (?Q quoted-string-universal "")
+ (?\) parentheses-pair-content "\n")
+ (?\( parentheses-pair "\n")
+ (?\] brackets-pair-content "\n")
+ (?\[ brackets-pair "\n")
+ (?} curlies-pair-content "\n")
+ (?{ curlies-pair "\n")
+ (?> angles-pair-content "\n")
+ (?< angles-pair "\n")))
+ (add-to-list 'easy-kill-alist cmd))
+ )
+
;; grep and friends
(use-package wgrep