summaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ravi-init-completion.el39
1 files changed, 39 insertions, 0 deletions
diff --git a/lisp/ravi-init-completion.el b/lisp/ravi-init-completion.el
index 7ade2fb..a722ad4 100644
--- a/lisp/ravi-init-completion.el
+++ b/lisp/ravi-init-completion.el
@@ -97,6 +97,45 @@
(interactive "GFile: ")
(magit-status (locate-dominating-file file ".git")))
+ ;; Ace window dispatch on embark actions
+ ;; Different implementation, but the idea is from:
+ ;; https://karthinks.com/software/fifteen-ways-to-use-embark/
+ (eval-when-compile
+ (defun ravi/embark-ace-action (fn)
+ `(defun ,(intern (concat "ravi/embark-ace-" (symbol-name fn))) ()
+ (interactive)
+ (with-demoted-errors "%s"
+ (require 'ace-window)
+ (aw-switch-to-window (aw-select nil))
+ (call-interactively (symbol-function ',fn)))))
+ (defun ravi/embark-ace-split-action (fn split-type)
+ `(defun ,(intern (concat "ravi/embark-"
+ (symbol-name fn)
+ "-"
+ (car (last (split-string
+ (symbol-name split-type) "-"))))) ()
+ (interactive)
+ (when-let ((new-window (funcall #',split-type)))
+ (select-window new-window))
+ (call-interactively #',fn)))
+ (defun ravi/make-embark-ace-actions (keymap-func)
+ (let* ((keymap (car keymap-func))
+ (func (cadr keymap-func))
+ (func-name (symbol-name func)))
+ `(progn
+ (define-key ,keymap (kbd "o") ,(ravi/embark-ace-action func))
+ (define-key ,keymap (kbd "2") ,(ravi/embark-ace-split-action func #'split-window-right))
+ (define-key ,keymap (kbd "3") ,(ravi/embark-ace-split-action func #'split-window-below)))))
+ (defmacro ravi/make-embark-ace-actions-all-macro (keymap-func-list)
+ `(progn
+ ,@(mapcar #'ravi/make-embark-ace-actions keymap-func-list))))
+ (ravi/make-embark-ace-actions-all-macro ((embark-file-map find-file)
+ (embark-buffer-map switch-to-buffer)
+ (embark-bookmark-map bookmark-jump)))
+ ;; For debugging below:
+ ;; (pp (macroexpand '(ravi/make-embark-ace-actions-all-macro
+ ;; ((embark-file-map find-file)))))
+
;; Hide the mode line of the Embark live/completions buffers
(add-to-list 'display-buffer-alist
'("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"