From 500687f8d7d5b87ceb33fd959e545746ec9db1ba Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sat, 16 May 2026 04:01:04 -0500 Subject: refactor(integrations): five hygiene fixes from the module-by-module re-review - markdown-config.el: two related fixes on `markdown-preview'. First, the URL was `https://localhost:8080/imp' but simple-httpd serves plaintext on port 8080 -- the browser hit a TLS handshake against a non-TLS listener and the preview never rendered. Changed to `http://' and switched from `browse-url-generic' to plain `browse-url' so the user's default protocol handler picks the browser. Second, the function used to start the network listener as a side effect of opening a preview; that's split into a separate `cj/markdown-preview-server-start' command and `markdown-preview' now signals a `user-error' (with the recovery command in the message) when the server isn't running. - slack-config.el: wrap the `which-key-add-keymap-based-replacements' call in `with-eval-after-load 'which-key'. Matches the pattern other config modules use and means a slow / missing which-key load won't block requiring slack-config. - ai-vterm.el: pass the inner shell-command-string through `shell-quote-argument' before wrapping in the tmux invocation. The default value with embedded double quotes was safe under the prior literal-single-quote wrap, but a user-customized `cj/ai-vterm-agent-command' containing a single quote silently broke the shell parse. Two existing tests updated to tolerate the post-quote escape shape; new regression test asserts a single-quote-bearing custom command survives. - eshell-config.el: scope the `TERM=xterm-256color' override to eshell-spawned processes only via an `eshell-mode' hook that prepends to a buffer-local `process-environment'. The previous global `setenv' at config-time changed `TERM' for every subsequent `start-process' across the Emacs session, so any subprocess (not just eshell pipelines) inherited `xterm-256color' regardless of whether the receiver could interpret the escapes. --- modules/slack-config.el | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'modules/slack-config.el') diff --git a/modules/slack-config.el b/modules/slack-config.el index 3e9ae283..b51db444 100644 --- a/modules/slack-config.el +++ b/modules/slack-config.el @@ -253,21 +253,25 @@ swallows exceptions via `websocket-try-callback'." (define-key cj/slack-keymap (kbd "Q") #'cj/slack-close-all-buffers) (define-key cj/slack-keymap (kbd "S") #'cj/slack-stop) -(which-key-add-keymap-based-replacements cj/slack-keymap - "" "slack menu" - "s" "start slack" - "c" "unread rooms" - "C" "select channel" - "d" "direct message" - "w" "compose message" - "r" "reply / thread" - "e" "insert emoji" - "!" "add reaction" - "@" "embed @mention" - "#" "embed #channel" - "q" "mark read & bury" - "Q" "close all slack" - "S" "disconnect") +;; Register which-key labels lazily so this module's require doesn't +;; depend on which-key being loaded. Other config modules use the same +;; pattern. +(with-eval-after-load 'which-key + (which-key-add-keymap-based-replacements cj/slack-keymap + "" "slack menu" + "s" "start slack" + "c" "unread rooms" + "C" "select channel" + "d" "direct message" + "w" "compose message" + "r" "reply / thread" + "e" "insert emoji" + "!" "add reaction" + "@" "embed @mention" + "#" "embed #channel" + "q" "mark read & bury" + "Q" "close all slack" + "S" "disconnect")) ;; Send from compose buffer with C- (with-eval-after-load 'slack-message-compose-buffer -- cgit v1.2.3