From ae40145403cd0a43f827aaefaa50d7cc8229a699 Mon Sep 17 00:00:00 2001 From: Ravi R Kiran Date: Sun, 10 Oct 2021 15:49:35 -0500 Subject: Post facto window selection 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\\)\\*" -- cgit v0.10.1