[PATCH] rde: Add emacs-dmenu command.
Export this patch
---
src/rde/features/emacs.scm | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/src/rde/features/emacs.scm b/src/rde/features/emacs.scm
index baa01ca..88465e0 100644
--- a/src/rde/features/emacs.scm
+++ b/src/rde/features/emacs.scm
@@ -327,6 +327,37 @@ environment outside of Guix Home."
"--no-splash"
(cdr (command-line)))))
+ ;; Emacs and emacsclient don't handle stdin properly, in the case they
+ ;; should be used as dmenu. This tiny guile+emacs script behaves like dmenu.
+ (define emacs-dmenu
+ (program-file
+ "emacs-dmenu"
+ #~(begin
+ (use-modules
+ (ice-9 textual-ports)
+ (ice-9 popen))
+ (let* ((raw-input
+ (string-drop-right (get-string-all (current-input-port)) 1))
+ (port (open-input-pipe
+ (string-append
+ #$emacs-client-create-frame
+ " --eval \""
+ "(progn \
+(set-frame-name \\\"dynamic-menu - Emacs Client\\\") \
+(let ((vertico-count 10)) \
+ (completing-read \\\"Select: \\\" \
+ (split-string \\\"" raw-input "\\\" \
+ \\\"\n\\\"))))\""
+ " --eval \"(delete-frame (selected-frame))\""
+ " -F "
+ "\"((minibuffer . only) \
+ (width . 120) \
+ (height . 11))\"")))
+ (selected
+ (string-drop (string-drop-right (get-string-all port) 2) 1)))
+ (close-port port)
+ (format #t "~a\n" selected)))))
+
(define emacs-application-launcher
(emacs-minibuffer-program
emacs-client-create-frame "application-launcher" "Application Launcher"
@@ -573,7 +604,8 @@ It can contain settings not yet moved to separate features."
(simple-service 'emacs-set-default-editor
home-environment-variables-service-type
`(("ALTERNATE_EDITOR" . ,emacs-editor)
- ("VISUAL" . ,emacs-client-no-wait)))
+ ("VISUAL" . ,emacs-client-no-wait)
+ ("MENU" . ,emacs-dmenu)))
(when (get-value 'sway config)
(simple-service
'emacs-update-environment-variables-on-sway-start
@@ -594,7 +626,7 @@ It can contain settings not yet moved to separate features."
(make-feature-values
standalone-minibuffer-height
emacs
- emacs-editor emacs-client
+ emacs-editor emacs-client emacs-dmenu
emacs-client-create-frame
emacs-client-no-wait
emacs-configure-rde-keymaps
--
2.39.2