diff --git a/lang/clojure.el b/lang/clojure.el index cb1bc07..a5ed411 100644 --- a/lang/clojure.el +++ b/lang/clojure.el @@ -5,9 +5,7 @@ (require '+custom-pkg-prog-mode "$HOME/.emacs.d/pkg/prog-mode.el") (require '+custom-pkg-hydra "$HOME/.emacs.d/pkg/hydra.el") -(use-package clojure-mode - :defer t - :straight t) +(use-package clojure-mode :defer t :straight t) (use-package cider :requires clojure-mode @@ -22,25 +20,19 @@ :straight t) ;; Hydra -(defhydra my-clojure/context-hydra (:color teal :hint nil) - " -^ -^ Cider ^^Buffer -^──────────────────────────────────────────────────────────────────────────────── -^ _j_: Jack in _r_: Reload -^ _t_: Test _f_: Format -^ ^ ^ _l_: Load -^ ^ ^ _e_: Show Errors -^ -" - ("q" nil "cancel" :color blue) - - ("r" revert-buffer-no-confirm) - ("j" cider-jack-in) - ("f" cider-format-buffer) - ("l" cider-load-buffer) - ("e" flycheck-list-errors) - ("t" cider-test-run-loaded-tests)) +(transient-define-prefix +my-transient-cider-context-menu () + "Clojure Buffer Commands" + ["" + ["Cider" + ("j" "Jack in" cider-jack-in) + ("t" "Test" cider-test-run-loaded-tests)] + ["Buffer" + ("r" "Reload" revert-buffer-no-confirm) + ("f" "Format" cider-format-buffer) + ("l" "Load" cider-load-buffer) + ("e" "Show Errors" flycheck-list-errors)]] + ["" + ("q" "Quit" keyboard-quit)]) (defun activate-my-clojure-mode () "Goodies for clojure files." @@ -50,7 +42,7 @@ (cider-mode 1) (setq-local indent-tabs-mode nil) - (define-key clojure-mode-map (kbd "C-c l") 'my-clojure/context-hydra/body) + (define-key clojure-mode-map (kbd "C-c l") '+my-transient-cider-context-menu) ;; Do not enable paredit for clojure ;; (paredit-mode 1) diff --git a/lang/elixir.el b/lang/elixir.el index 6ef4435..edf653c 100644 --- a/lang/elixir.el +++ b/lang/elixir.el @@ -10,23 +10,18 @@ (add-to-list 'auto-mode-alist '("\\.heex\\'" . elixir-mode)) -(defhydra my-elixir/context-hydra (:color teal :hint nil) - " -^ -^ LSP ^^Buffer -^──────────────────────────────────────────────────────────────────────────────── -^ _m_: iMenu _r_: Reload -^^^ _f_: Format -^^^ _i_: Indent -^^^ _e_: Show Errors -^ -" - ("q" nil "cancel" :color blue) - ("r" revert-buffer-no-confirm) - ("i" mark-and-indent-whole-buffer) - ("f" elixir-format) - ("e" flycheck-list-errors) - ("m" lsp-ui-imenu)) +(transient-define-prefix +my-transient-elixir-context-menu () + "Elixir Buffer Commands" + ["" + ["LSP" + ("m" "iMenu" lsp-ui-imenu)] + ["Buffer" + ("r" "Reload" revert-buffer-no-confirm) + ("f" "Format" elixir-format) + ("i" "Indent" mark-and-indent-whole-buffer) + ("e" "Show Errors" flycheck-list-errors)]] + ["" + ("q" "Quit" keyboard-quit)]) (defun activate-elixir-mode () "All things Elixir." @@ -41,7 +36,7 @@ ;; If needed, switch the one below to false to disable documentation pop-ups ;; (setq-local lsp-ui-doc-enable t) - (define-key elixir-mode-map (kbd "C-c l") 'my-elixir/context-hydra/body) + (define-key elixir-mode-map (kbd "C-c l") '+my-transient-elixir-context-menu) ;; Company list override (add-to-list (make-local-variable 'company-backends) diff --git a/lang/fsharp.el b/lang/fsharp.el index 692a3c1..4dfac94 100644 --- a/lang/fsharp.el +++ b/lang/fsharp.el @@ -18,29 +18,11 @@ :straight t :defer t) -(defhydra my-fsharp/context-hydra (:color teal :hint nil) - " -^ -^ FSharp actions^ -^──────────────────────────────────────────────────────────────────────────────── -^ _r_: Reload buffer _f_: Format buffer -^ _i_: Indent buffer _m_: iMenu -^ _e_: Show errors -" - ("q" nil "cancel" :color blue) - - ("r" revert-buffer-no-confirm) - ("i" indent-region) - ("e" flycheck-list-errors) - ("f" lsp-format-buffer) - ("m" lsp-ui-imenu)) - (defun activate-fsharp-mode () "Activate F# goodies." (set-indent 4) (column-enforce-n 100) (lsp-deferred) - (define-key fsharp-mode-map (kbd "C-c l") 'my-fsharp/context-hydra/body) ;; Company list override (add-to-list (make-local-variable 'company-backends) diff --git a/lang/haskell.el b/lang/haskell.el index 9007976..6cf60b1 100644 --- a/lang/haskell.el +++ b/lang/haskell.el @@ -25,31 +25,11 @@ :config (setq lsp-haskell-process-path-hie "haskell-language-server-wrapper")) -(defhydra my-haskell/context-hydra (:color teal :hint nil) - " -^ -^ LSP ^^Buffer -^──────────────────────────────────────────────────────────────────────────────── -^ _m_: iMenu _r_: Reload -^ ^ ^ _f_: Format -^ ^ ^ _i_: Indent -^ ^ ^ _e_: Show Errors -^ -" - ("q" nil "cancel" :color blue) - - ("r" revert-buffer-no-confirm) - ("i" indent-region) - ("f" lsp-format-buffer) - ("e" flycheck-list-errors) - ("m" lsp-ui-imenu)) - (defun activate-haskell-mode () "Run this in haskell-mode." (set-indent 2) (column-enforce-n 80) (lsp) - (define-key haskell-mode-map (kbd "C-c l") 'my-haskell/context-hydra/body) ;; Company list override (add-to-list (make-local-variable 'company-backends) diff --git a/lang/ocaml.el b/lang/ocaml.el index 3a57912..dc4f603 100644 --- a/lang/ocaml.el +++ b/lang/ocaml.el @@ -23,22 +23,17 @@ :defer t :straight t) - -(defhydra my-ocaml/context-hydra (:color teal :hint nil) - " -^ -^ OCaml actions -^──────────────────────────────────────────────────────────────────────────────── -^ _r_: Reload _f_: Format -^ _i_: Indent _o_: Opam env -^ -" - ("q" nil "cancel" :color blue) - - ("r" revert-buffer-no-confirm) - ("i" mark-and-indent-whole-buffer) - ("f" ocamlformat) - ("o" tuareg-opam-update-env)) +(transient-define-prefix +my-transient-ocaml-context-menu () + "Ocaml Actions" + ["OCaml actions" + ["" + ("r" "Reload" revert-buffer-no-confirm) + ("i" "Indent" mark-and-indent-whole-buffer)] + ["" + ("f" "Format" ocamlformat) + ("e" "Opam Env" tuareg-opam-update-env)]] + ["" + ("q" "Quit" keyboard-quit)]) (defun load-ocaml-site-packages () "Generate ocaml config." @@ -53,7 +48,7 @@ ;; Use opam switch to lookup ocamlmerlin binary (setq merlin-command 'opam))) - (define-key tuareg-mode-map (kbd "C-c l") 'my-ocaml/context-hydra/body)) + (define-key tuareg-mode-map (kbd "C-c l") '+my-transient-ocaml-context-menu)) ;; OCaml setup (add-hook 'tuareg-mode-hook 'merlin-mode) @@ -71,24 +66,23 @@ ;; Use tuareg-opam with lock files (add-to-list 'auto-mode-alist '("\\.opam.locked\\'" . tuareg-opam-mode)) -(defhydra my-reason/context-hydra (:color teal :hint nil) - " -^ -^ Reason actions -^──────────────────────────────────────────────────────────────────────────────── -^ _r_: Reload _f_: Format -^ _o_: Opam env -^ -" - ("q" nil "cancel" :color blue) +(transient-define-prefix +my-transient-reasonml-context-menu () + "ReasonML Actions" + ["ReasonML actions" + ["" + ("r" "Reload" revert-buffer-no-confirm) + ("i" "Indent" mark-and-indent-whole-buffer)] + ["" + ("f" "Format" refmt) + ("e" "Opam Env" tuareg-opam-update-env)]] + ["" + ("q" "Quit" keyboard-quit)]) - ("f" refmt) - ("r" revert-buffer-no-confirm) - ("o" tuareg-opam-update-env)) (defun my-reason-mode () "Generate reason config." - (define-key reason-mode-map (kbd "C-c l") 'my-reason/context-hydra/body)) + (define-key + reason-mode-map (kbd "C-c l") '+my-transient-reasonml-context-menu)) ;; Reason setup (add-hook 'reason-mode-hook diff --git a/lang/php.el b/lang/php.el index bf30cbd..6d8ed98 100644 --- a/lang/php.el +++ b/lang/php.el @@ -18,31 +18,26 @@ :requires (lsp-mode lsp-ui) :straight t) -(defhydra my-php/context-hydra (:color teal :hint nil) - " -^ -^ LSP ^^Buffer -^──────────────────────────────────────────────────────────────────────────────── -^ _m_: iMenu _r_: Reload -^ ^ ^ _f_: Format -^ ^ ^ _i_: Indent -^ ^ ^ _e_: Show Errors -^ -" - ("q" nil "cancel" :color blue) +(transient-define-prefix +my-transient-php-context-menu () + "PHP Buffer Commands" + ["" + ["LSP" + ("m" "iMenu" lsp-ui-imenu)] + ["Buffer" + ("r" "Reload" revert-buffer-no-confirm) + ("f" "Format" elixir-format) + ("i" "Indent" mark-and-indent-whole-buffer) + ("e" "Show Errors" flycheck-list-errors)]] + ["" + ("q" "Quit" keyboard-quit)]) - ("r" revert-buffer-no-confirm) - ("i" indent-region) - ("f" lsp-format-buffer) - ("e" flycheck-list-errors) - ("m" lsp-ui-imenu)) (defun activate-php-mode () "All things php." (set-indent 4) (column-enforce-n 80) - (define-key php-mode-map (kbd "C-c l") 'my-php/context-hydra/body) + (define-key php-mode-map (kbd "C-c l") '+my-transient-php-context-menu) ;; Company list override (add-to-list (make-local-variable 'company-backends) diff --git a/pkg/deft.el b/pkg/deft.el index c379dfc..873fa4a 100644 --- a/pkg/deft.el +++ b/pkg/deft.el @@ -23,12 +23,13 @@ "\\)") deft-auto-save-interval 30.0)) -(defhydra +hydra-deft-menu (:color teal) - "Start Deft" - ("d" deft "Deft") - ("q" nil "quit")) +(transient-define-prefix +my-transient-deft-menu () + "Start Deft" + ["" + ("d" "Deft" deft) + ("q" "quit" keyboard-quit)]) -(define-key +custom-keys-mode-map (kbd "C-c d") '+hydra-deft-menu/body) +(define-key +custom-keys-mode-map (kbd "C-c d") '+my-transient-deft-menu) (provide '+custom-pkg-deft) ;;; deft.el ends here diff --git a/pkg/hydra.el b/pkg/hydra.el index bff2e6a..3a0fdf4 100644 --- a/pkg/hydra.el +++ b/pkg/hydra.el @@ -5,196 +5,119 @@ (require '+custom-pkg-avy "$HOME/.emacs.d/pkg/avy.el") +(use-package transient :straight t) + (defun mark-and-indent-whole-buffer () "Mark and indent whole buffer." (interactive) (indent-region (point-min) (point-max))) -(use-package hydra - :straight t - :defer t - :config - (defhydra +hydra-project-menu (:color teal :hint nil) - " -^ -^ Projectile ^^Ivy ^^Magit -^──────────────────────────────────────────────────────────────────────────────── -^ _s_: Switch project _a_: Grep in buffer _m_: Git status -^ _f_: Find file in project _b_: Buffer list _C_: Git checkout -^ _g_: Grep in project _t_: Find file _M_: Git blame -^ _c_: Invalidate cache -^ _n_: New project +(transient-define-prefix +my-transient-project-menu () + "Project Commands" + ["" + ["Projectile" + ("s" "Switch project" counsel-projectile-switch-project) + ("f" "Find file in project" counsel-projectile-find-file) + ("g" "Grep in project" counsel-projectile-rg) + ("c" "invalidate cache" projectile-invalidate-cache) + ("n" "New project" projectile-add-known-project)] + ["Ivy" + ("a" "Grep in buffer" counsel-rg) + ("b" "Buffer list" ibuffer) + ("t" "Find file" counsel-find-file)] + ["Magit" + ("m" "Git status" magit-status) + ("C" "Git checkout" magit-checkout) + ("M" "Git blame" magit-blame)]] + ["" + ["LISP" + ("i" "IELM" ielm) + ("e" "eval-region" eval-region)] + ["Other" + ("d" "deft" deft) + ("T" "Speed Type" speed-type-text)]]) -^ LISP ^^Other -^──────────────────────────────────────────────────────────────────────────────── -^ _i_: Console _d_: Deft -^ _e_: Eval region _T_: Speed type -^ -" +(transient-define-prefix +my-transient-code-menu () + "Code Commands" + ["" + ["Manipulate" + ("c" "Toggle Comment" comment-line) + ("r" "Replace" vr/replace) + ("i" "Indent" indent-region) + ("a" "Align" align-regexp)] + ["Complete" + ("y" "Snippet" company-yasnippet) + ("m" "Any (Company)" company-complete)] + ["Find" + ("s" "Swiper" swiper) + ("u" "Undo tree" undo-tree-visualize) + ("d" "Dash" dash-at-point)]]) - ("q" nil "cancel" :color blue) +(transient-define-prefix +my-transient-window-menu () + "Windows Commands" + ["" + ["Move" + ("" " Left" windmove-left) + ("" "Right" windmove-right) + ("" " Up" windmove-up) + ("" " Down" windmove-down)] + ["Split" + ("h" "Horizontally" split-window-below) + ("v" "Vertically" split-window-right)] + ["Kill" + "" + "" + "" + ("k" "Kill Buffer" kill-buffer-and-window)]]) - ("a" counsel-rg) - ("b" ibuffer) - ("t" counsel-find-file) - ("d" deft) +(transient-define-prefix +my-transient-language-context-menu () + "Language (Buffer) Commands" + ["" + ["Buffer" + ("r" "Reload" revert-buffer-no-confirm) + ("f" "Format" lsp-format-buffer) + ("i" "Indent" mark-and-indent-whole-buffer)] + ["Other" + ("m" "iMenu" lsp-ui-imenu) + ("e" "Show Errors" flycheck-list-errors)]]) - ("s" counsel-projectile-switch-project) - ("f" counsel-projectile-find-file) - ("g" counsel-projectile-rg) - ("c" projectile-invalidate-cache) - ("n" projectile-add-known-project) +(transient-define-prefix +my-transient-history-menu () + "Buffer History Commands" + ["History" + ("[" "Previous" previous-buffer) + ("]" "Next" previous-buffer)]) - ("i" ielm) - ("T" speed-type-text) - ("e" eval-region) +(transient-define-prefix +my-transient-move-menu () + "Move Commands" + ["" + ["Move this buffer" + ("{" "Up" buf-move-left) + ("[" "Left" buf-move-right) + ("}" "Right" buf-move-up) + ("]" "Down" buf-move-down)] + ["Jump to" + ("w" "Word" avy-goto-word-1) + ("l" "Character" avy-goto-line) + ("c" "Line" avy-goto-char-2)]]) - ("m" magit-status) - ("C" magit-checkout) - ("M" magit-blame)) +(transient-define-prefix +my-transient-font-menu () + "Font Commands" + ["" + ["Everywhere" + ("R" "Reset to default" set-font-to-screen) + ("s" "Set size" set-font-size)] + ["In this buffer" + ("i" "Bigger" (lambda () (interactive) (text-scale-increase 1))) + ("d" "Smaller" (lambda () (interactive) (text-scale-decrease 1))) + ("r" "Reset" (lambda () (interactive) (text-scale-adjust 0)))]]) - (defhydra +hydra-code-menu (:color teal :hint nil) - " -^ -^ Manipulate ^^Complete ^^Find -^──────────────────────────────────────────────────────────────────────────────── -^ _c_: Toggle comment _y_: Snippet _s_: Swiper -^ _r_: Replace _m_: Any (Company) _u_: Undo tree -^ _i_: Indent^^ _d_: Dash -^ _a_: Align -^ -" - ("q" nil "cancel" :color blue) - - ("c" comment-line) - ("r" vr/replace) - ("i" indent-region) - ("a" align-regexp) - ("s" swiper) - ("d" dash-at-point) - - ("u" undo-tree-visualize) - ("y" company-yasnippet) - ("m" company-complete)) - - (defhydra +hydra-window-menu (:color teal :hint nil) - " -^ Move Split Kill -^──────────────────────────────────────────────────────────────────────────────── -^ __: Left _h_: Horizontally -^ __: Right _v_: Vertically -^ __: Up -^ __: Down _k_: Kill Buffer -^ -" - ("q" nil "cancel" :color blue) - - ("k" kill-buffer-and-window) - ("h" split-window-below) - ("v" split-window-right) - - ("" windmove-left) - ("" windmove-right) - ("" windmove-up) - ("" windmove-down)) - - (defhydra +hydra-language-context-menu (:color teal :hint nil) - " -^ -^ Buffer Other -^──────────────────────────────────────────────────────────────────────────────── -^ _r_: Reload _m_: iMenu -^ _f_: Format _e_: Show Errors -^ _i_: Indent -^ -" - ("q" nil "cancel" :color blue) - - ("r" revert-buffer-no-confirm) - ("i" mark-and-indent-whole-buffer) - - ("f" lsp-format-buffer) - ("m" lsp-ui-imenu) - ("e" flycheck-list-errors)) - - (defhydra +hydra-history-menu (:color teal :hint nil) - " -^ -^ History -^──────────────────────────────────────────────────────────────────────────────── -^ _[_: Previous -^ _]_: Next -^ -" - ("[" previous-buffer) - ("]" next-buffer) - - ("q" nil "cancel" :color blue)) - - (defhydra +hydra-move-menu (:color teal :hint nil) - " -^ -^ Move this buffer ^^Jump to -^──────────────────────────────────────────────────────────────────────────────── -^ _{_: Up _w_: Word -^ _[_: Left _c_: Character -^ _]_: Right _l_: Line -^ _{_: Down -^ -" - ("[" buf-move-left) - ("]" buf-move-right) - ("{" buf-move-up) - ("}" buf-move-down) - ("w" avy-goto-word-1) - ("l" avy-goto-line) - ("c" avy-goto-char-2) - ("q" nil "quit")) - - (defhydra +hydra-font-menu (:color teal :hint nil) - " -^ -^ Everywhere ^^In this buffer -^──────────────────────────────────────────────────────────────────────────────── -^ _s_: Set size _i_: Bigger -^ _R_: Reset to default _d_: Smaller -^^^ _r_: Reset -^ -" - ("i" (text-scale-increase 1)) - ("d" (text-scale-decrease 1)) - ("r" (text-scale-adjust 0)) - ("R" set-font-to-screen) - ("s" set-font-size) - ("q" nil "cancel" :color blue)) - - (defhydra +hydra-of-hydras (:color teal :hint nil) - " -^ -^ Hydras -^──────────────────────────────────────────────────────────────────────────────── -^ _p_: Projects^^^ _h_: History -^ _c_: Code^^^ _m_: Move -^ _l_: Language^^^ _f_: Fonts -^ -" - ("p" +hydra-project-menu/body) - ("c" +hydra-code-menu/body) - ("w" +hydra-window-menu/body) - ("h" +hydra-history-menu/body) - ("f" +hydra-font-menu/body) - ("m" +hydra-move-menu/body) - ("l" +hydra-language-context-menu/body) - ("q" nil "cancel")) - - :bind ("C-c p" . +hydra-project-menu/body) - ("C-c h" . +hydra-of-hydras/body) - ("C-c c" . +hydra-code-menu/body) - ("C-c w" . +hydra-window-menu/body) - ("C-c s" . +hydra-history-menu/body) - ("C-c f" . +hydra-font-menu/body) - ("C-c m" . +hydra-move-menu/body) - ("C-c l" . +hydra-language-context-menu/body)) +(define-key global-map (kbd "C-c p") '+my-transient-project-menu) +(define-key global-map (kbd "C-c c") '+my-transient-code-menu) +(define-key global-map (kbd "C-c w") '+my-transient-window-menu) +(define-key global-map (kbd "C-c s") '+my-transient-history-menu) +(define-key global-map (kbd "C-c f") '+my-transient-font-menu) +(define-key global-map (kbd "C-c m") '+my-transient-move-menu) +(define-key global-map (kbd "C-c l") '+my-transient-language-context-menu) (provide '+custom-pkg-hydra) ;;; hydra.el ends here