~abcdw/rde-devel

rde: Add feature-emacs-power-menu. v1 PROPOSED

Nicolas Graves: 2
 rde: Add feature-emacs-power-menu.
 rde: Add feature-emacs-power-menu.

 3 files changed, 107 insertions(+), 0 deletions(-)
Export patchset (mbox)
How do I use this?

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 -3
Learn more about email & git

[PATCH] rde: Add feature-emacs-power-menu. Export this patch

---
 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

[PATCH] rde: Add feature-emacs-power-menu. Export this patch

---
 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