From cbdd0729f75721f246de94661a6ee83505d83399 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Mon, 9 Feb 2026 16:11:42 -0600 Subject: fix(keyboard): support daemon mode for M-S- key translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GUI key translations (M-O → M-S-o, etc.) were never installed in daemon mode because env-gui-p returns nil at startup with no frame. Use server-after-make-frame-hook for daemon, emacs-startup-hook otherwise. Also adds timestamps to assemblyai-transcribe output. --- modules/keyboard-compat.el | 8 ++++++-- scripts/assemblyai-transcribe | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/keyboard-compat.el b/modules/keyboard-compat.el index 9b277ba8..735839eb 100644 --- a/modules/keyboard-compat.el +++ b/modules/keyboard-compat.el @@ -163,8 +163,12 @@ Meta+Shift+letter triggers M-S-letter keybindings." (define-key key-translation-map (kbd "M-B") (kbd "M-S-b")) (define-key key-translation-map (kbd "M-K") (kbd "M-S-k")))) -;; Run early - key-translation-map should be set up before keybindings -(add-hook 'emacs-startup-hook #'cj/keyboard-compat-gui-setup) +;; In daemon mode, no frame exists at startup so env-gui-p returns nil. +;; Use server-after-make-frame-hook to set up translations when the first +;; GUI client connects. In non-daemon mode, run at startup as before. +(if (daemonp) + (add-hook 'server-after-make-frame-hook #'cj/keyboard-compat-gui-setup) + (add-hook 'emacs-startup-hook #'cj/keyboard-compat-gui-setup)) (provide 'keyboard-compat) ;;; keyboard-compat.el ends here diff --git a/scripts/assemblyai-transcribe b/scripts/assemblyai-transcribe index 22cbf538..c798cb6b 100755 --- a/scripts/assemblyai-transcribe +++ b/scripts/assemblyai-transcribe @@ -127,7 +127,7 @@ echo "Transcription complete! (${ELAPSED}s total)" >&2 # Extract utterances and format as "Speaker A: text" echo "$RESULT" | jq -r ' if .utterances then - .utterances[] | "Speaker \(.speaker): \(.text)" + .utterances[] | ((.start / 1000 | floor) as $s | "\([$s/3600 | floor, ($s % 3600 / 60 | floor), $s % 60] | map(tostring | if length < 2 then "0" + . else . end) | join(":")) Speaker \(.speaker): \(.text)") else .text end -- cgit v1.2.3