refactor(tazjin/gio-list-apps): refactor into dynamic Emacs module

Instead of producing a binary that gets called by Emacs, with
input/output serialisation, use a dynamic Emacs module that lets Emacs
more-or-less directly call the relevant GTK functions.

I'm doing this mostly as an experiment. Might be interesting to end up
with a dynamic module that I can dump some experimental code into that
improves my workflows.

To do this, I've exposed the emacs binary used by my Emacs
configuration in an additional `passthru` field. This ensures that the
module is linked against the right version of Emacs.

Change-Id: I1426994fe3455ed1b2a685c5a09705e29fa40950
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9163
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
Autosubmit: tazjin <tazjin@tvl.su>
This commit is contained in:
Vincent Ambo 2023-08-29 15:43:13 +03:00 committed by clbot
parent d6bce3f83d
commit e5f7fe430d
7 changed files with 178 additions and 52 deletions

View file

@ -2,6 +2,8 @@
(require 'dash)
(require 'map)
(require 'gio-list-apps) ;; native module!
(defun goto-line-with-feedback ()
"Show line numbers temporarily, while prompting for the line number input"
(interactive)
@ -336,12 +338,7 @@ names, instead of only their names (which might change)."
"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))
(let* ((apps (taz-list-xdg-apps))
;; Display the command that will be run as an annotation
(completion-extra-properties

View file

@ -13,7 +13,6 @@ 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
];
@ -100,6 +99,9 @@ pkgs.makeOverridable
tvlPackages.rcirc
tvlPackages.term-switcher
tvlPackages.tvl
# Dynamic/native modules
depot.users.tazjin.gio-list-apps
])));
# Tired of telega.el runtime breakages through tdlib
@ -138,6 +140,12 @@ pkgs.makeOverridable
'').overrideAttrs
(_: {
passthru = {
# Expose original Emacs used for my configuration.
inherit emacs;
# Expose the pure emacs with all packages.
emacsWithPackages = tazjinsEmacs f;
# Call overrideEmacs with a function (pkgs -> pkgs) to modify the
# packages that should be included in this Emacs distribution.
overrideEmacs = f': self l f';