Nicolas Graves: 2 rde: Add feature-emacs-power-menu. rde: Add feature-emacs-power-menu. 3 files changed, 107 insertions(+), 0 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~abcdw/rde-devel/patches/39790/mbox | git am -3Learn more about email & git
--- src/rde/features/emacs-xyz.scm | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm index 4e2bf18..10efb03 100644 --- a/src/rde/features/emacs-xyz.scm +++ b/src/rde/features/emacs-xyz.scm @@ -69,6 +69,7 @@ feature-emacs-help feature-emacs-shell feature-emacs-saving + feature-emacs-power-menu ;; Completion feature-emacs-completion @@ -1482,6 +1483,52 @@ between Emacs sessions."))) (values `((,f-name . #t))) (home-services-getter get-home-services))) +(define* (feature-emacs-power-menu + #:key (power-menu-key "s-Q")) + "Configure a simple power menu for emacs." + (ensure-pred string? power-menu-key) + + (define emacs-f-name 'power-menu) + (define f-name (symbol-append 'emacs- emacs-f-name)) + + (define (get-home-services config) + (list + (rde-elisp-configuration-service + emacs-f-name + config + `((setq power-menu-candidates + (append + ,@(if (get-value 'sway config) + `('(("🚪 exit sway" . ("swaymsg" . "exit")) + ("♻ reload sway" . ("swaymsg" . "reload")))) + '()) + ,@(if (get-value 'swaylock config) + `('(("🔒 lock" . ("/run/setuid-programs/swaylock" . "")))) + '()) + '(("😪 suspend" . ("loginctl" . "suspend")) + ("🐻 hibernate" . ("loginctl" . "suspend-then-hibernate")) + ("🔃 reboot" . ("loginctl" . "reboot")) + ("🖥 shutdown" . ("loginctl" . "poweroff"))))) + + (defun power-menu () + "Prompt for an action on the power-menu, and make this action." + (interactive) + (let* ((selected (completing-read + "power-menu command:" + power-menu-candidates)) + (command-list (cdr (assoc selected power-menu-candidates)))) + (async-start-process "power-menu" + (car command-list) + nil + (cdr command-list)))) + (define-key global-map (kbd ,power-menu-key) + 'power-menu))))) + + (feature + (name f-name) + (values `((,f-name . #t))) + (home-services-getter get-home-services))) + ;;; ;;; Completion. -- 2.39.2
--- src/rde/features/emacs-xyz.scm | 55 ++++++++++++++++++++++++++++++++++ src/rde/features/wm.scm | 5 ++++ 2 files changed, 60 insertions(+) diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm index e1fad529..a8ced3bc 100644 --- a/src/rde/features/emacs-xyz.scm +++ b/src/rde/features/emacs-xyz.scm @@ -69,6 +69,7 @@ feature-emacs-help feature-emacs-shell feature-emacs-saving + feature-emacs-power-menu ;; Completion feature-emacs-completion @@ -1475,6 +1476,60 @@ between Emacs sessions."))) (values `((,f-name . #t))) (home-services-getter get-home-services))) +(define* (feature-emacs-power-menu) + "Configure a simple power menu for emacs." + + (define emacs-f-name 'power-menu) + (define f-name (symbol-append 'emacs- emacs-f-name)) + + (define (emacs-power-menu config) + (require-value 'emacs config) + (emacs-minibuffer-program + (get-value 'emacs-client-create-frame config) + "power-menu" "power-menu" 'power-menu + #:height (get-value 'standalone-minibuffer-height config 7))) + + (define (get-home-services config) + (require-value 'elogind config) + (list + (when (get-value 'emacs config) + (emacs-xdg-service + 'power-menu + "Emacs (Client) [power-menu]" + (emacs-power-menu config))) + (rde-elisp-configuration-service + emacs-f-name + config + `((setq power-menu-candidates + (append + ,@(if (get-value 'sway config) + `('(("♻ reload sway" . ("swaymsg" . "reload")) + ("🚪 exit sway" . ("swaymsg" . "exit")))) + '()) + '(("🔒 lock" . ("loginctl" . "lock-session")) + ("😪 suspend" . ("loginctl" . "suspend")) + ("🐻 hibernate" . ("loginctl" . "suspend-then-hibernate")) + ("🔃 reboot" . ("loginctl" . "reboot")) + ("🖥 shutdown" . ("loginctl" . "poweroff"))))) + + (defun power-menu () + "Prompt for an action on the power-menu, and make this action." + (interactive) + (let* ((selected (completing-read + "power-menu command:" + power-menu-candidates)) + (command-list (cdr (assoc selected power-menu-candidates)))) + (async-start-process "power-menu" + (car command-list) + nil + (cdr command-list)))))))) + + (feature + (name f-name) + (values `((,f-name . #t) + (default-power-menu-fn . ,emacs-power-menu))) + (home-services-getter get-home-services))) + ;;; ;;; Completion. diff --git a/src/rde/features/wm.scm b/src/rde/features/wm.scm index 1cd1b268..629bfe94 100644 --- a/src/rde/features/wm.scm +++ b/src/rde/features/wm.scm @@ -185,6 +185,11 @@ (bindsym --to-code $mod+Shift+p exec $pass)) '()) + ,@(if (get-value 'default-power-menu-fn config) + `((set $power-menu ,(get-value-eval 'default-power-menu-fn config)) + (bindsym --to-code $mod+Shift+q exec $power-menu)) + '()) + (bindsym $mod+Control+Shift+Return exec $backup-term) (bindsym $mod+Return exec $term) -- 2.39.2