From 80ca830bf80d62980e2beb5d02c94168f34b2bf9 Mon Sep 17 00:00:00 2001 From: Tim McCarthy Date: Tue, 15 Sep 2026 15:05:30 -0700 Subject: [PATCH] Giant's deep tmux monitor --- emacs/init.el | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/emacs/init.el b/emacs/init.el index ceb0ea5..9d099d6 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -551,14 +551,16 @@ EMACS-ALTERNATIVE is the Emacs equivalent (e.g., 'C-s')." "\\*Flycheck errors\\*" help-mode compilation-mode + "\\`\\*gd-tmux\\*\\'" "eshell-popup\\*$")) (defun my/popper-window-height (window) - "Resize eshell popups to half the frame height; fit other popups." + "Resize terminal popups to half the frame height; fit other popups." (let ((buffer (window-buffer window))) (if (with-current-buffer buffer ;; Eshell displays a new buffer before enabling `eshell-mode'. (or (derived-mode-p 'eshell-mode) + (equal (buffer-name) "*gd-tmux*") (string-match-p "eshell-popup\\*$" (buffer-name)))) ;; A functional `window-height' action must resize the window. (let ((height (/ (frame-height (window-frame window)) 2))) @@ -1139,15 +1141,48 @@ any directory proffered by `consult-dir'." ;;;; Eat (use-package eat :ensure t + :bind (("C-o g" . my/gd-tmux-toggle)) :custom (eat-term-name "xterm-256color") :init + (defun my/gd-tmux-toggle () + "Show or hide the tmux terminal on gd. +Connect the Tubnix tunnel in WireGuard first. Hiding the popup keeps +SSH alive; opening it after SSH exits reconnects to the existing tmux +session. With multiple sessions, tmux chooses its default session." + (interactive) + (if-let* ((window (get-buffer-window "*gd-tmux*"))) + (quit-window nil window) + (require 'eat) + ;; Always launch local SSH, even when called from a TRAMP buffer. + (let* ((default-directory (expand-file-name "~/")) + (buffer (eat-make "gd-tmux" "ssh" nil + "-t" "-o" "ConnectTimeout=10" + "-o" "ServerAliveInterval=15" + "-o" "ServerAliveCountMax=3" + "gd" "tmux attach-session"))) + (with-current-buffer buffer + (use-local-map (copy-keymap (current-local-map))) + (local-set-key (kbd "q") #'quit-window) + ;; Eat's input modes take precedence over the major-mode map. + (dolist (mode '(eat--semi-char-mode eat--char-mode)) + (let ((map (make-sparse-keymap))) + (set-keymap-parent map (alist-get mode minor-mode-map-alist)) + (define-key map (kbd "q") #'quit-window) + (setq-local minor-mode-overriding-map-alist + (cons (cons mode map) + (assq-delete-all + mode minor-mode-overriding-map-alist)))))) + (pop-to-buffer buffer)))) + (eval-after-load 'eshell #'eat-eshell-mode) (eval-after-load 'eshell #'eat-eshell-visual-command-mode) :config (defun advise-eat-keymap (map) (define-key map [?\C-o] nil) (define-key map (vector meta-prefix-char ?`) nil) + ;; Let Popper dismiss terminal windows without sending M-o remotely. + (define-key map (vector meta-prefix-char ?o) nil) (define-key map [S-v] #'eat-yank)) (define-advice eat-eshell-semi-char-mode