Round 306: PulseAudio ext, PipeWire ext, ALSA ext, JACK ext, Bluez ext (20 commands)

ober

ea03e2c75b65833b2c6cf0ee99840920cce044fa

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1cfbc86..107cf60 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 306 — PulseAudio ext, PipeWire ext, ALSA ext, JACK ext, Bluez ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| pulseaudio-list | :orange_circle: | List audio sinks/sources |
+| pulseaudio-volume | :orange_circle: | Set PulseAudio volume |
+| pulseaudio-mute | :orange_circle: | Toggle PulseAudio mute |
+| pulseaudio-default | :orange_circle: | Set default sink |
+| pipewire-list | :orange_circle: | List PipeWire nodes |
+| pipewire-info | :orange_circle: | Show node info |
+| pipewire-link | :orange_circle: | Link PipeWire nodes |
+| pipewire-unlink | :orange_circle: | Unlink PipeWire nodes |
+| alsa-list | :orange_circle: | List ALSA cards |
+| alsa-volume | :orange_circle: | Set ALSA volume |
+| alsa-mute | :orange_circle: | Toggle ALSA mute |
+| alsa-card | :orange_circle: | Show card info |
+| jack-list | :orange_circle: | List JACK ports |
+| jack-connect | :orange_circle: | Connect JACK ports |
+| jack-disconnect | :orange_circle: | Disconnect JACK port |
+| jack-monitor | :orange_circle: | Monitor JACK |
+| bluez-list | :orange_circle: | List Bluetooth devices |
+| bluez-pair | :orange_circle: | Pair device |
+| bluez-connect | :orange_circle: | Connect device |
+| bluez-disconnect | :orange_circle: | Disconnect device |
+
 ### Round 305 — Xrandr ext, Xinput ext, Xdotool ext, Xset ext, Xmodmap ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 51b18c7..f80f129 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -23253,4 +23253,58 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Expression: "
       (lambda (expr)
-        (echo-message! echo (str "Xmodmap: " expr))))))
\ No newline at end of file
+        (echo-message! echo (str "Xmodmap: " expr))))))
+
+;;; Round 306 — ALSA ext, JACK ext, Bluez ext (batch 2)
+
+(def (cmd-alsa-mute app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ALSA: toggling mute")))
+
+(def (cmd-alsa-card app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Card: "
+      (lambda (card)
+        (echo-message! echo (str "ALSA: info for card " card))))))
+
+(def (cmd-jack-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "JACK: listing ports")))
+
+(def (cmd-jack-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Source port: "
+      (lambda (src)
+        (echo-message! echo (str "JACK: connecting " src))))))
+
+(def (cmd-jack-disconnect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Port: "
+      (lambda (port)
+        (echo-message! echo (str "JACK: disconnecting " port))))))
+
+(def (cmd-jack-monitor app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "JACK: monitoring connections")))
+
+(def (cmd-bluez-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Bluez: listing devices")))
+
+(def (cmd-bluez-pair app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Device MAC: "
+      (lambda (mac)
+        (echo-message! echo (str "Bluez: pairing " mac))))))
+
+(def (cmd-bluez-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Device MAC: "
+      (lambda (mac)
+        (echo-message! echo (str "Bluez: connecting " mac))))))
+
+(def (cmd-bluez-disconnect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Device MAC: "
+      (lambda (mac)
+        (echo-message! echo (str "Bluez: disconnecting " mac))))))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 97d3597..07cdcb0 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -23976,3 +23976,57 @@
       (lambda (key)
         (echo-message! echo (str "Xdotool: sending key " key))))))
 
+;;; Round 306 — PulseAudio ext, PipeWire ext, ALSA ext (batch 1)
+
+(def (cmd-pulseaudio-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PulseAudio: listing sinks/sources")))
+
+(def (cmd-pulseaudio-volume app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Volume (%): "
+      (lambda (vol)
+        (echo-message! echo (str "PulseAudio: volume " vol "%"))))))
+
+(def (cmd-pulseaudio-mute app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PulseAudio: toggling mute")))
+
+(def (cmd-pulseaudio-default app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Sink: "
+      (lambda (sink)
+        (echo-message! echo (str "PulseAudio: default sink " sink))))))
+
+(def (cmd-pipewire-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PipeWire: listing nodes")))
+
+(def (cmd-pipewire-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Node ID: "
+      (lambda (id)
+        (echo-message! echo (str "PipeWire: info for " id))))))
+
+(def (cmd-pipewire-link app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Source:Sink: "
+      (lambda (link)
+        (echo-message! echo (str "PipeWire: linking " link))))))
+
+(def (cmd-pipewire-unlink app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Link ID: "
+      (lambda (id)
+        (echo-message! echo (str "PipeWire: unlinking " id))))))
+
+(def (cmd-alsa-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ALSA: listing cards")))
+
+(def (cmd-alsa-volume app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Volume (%): "
+      (lambda (vol)
+        (echo-message! echo (str "ALSA: volume " vol "%"))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 676a398..0059fc2 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7843,4 +7843,25 @@
   (register-command! 'xmodmap-list cmd-xmodmap-list)
   (register-command! 'xmodmap-load cmd-xmodmap-load)
   (register-command! 'xmodmap-expr cmd-xmodmap-expr)
+  ;; Round 306
+  (register-command! 'pulseaudio-list cmd-pulseaudio-list)
+  (register-command! 'pulseaudio-volume cmd-pulseaudio-volume)
+  (register-command! 'pulseaudio-mute cmd-pulseaudio-mute)
+  (register-command! 'pulseaudio-default cmd-pulseaudio-default)
+  (register-command! 'pipewire-list cmd-pipewire-list)
+  (register-command! 'pipewire-info cmd-pipewire-info)
+  (register-command! 'pipewire-link cmd-pipewire-link)
+  (register-command! 'pipewire-unlink cmd-pipewire-unlink)
+  (register-command! 'alsa-list cmd-alsa-list)
+  (register-command! 'alsa-volume cmd-alsa-volume)
+  (register-command! 'alsa-mute cmd-alsa-mute)
+  (register-command! 'alsa-card cmd-alsa-card)
+  (register-command! 'jack-list cmd-jack-list)
+  (register-command! 'jack-connect cmd-jack-connect)
+  (register-command! 'jack-disconnect cmd-jack-disconnect)
+  (register-command! 'jack-monitor cmd-jack-monitor)
+  (register-command! 'bluez-list cmd-bluez-list)
+  (register-command! 'bluez-pair cmd-bluez-pair)
+  (register-command! 'bluez-connect cmd-bluez-connect)
+  (register-command! 'bluez-disconnect cmd-bluez-disconnect)
 )