-
Notifications
You must be signed in to change notification settings - Fork 1
Example subagent window hooks (subagent UI pop ups)
Elijah Charles edited this page Jun 30, 2026
·
1 revision
(defun my-macher-show-agent-window (buf)
(let* ((buffer (get-buffer buf))
(window (when buffer
(display-buffer buffer
'(display-buffer-below-selected
(window-height . 5)
(dedicated . t))))))
(when window
(set-window-point window (with-current-buffer buffer (point-max))))))
(defun my-macher-hide-agent-window (buf)
(let ((win (get-buffer-window buf)))
(when win
(delete-window win))))
(setq macher-agent-display-subagent-fn #'my-macher-show-agent-window)
(setq macher-agent-hide-subagent-fn #'my-macher-hide-agent-window)(require 'cl-lib)
(defvar my-macher-popup-counter 0)
(defun my-macher-poshandler-stack-bottom-left (info)
(let* ((window-left (plist-get info :parent-window-left))
(window-top (plist-get info :parent-window-top))
(window-height (plist-get info :parent-window-height))
(posframe-height (plist-get info :posframe-height))
(mode-line-height (plist-get info :mode-line-height))
(base-y (+ window-top window-height (- 0 mode-line-height posframe-height)))
(y-shift (- base-y (* my-macher-popup-counter (+ posframe-height 2)))))
(cons window-left y-shift)))
(defun my-macher-show-child-frame (buf)
(let* ((buffer (get-buffer buf))
(win-width (window-width))
(existing-frame (posframe--find-existing-posframe buffer))
(is-new (not (and existing-frame (frame-visible-p existing-frame)))))
(unless (cl-some (lambda (f)
(and (frame-parameter f 'macher-agent-posframe)
(frame-visible-p f)))
(frame-list))
(setq my-macher-popup-counter 0))
(posframe-show buffer
:poshandler #'my-macher-poshandler-stack-bottom-left
:width win-width
:min-width win-width
:height 5
:min-height 5
:window-point (with-current-buffer buffer (point-max))
:override-parameters '((macher-agent-posframe . t))
:background-color "#1e1e2e"
:internal-border-width 2
:internal-border-color "#cba6f7"
:respect-header-line t)
(when is-new
(setq my-macher-popup-counter (1+ my-macher-popup-counter)))))
(defun my-macher-hide-child-frame (buf)
(let ((frame (posframe--find-existing-posframe (get-buffer buf))))
(posframe-hide buf)
(unless (cl-some (lambda (f)
(and (frame-parameter f 'macher-agent-posframe)
(not (eq f frame))
(frame-visible-p f)))
(frame-list))
(setq my-macher-popup-counter 0))))
(setq macher-agent-display-subagent-fn #'my-macher-show-child-frame)
(setq macher-agent-hide-subagent-fn #'my-macher-hide-child-frame)