From 34288685116e90826aaa5639bafc4b5ef58b2575 Mon Sep 17 00:00:00 2001 From: jao Date: Tue, 26 Oct 2021 07:11:58 +0100 Subject: dehydration: transient is all we need --- init.org | 351 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 183 insertions(+), 168 deletions(-) (limited to 'init.org') diff --git a/init.org b/init.org index a12615a..c837582 100644 --- a/init.org +++ b/init.org @@ -199,23 +199,43 @@ (jao-exec-string "brightnessctl -q s 5%%-") (jao-bright-show)) #+end_src -*** Keyboard and hydra +*** Keyboard #+begin_src emacs-lisp (use-package repeat :config (setq repeat-echo-function #'repeat-echo-mode-line)) (when (> emacs-major-version 27) (repeat-mode)) (use-package transient - :init (setq transient-show-popup 2.0)) + :init (setq transient-show-popup 2.0) + :config + (transient-bind-q-to-quit) + + :bind (("s-SPC" . jao-transient-major-mode))) + + (defmacro jao-transient-major-mode (mode &rest suffix) + (declare (indent defun)) + (let ((mode (intern (format "%s-mode" mode))) + (mmap (intern (format "%s-mode-map" mode))) + (name (intern (format "jao-transient-%s" mode)))) + `(progn + (transient-define-prefix ,name () + ,(format "Transient ops for %s" mode) + [,(format "Operations for %s" mode) :if-derived ',mode ,@suffix]) + (define-key ,mmap (kbd "s-SPC") #',name)))) + + (defmacro jao-transient-major-mode+1 (mode suffix) + (declare (indent defun)) + (let ((name (intern (format "jao-transient-%s" mode)))) + (if (fboundp name) + `(transient-append-suffix ',name '(0 -1) ,suffix) + `(jao-transient-major-mode ,mode ,suffix)))) + + (defmacro jao-transient-major-mode+ (mode &rest suffixes) + (declare (indent defun)) + `(progn + ,@(mapcar (lambda (s) `(jao-transient-major-mode+1 ,mode ,s)) + suffixes))) - (use-package hydra :ensure t) - (use-package major-mode-hydra - :ensure t - :custom (major-mode-hydra-invisible-quit-key "q") - :bind (("s-SPC" . major-mode-hydra) - ("H-s-SPC" . major-mode-hydra) - ("C-s-SPC" . major-mode-hydra))) - (require 'major-mode-hydra) (defun jao-kb-toggle (&optional lyt) (interactive) @@ -551,12 +571,12 @@ (shell-command "swaylock -i ~/.lockimage") (jao-xlock-screen))) - (pretty-hydra-define jao-hydra-sleep (:color blue) - ("Sleep" - (("l" jao-lock-screen "lock screen") - ("z" jao-suspend "sleep") - ("u" jao-screensaver-toggle "enable/disable screensaver") - ("q" nil "cancel")))) + (transient-define-prefix jao-transient-sleep () + ["Sleep" + ("l" "lock screen" jao-lock-screen) + ("z" "sleep" jao-suspend) + ("u" "enable/disable screensaver" jao-screensaver-toggle)]) + #+end_src *** X clipboard #+BEGIN_SRC emacs-lisp @@ -1651,24 +1671,42 @@ (setq jao-org-open-pdf-fun #'jao-afio-open-pdf) #+end_src -*** hydra - #+begin_src emacs-lisp - (major-mode-hydra-define doc-view-mode nil - ("Notes" - (("o" jao-org-pdf-goto-org "notes file") - ("O" (jao-org-pdf-goto-org 4) "notes file, linking")) - "Navigation" - (("b" jao-doc-view-back "back jump") - ("B" jao-doc-view-back "forward jump") - ("u" jao-doc-view-visit-url "visit URL")) - "Slices" - (("cb" doc-view-set-slice-from-bounding-box "bounding box") - ("cm" doc-view-set-slice-using-mouse "using mouse")) - "Session" - (("s" jao-open-pdf-session "load session") - ("S" jao-doc-view-save-session "save session") - ("d" doc-view-dired-cache "visit cache directory")))) - #+end_src +*** transient + #+begin_src emacs-lisp + (defun jao-org-pdf-goto-org-linking () + (interactive) + (jao-org-pdf-goto-org 4)) + + (jao-transient-major-mode doc-view + ["Notes" + ("o" "notes file" jao-org-pdf-goto-org) + ("O" "notes file, linking" jao-org-pdf-goto-org-linking)] + ["Navigation" + ("b" "back jump" jao-doc-view-back) + ("B" "forward jump" jao-doc-view-back) + ("u" "visit URL" jao-doc-view-visit-url)] + ["Slices" + ("cb" "bounding box" doc-view-set-slice-from-bounding-box) + ("cm" "using mouse" doc-view-set-slice-using-mouse)] + ["Session" + ("s" "load session" jao-open-pdf-session) + ("S" "save session" jao-doc-view-save-session) + ("d" "visit cache directory" doc-view-dired-cache)]) + + (jao-transient-major-mode pdf-view + ["Notes" + ("o" "notes file" jao-org-pdf-goto-org) + ("O" "notes file, linking" jao-org-pdf-goto-org-linking)] + ["Navigation" + ("b" "back jump" pdf-history-backward) + ("f" "forward jump" pdf-history-forward)] + ["Session" + ("s" "load session" jao-afio-open-pdf-session) + ("S" "save session" jao-doc-view-save-session)]) + + ;; (transient-get-suffix 'jao-transient-pdf-view '(0 -1)) + + #+end_src * Shells *** shell modes #+begin_src emacs-lisp @@ -2079,15 +2117,16 @@ '(progn (define-key gnus-summary-mode-map "\C-cG" 'jao-gnus-github-review) (define-key gnus-article-mode-map "\C-cG" 'jao-gnus-github-review))) - :mode-hydra - (github-review-mode nil - ("Review" - (("a" github-review-approve "Approve") - ("r" github-review-reject "Reject") - ("c" github-review-reject "Comment")) - "Quit" - (("Q" bury-buffer "Bury buffer") - ("k" kill-buffer "Kill buffer"))))) + + (jao-transient-major-mode github-review + ["Review" + ("a" "Approve" github-review-approve) + ("r" "Reject" github-review-reject) + ("c" "Comment" github-review-reject)] + ["Quit" + ("Q" "Bury buffer" bury-buffer) + ("k" "Kill buffer" kill-buffer)])) + #+end_src *** Jenkins [[https://github.com/rmuslimov/jenkins.el][GitHub - rmuslimov/jenkins.el: Jenkins plugin for emacs]] @@ -2488,20 +2527,20 @@ :diminish "" :hook (haskell-mode . hlint-refactor-mode)) #+end_src -***** hydra +***** transient #+begin_src emacs-lisp - (major-mode-hydra-define haskell-mode nil - ("Imports" - (("in" haskell-navigate-imports "Navigate imports") - ("if" haskell-mode-format-imports "Format imports") - ("is" haskell-sort-imports "Sort imports") - ("ia" haskell-align-imports "Align imports")) - "Code" - (("c" haskell-compile "Compile") - ("s" haskell-mode-stylish-buffer "stylish on buffer")) - "Hoogle" - (("h" jao-haskell-hoogle "Hoogle") - ("H" haskell-hoogle-lookup-from-local "Hoogle from local server")))) + (jao-transient-major-mode haskell + ["Imports" + ("in" "Navigate imports" haskell-navigate-imports) + ("if" "Format imports" haskell-mode-format-imports) + ("is" "Sort imports" haskell-sort-imports) + ("ia" "Align imports" haskell-align-imports)] + ["Code" + ("c" "Compile" haskell-compile) + ("s" "stylish on buffer" haskell-mode-stylish-buffer)] + ["Hoogle" + ("h" "Hoogle" jao-haskell-hoogle) + ("H" "Hoogle from local server" haskell-hoogle-lookup-from-local)]) #+end_src *** Prolog #+BEGIN_SRC emacs-lisp @@ -2750,27 +2789,28 @@ (when (or p (y-or-n-p "Connect to libera? ")) (circe "Libera Chat"))) - (pretty-hydra-define jao-hydra-chats (global-map "s-q" :color blue :quit-key "q") - ("Connect" - (("A" (jao-chats t) "all chats -y") - ("a" jao-chats "all chats") - ("S" slack-start "slack") - ("g" signel-start "signal") - ("e" (jao-erc t) "erc -y") - ("s-q" jao-hydra-chats/body nil)) - "Go" - (("i" (jao-buffer-same-mode 'erc-mode) "irc") - ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack buffer") - ("t" (jao-buffer-same-mode 'telega-chat-mode) "telega buffer") - ("T" telega "telega rooster")))) - - (global-set-key (kbd "H-s-q") #'jao-hydra-chats/body) + (defun jao-all-chats () (interactive) (jao-chats t)) + + (defun jao-chats-telega () + (interactive) + (jao-buffer-same-mode '(telega-root-mode telega-chat-mode))) + + (defun jao-chats-slack () + (interactive) + (jao-buffer-same-mode 'slack-message-buffer-mode)) + + (defun jao-chats-irc () + (interactive) + (jao-buffer-same-mode '(circe-channel-mode circe-query-mode erc-mode))) + #+end_src * Multimedia *** mixer #+begin_src emacs-lisp - (defun jao-mixer-get-level (dev) - (let* ((s (shell-command-to-string (format "amixer sget %s" dev))) + (defun jao-mixer-get-level (&optional dev) + (interactive) + (let* ((dev (or dev "Master")) + (s (shell-command-to-string (format "amixer sget %s" dev))) (s (car (last (split-string s "\n" t))))) (when (string-match ".*Front .*\\[\\([0-9]+\\)%\\] .*" s) (let ((level (match-string 1 s))) @@ -2856,7 +2896,7 @@ (defalias 'jao-player-connect 'jao-mpc-connect) (defalias 'jao-player-play 'jao-mpc-play) #+end_src -*** hydras +*** transients #+begin_src emacs-lisp (require 'jao-lyrics) @@ -2879,59 +2919,77 @@ (interactive) (jao-notify "Volume" (format "%s%%" (jao-player-volume)))) + (defun jao-player-seek-10 () (interactive) (jao-player-seek 10)) + (defun jao-player-seek--10 () (interactive) (jao-player-seek -10)) + + (defun jao-spotify-clear () (interactive) (jao-mpc-clear jao-mopidy-port)) + (defun jao-spotify-echo-current () + (interactive) + (jao-mpc-echo-current jao-mopidy-port)) + (defun jao-spotify-show-playlist () + (interactive) + (jao-mpc-show-playlist jao-mopidy-port)) + + (defun jao-player-seek-m10 () + (interactive) + (jao-player-seek 10 jao-mopidy-port)) + (defun jao-player-seek-m-10 () + (interactive) + (jao-player-seek -10 jao-mopidy-port)) + + + (defun jao-player-level-cap () (interactive) (jao-mixer-level "Capture")) + (use-package jao-random-album :demand t) - (pretty-hydra-define jao-hydra-spotify - (global-map "s-s" :color blue :quit-key "q") - ("Search" - (("a" jao-spotify-album "album") - ("A" jao-spotify-artist "artist") - ("t" jao-spotify-track "track") - ("P" jao-spotify-playlist "playlist")) - "Play" - (("s" espotify-play-pause "toggle") - ("n" espotify-next "next") - ("p" espotify-previous "previous") - ("f" (jao-mpc-seek 10 jao-mopidy-port) "seek fwd" :color red) - ("F" (jao-mpc-seek -10 jao-mopidy-port) "seek bwd" :color red)) - "Browse" - (("l" (jao-mpc-show-playlist jao-mopidy-port) "playing list") - ("c" (jao-mpc-clear jao-mopidy-port) "clear list" :color red) - ("w" (jao-mpc-echo-current jao-mopidy-port) "currently playing") - ("s-s" jao-hydra-spotify/body nil)))) - - (pretty-hydra-define jao-hydra-media - (global-map "s-m" :color blue :quit-key "q") - ("Play" - (("m" jao-player-toggle "toggle") - ("n" jao-player-next "next") - ("p" jao-player-previous "previous") - ("s" (espotify-play-pause) "toggle spotify")) - "Seek and search" - (("f" (jao-player-seek 10) "seek fwd" :color red) - ("F" (jao-player-seek -10) "seek bwd" :color red) - ("a" jao-mpc-select-album "select album")) - "Browse" - (("b" jao-player-browse "browse") - ("l" jao-player-list "show play list") - ("L" jao-show-lyrics "show lyrics") - ("w" (let ((jao-notify-use-messages-p t)) (jao-player-echo)) - "now playing")) - "Master volume" - (("d" jao-mixer-master-down "master down" :color red) - ("u" jao-mixer-master-up "master up" :color red) - ("M" jao-mixer-master-toggle "master toggle") - ("v" (jao-mixer-get-level "Master") "show")) - "Capture volume" - (("D" jao-mixer-capture-down "capture down" :color red) - ("U" jao-mixer-capture-up "capture up" :color red) - ("V" (jao-mixer-get-level "Capture") "show")) - "Utilities" - (("c" jao-player-connect "reconnect to mpd") - ("N" jao-random-album-next "next random album") - ("r" jao-random-album-toggle "toggle random album" - :toggle jao-random-album-p) - ("s-m" jao-hydra-media/body nil)))) + (transient-define-prefix jao-transient-spotify () + [["Search" + ("a" "album" jao-spotify-album) + ("A" "artist" jao-spotify-artist) + ("t" "track" jao-spotify-track) + ("P" "playlist" jao-spotify-playlist)] + ["Play" + ("s" "toggle" espotify-play-pause) + ("n" "next" espotify-next) + ("p" "previous" espotify-previous)] + ["Seek" + ("f" "seek fwd" jao-player-seek-m10 :transient t) + ("F" "seek bwd" jao-player-seek-m-10 :transient t)] + ["Browse" + ("l" "playing list" jao-spotify-show-playlist) + ("c" "clear list"jao-spotify-clear :transient t) + ("w" "currently playing" jao-spotify-echo-current)]]) + + (transient-define-prefix jao-transient-media () + [["Play" + ("m" "toggle" jao-player-toggle) + ("n" "next" jao-player-next) + ("p" "previous" jao-player-previous) + ("s" "toggle spotify" espotify-play-pause)] + ["Seek and search" + ("f" "seek fwd" jao-player-seek-10 :transient t) + ("F" "seek bwd" jao-player-seek--10 :transient t) + ("a" "select album" jao-mpc-select-album)] + ["Browse" + ("b" "browse" jao-player-browse) + ("l" "show play list" jao-player-list) + ("L" "show lyrics" jao-show-lyrics) + ("w" "now playing" jao-player-echo)] + ["Master volume" + ("d" "master down" jao-mixer-master-down :transient t) + ("u" "master up" jao-mixer-master-up :transient t) + ("M" "master toggle" jao-mixer-master-toggle) + ("v" "show" jao-mixer-get-level)] + ["Capture volume" + ("D" "capture down" jao-mixer-capture-down :transient t) + ("U" "capture up" jao-mixer-capture-up :transient t) + ("V" "show" jao-player-level-cap)] + ["Utilities" + ("c" "reconnect to mpd" jao-player-connect) + ("N" "next random album" jao-random-album-next) + ("r" (lambda () + (concat (if jao-random-album-p "dis" "en") "able random album")) + jao-random-album-toggle)]]) #+end_src * Key bindings @@ -2941,49 +2999,6 @@ (global-set-key "\C-xr\M-w" #'kill-rectangle-save) (global-set-key "\C-c\C-z" #'comment-or-uncomment-region) (global-set-key "\C-z" #'comment-or-uncomment-region) - - (pretty-hydra-define jao-hydra-emacs-utils - (global-map "s-w" :color blue :quit-key "q") - ("Notes" - (("n" jao-org-notes-open-or-create "capture note") - ("/" jao-org-notes-open "search notes")) - "Docs" - (("d" (jao-buffer-same-mode '(pdf-view-mode docview-mode) - #'jao-afio--goto-docs) - "go to doc") - ("D" jao-open-doc "open to doc")) - "Packages" - (("a" jao-term-aptitude "aptitude") - ("l" list-packages "packages") - ("s-w" jao-hydra-emacs-utils/body nil)) - "Network" - (("S" jao-ssh "ssh") - ("T" telega "telegram rooster") - ("c" (jao-chats t) "connect chats")) - "Monitors" - (("p" jao-term-htop "htop") - ("b" jao-exwm-bluetooth "bluetooth") - ;; ("P" jao-exwm-proced "proced") - ("x" jao-exwm-xmobar "restart xmobar") - ;; ("X" jao-exwm-kill-xmobar "kill xmobar") - ;; ("t" jao-time-echo-times "current time") - ) - "Chats" - (("t" (jao-buffer-same-mode 'telega-chat-mode) "telegram buffers") - ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack buffers") - ("i" (jao-buffer-same-mode '(circe-channel-mode erc-mode)) "irc channels")) - "Looks" - (;; ("T" jao-toggle-transparency "toggle transparency" - ;; :toggle (jao-transparent-p) :color red) - ("w" jao-set-wallpaper "set wallpaper") - ("W" jao-set-random-wallpaper "set radom wallpaper")) - "Helpers" - (("r" org-reveal "org reveal") - ("k" jao-kb-toggle "toggle keyboard" - :toggle (jao-kb-toggled-p) :color red) - ("M" jao-minibuffer-toggle "toggle minibuffer" - :toggle jao-minibuffer-enabled-p)))) - #+end_src * Last minute (post.el) #+begin_src emacs-lisp -- cgit v1.2.3