diff options
| author | Ravi R Kiran <aine.marina@gmail.com> | 2021-11-15 04:24:17 (GMT) |
|---|---|---|
| committer | Ravi R Kiran <aine.marina@gmail.com> | 2021-11-15 04:24:17 (GMT) |
| commit | 5ab7ef068ed223dac0f3d9e5bd0ceb9ac9b69203 (patch) | |
| tree | 1557043938e57d2ddd550c7d9ab89981d3ff9aab /lisp | |
| parent | fae2c3016c6d36bfdf19e615680fd486ea4a1b74 (diff) | |
| download | dotemacs-5ab7ef068ed223dac0f3d9e5bd0ceb9ac9b69203.zip dotemacs-5ab7ef068ed223dac0f3d9e5bd0ceb9ac9b69203.tar.gz dotemacs-5ab7ef068ed223dac0f3d9e5bd0ceb9ac9b69203.tar.bz2 | |
Supercharge avy
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ravi-init-completion.el | 23 | ||||
| -rw-r--r-- | lisp/ravi-init-navigation.el | 81 |
2 files changed, 96 insertions, 8 deletions
diff --git a/lisp/ravi-init-completion.el b/lisp/ravi-init-completion.el index 6adf270..a315f20 100644 --- a/lisp/ravi-init-completion.el +++ b/lisp/ravi-init-completion.el @@ -79,7 +79,7 @@ :config (marginalia-mode)) (use-package embark :if (member ravi/use-selection-system '(selectrum vertico)) - :after (sudo-edit vlf) + :after (sudo-edit vlf avy ace-window) :commands (embark-act) :bind (("H-t" . embark-act) :map @@ -140,7 +140,17 @@ (add-to-list 'display-buffer-alist '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*" nil - (window-parameters (mode-line-format . none))))) + (window-parameters (mode-line-format . none)))) + + ;; Integrate embark with avy + (defun avy-action-embark (pt) + (unwind-protect + (save-excursion + (goto-char pt) + (embark-act)) + (select-window (cdr (ring-ref avy-ring 0)))) + t) + (setf (alist-get ?E avy-dispatch-alist) 'avy-action-embark)) (use-package consult :if (member ravi/use-selection-system '(selectrum vertico)) @@ -324,6 +334,7 @@ (use-package dash-docs :if (member ravi/use-selection-system '(selectrum vertico)) + :after (avy) :bind (("M-s d" . 'ravi/dash) ("M-s D" . 'ravi/dash-at-point)) :config @@ -398,6 +409,14 @@ INITIAL will be used as the initial input, if given." (ravi/dash--browse-matching-result result) (add-to-list 'ravi/dash-history-input sym-only)) (user-error "No symbol at point or documentation not found"))) + + (defun avy-action-dash-at-point (pt) + (save-excursion + (goto-char pt) + (ravi/dash-at-point)) + (select-window (cdr (ring-ref avy-ring 0))) + t) + (setf (alist-get ?D avy-dispatch-alist) 'avy-action-dash-at-point) ) (use-package consult-dir diff --git a/lisp/ravi-init-navigation.el b/lisp/ravi-init-navigation.el index bc369f7..54c4f52 100644 --- a/lisp/ravi-init-navigation.el +++ b/lisp/ravi-init-navigation.el @@ -52,15 +52,84 @@ res)))) (use-package avy - :bind (("M-h" . avy-goto-word-1) - ("M-H" . avy-goto-word-0) + :bind (("M-H" . avy-goto-word-1) + ("M-h" . avy-goto-char-timer) ("M-g g" . avy-goto-line) ("M-g M-g" . avy-goto-line)) :config - (progn - (setq avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?r ?u ?t ?y ?w ?o ?e ?i)) - (setq avy-style 'at-full - avy-background t))) + ;; Many of these from: https://karthinks.com/software/avy-can-do-anything/ + + ;; Fix dispatch help + (defun avy-show-dispatch-help () + (let* ((len (length "avy-action-")) + (fw (frame-width)) + (raw-strings (mapcar + (lambda (x) + (format "%2s: %-19s" + (propertize + (char-to-string (car x)) + 'face 'aw-key-face) + (substring (symbol-name (cdr x)) len))) + avy-dispatch-alist)) + (max-len (1+ (apply #'max (mapcar #'length raw-strings)))) + (strings-len (length raw-strings)) + (per-row (floor fw max-len)) + display-strings) + (cl-loop for string in raw-strings + for N from 1 to strings-len do + (push (concat string " ") display-strings) + (when (= (mod N per-row) 0) (push "\n" display-strings))) + (message "%s" (apply #'concat (nreverse display-strings))))) + + ;; Kill text + (defun avy-action-kill-whole-line (pt) + (save-excursion + (goto-char pt) + (kill-whole-line)) + (select-window (cdr (ring-ref avy-ring 0))) + t) + (setf (alist-get ?k avy-dispatch-alist) 'avy-action-kill-stay + (alist-get ?k avy-dispatch-alist) 'avy-action-kill-whole-line) + + ;; Copy text + (defun avy-action-copy-whole-line (pt) + (save-excursion + (goto-char pt) + (cl-destructuring-bind (start . end) + (bounds-of-thing-at-point 'line) + (copy-region-as-kill start end))) + (select-window (cdr (ring-ref avy-ring 0))) + t) + (setf (alist-get ?w avy-dispatch-alist) 'avy-action-copy + (alist-get ?W avy-dispatch-alist) 'avy-action-copy-whole-line) + + ;; Yank text + (defun avy-action-yank-whole-line (pt) + (avy-action-copy-whole-line pt) + (save-excursion (yank)) + t) + (setf (alist-get ?y avy-dispatch-alist) 'avy-action-yank + (alist-get ?Y avy-dispatch-alist) 'avy-action-yank-whole-line) + + ;; Transpose/Move text + (defun avy-action-teleport-whole-line (pt) + (avy-action-kill-whole-line pt) + (save-excursion (yank)) t) + (setf (alist-get ?t avy-dispatch-alist) 'avy-action-teleport + (alist-get ?T avy-dispatch-alist) 'avy-action-teleport-whole-line) + + ;; Mark text + (defun avy-action-mark-to-char (pt) + (activate-mark) + (goto-char pt)) + (setf (alist-get ?\s avy-dispatch-alist) 'avy-action-mark-to-char) + + ;; Any custom actions should not be preempted + (let ((key-list '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?r ?u ?t ?y ?w ?o ?e ?i))) + (setq avy-keys (seq-filter (lambda (k) (not (alist-get k avy-dispatch-alist))) key-list))) + + (setq avy-style 'at-full) + (setq avy-background t)) (use-package jump-char :bind (("M-m" . jump-char-forward))) |
