diff --git a/evil-collection.el b/evil-collection.el index 4c8c6cb..b2c70e2 100644 --- a/evil-collection.el +++ b/evil-collection.el @@ -106,6 +106,31 @@ This will bind additional find-* type commands, e.g. usages, assignments, etc.." :type 'boolean :group 'evil-collection) +(defvar evil-collection--modes-with-delayed-setup + `(eshell) + "List of modes whose keybinds aren't completely set up after the mode is +loaded. This can be a problem for cases where we're doing key translations +using `evil-collection-setup-hook' which would result in an empty keymap. + +Normally we run `evil-collection-setup-hook' right away after the mode +is loaded in `with-eval-after-load' (see `evil-collection-init') but for these +modes, we skip running that hook and let the corresponding `evil-collection' +package handle running `evil-collection-setup-hook'. + +Elements in this list either match a target mode symbol or the car of a list in +`evil-collection--supported-modes'. + +If `evil-collection-always-run-setup-hook-after-load' is t, this list isn't +read and `evil-collection-setup-hook' will be ran in the +`with-eval-after-load' block in `evil-collection-init'.") + +(defcustom evil-collection-always-run-setup-hook-after-load nil + "Whether to always run `evil-collection-setup-hook' after mode is loaded. + +See `evil-collection-init' and `evil-collection--modes-with-delayed-setup'." + :type 'boolean + :group 'evil-collection) + (defvar evil-collection--supported-modes `(2048-game ag @@ -803,8 +828,10 @@ instead of the modes in `evil-collection-mode-list'." (ignore-errors (symbol-value (intern (format "evil-collection-%s-maps" m)))))) - (run-hook-with-args 'evil-collection-setup-hook - m mode-keymaps)))))) + (when (or evil-collection-always-run-setup-hook-after-load + (not (memq m evil-collection--modes-with-delayed-setup))) + (run-hook-with-args 'evil-collection-setup-hook + m mode-keymaps))))))) (when evil-collection-want-unimpaired-p (evil-collection-require 'unimpaired) (evil-collection-unimpaired-setup))) diff --git a/modes/eshell/evil-collection-eshell.el b/modes/eshell/evil-collection-eshell.el index 6610ba4..23b3754 100644 --- a/modes/eshell/evil-collection-eshell.el +++ b/modes/eshell/evil-collection-eshell.el @@ -137,7 +137,12 @@ appropriate in some cases like terminals." "gk" 'eshell-previous-prompt "gj" 'eshell-next-prompt "0" 'eshell-bol - "^" 'eshell-bol)) + "^" 'eshell-bol) + + (evil-normalize-keymaps) + (unless evil-collection-always-run-setup-hook-after-load + (run-hook-with-args + 'evil-collection-setup-hook 'eshell evil-collection-eshell-maps))) ;; TODO: Compare this setup procedure with evil-ediff. ;;;###autoload