;;; pkg/transient -- summary -*- lexical-binding: t; -*- ;;; Commentary: ;;; Global Transient definitions. ;;; Code: (require 'icejam-avy) (require 'icejam-keys-mode) (require 'icejam-blocking) (defun icejam-mark-and-indent-whole-buffer () "Mark and indent whole buffer." (interactive) (indent-region (point-min) (point-max))) (transient-define-prefix icejam-project-menu () "Project Commands." ["" ["Project" ("s" "Switch project" project-switch-project) ("f" "Find file in project" project-find-file) ("g" "Grep in project" consult-ripgrep)] ["Completions" ("a" "Grep in buffer" consult-line) ("b" "Find Buffer" consult-buffer) ("t" "Find file" find-file)] ["Magit" ("m" "Git status" magit-status) ("C" "Git checkout" magit-checkout) ("M" "Git blame" magit-blame)]] ["" ["LISP" ("i" "IELM" ielm) ("B" "iBuffer" ibuffer) ("e" "eval-region" eval-region)] ["Other" ("d" "deft" deft) ("T" "Speed Type" speed-type-text)]]) (transient-define-prefix icejam-code-menu () "Code Commands." ["" ["Manipulate" ("c" "Toggle Comment" comment-line) ("r" "Replace" vr/replace) ("i" "Indent" indent-region)] ["Complete" ("y" "Snippet" company-yasnippet) ("m" "Any (Company)" company-complete) ("g" "Ask GPT" gptel-menu) ("a" "Aider" aider-transient-menu) ("e" "Refactor (Elysium)" elysium-query)] ["Find" ("s" "Swiper" consult-line) ("u" "Vundo" vundo) ("d" "Dash" dash-at-point)]]) (transient-define-prefix icejam-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)]]) (transient-define-prefix icejam-language-menu () "Language (Buffer) Commands." ["" ["Buffer" ("r" "Reload" icejam-revert-buffer-no-confirm) ("f" "Format" lsp-format-buffer) ("i" "Indent" icejam-mark-and-indent-whole-buffer)] ["Other" ("m" "iMenu" lsp-ui-imenu) ("e" "Show Errors" flymake-show-buffer-diagnostics)]]) (transient-define-prefix icejam-history-menu () "Buffer History Commands." ["History" ("[" "Previous" previous-buffer) ("]" "Next" previous-buffer)]) (transient-define-prefix icejam-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)]]) (transient-define-prefix icejam-font-menu () "Font Commands." ["" ["Everywhere" ("s" "Adjust font size" global-text-scale-adjust)] ["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)))]]) (defcustom icejam-language-transient-alist '() "List of functions to call for language transient." :group 'icejam :type '(repeat (cons (symbol :tag "Major mode name") (symbol :tag "Function to call")))) ;; Use different thing for different language (defun icejam-language-transient-for-mode (&optional maybe-mode) "Get transient for major mode. You can pass MAYBE-MODE to find mode explicitly." (let* ((mode (if maybe-mode maybe-mode major-mode))) (alist-get mode icejam-language-transient-alist 'icejam-language-menu))) (defun icejam-transient-for-lang () "Call transient for current major mode." (interactive) (funcall (icejam-language-transient-for-mode))) (define-key icejam-keys-mode-map (kbd "C-c p") 'icejam-project-menu) (define-key icejam-keys-mode-map (kbd "C-c c") 'icejam-code-menu) (define-key icejam-keys-mode-map (kbd "C-c w") 'icejam-window-menu) (define-key icejam-keys-mode-map (kbd "C-c s") 'icejam-history-menu) (define-key icejam-keys-mode-map (kbd "C-c f") 'icejam-font-menu) (define-key icejam-keys-mode-map (kbd "C-c m") 'icejam-move-menu) (define-key icejam-keys-mode-map (kbd "C-c l") 'icejam-transient-for-lang) (provide 'icejam-transient) ;;; icejam-transient.el ends here