feat(tazjin/emacs): implement run-xdg-app using gio-list-apps tool
Change-Id: I43111dfc7091c416035be563ca7fc17265667b33 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9158 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
b5979f26e8
commit
c6224c9ef5
4 changed files with 21 additions and 2 deletions
|
@ -220,7 +220,7 @@ in-progress."
|
|||
(exwm-input-set-key (kbd "C-c j") #'exwm-jump-to-buffer)
|
||||
|
||||
;; Launch applications / any command with completion (dmenu style!)
|
||||
;; (exwm-input-set-key (kbd "s-d") #'counsel-linux-app) ;; TODO(tazjin): completing-read version
|
||||
(exwm-input-set-key (kbd "s-d") #'run-xdg-app)
|
||||
(exwm-input-set-key (kbd "s-x") #'run-external-command)
|
||||
(exwm-input-set-key (kbd "s-p") #'password-store-lookup)
|
||||
|
||||
|
|
|
@ -332,4 +332,21 @@ names, instead of only their names (which might change)."
|
|||
(get-buffer name))))
|
||||
(switch-to-buffer (or selected name) nil 't)))
|
||||
|
||||
(defun run-xdg-app ()
|
||||
"Use `//users/tazjin/gio-list-apps' to retrieve a list of
|
||||
installed (and visible) XDG apps, and let users launch them."
|
||||
(interactive)
|
||||
(let* ((apps-json (s-lines (s-trim (shell-command-to-string "gio-list-apps"))))
|
||||
(apps (seq-map (lambda (app)
|
||||
(let ((parsed (json-parse-string app :object-type 'alist)))
|
||||
(cons (cdr (assoc 'name parsed))
|
||||
(cdr (assoc 'commandline parsed)))))
|
||||
apps-json))
|
||||
|
||||
;; Display the command that will be run as an annotation
|
||||
(completion-extra-properties
|
||||
'(:annotation-function (lambda (app) (format " [%s]" (cdr (assoc app apps)))))))
|
||||
|
||||
(run-external-command--handler (cdr (assoc (completing-read "App: " apps nil t) apps)))))
|
||||
|
||||
(provide 'functions)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# This file builds an Emacs pre-configured with the packages I need
|
||||
# and my personal Emacs configuration.
|
||||
{ lib, pkgs, ... }:
|
||||
{ depot, lib, pkgs, ... }:
|
||||
|
||||
pkgs.makeOverridable
|
||||
({ emacs ? pkgs.emacs-unstable }:
|
||||
|
@ -13,6 +13,7 @@ pkgs.makeOverridable
|
|||
|
||||
# $PATH for binaries that need to be available to Emacs
|
||||
emacsBinPath = lib.makeBinPath [
|
||||
depot.users.tazjin.gio-list-apps
|
||||
(currentTelega pkgs.emacsPackages)
|
||||
pkgs.libwebp # for dwebp, required by telega
|
||||
];
|
||||
|
|
|
@ -10,6 +10,7 @@ fn main() {
|
|||
"{}",
|
||||
json!({
|
||||
"name": app.name().as_str(),
|
||||
"display_name": app.display_name().as_str(),
|
||||
"commandline": cmd,
|
||||
})
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue