* agent-shell Evil bindings for [[https://github.com/xenodium/agent-shell][agent-shell]] -- a comint-based chat REPL with permission prompts, a side viewport and a diff buffer. ** agent-shell-mode-map Upstream's =n= / =p= top-level bindings are unset so they don't intercept keystrokes in insert state; in insert they self-insert. *** Permission dispatch (normal state) Only active when =evil-collection-agent-shell-want-permission-bindings= is non-nil. Each key falls through to its default evil command unless a pending permission button is visible. | Command | Action | Evil | |-------------------------------------------------------+------------------+------| | =evil-collection-agent-shell-permission-view-diff= | view diff =v= | =v= | | =evil-collection-agent-shell-permission-allow-once= | allow =y= | =y= | | =evil-collection-agent-shell-permission-reject-once= | reject =C-c C-c= | =n= | | =evil-collection-agent-shell-permission-allow-always= | always allow =!= | =!= | *** Navigation (normal state) | Command | Original | Evil | |----------------------------------+----------+-------------| | =agent-shell-next-item= | =n= | =TAB= | | =agent-shell-previous-item= | =p= | == | | =agent-shell-cycle-session-mode= | n/a | =C-= | *** g-prefix (only when =evil-collection-want-g-bindings=) | Command | Evil | |----------------------------------+------| | =agent-shell-cycle-session-mode= | =gs= | | =agent-shell-interrupt= | =gx= | | =agent-shell-set-session-mode= | =gm= | | =agent-shell-set-session-model= | =gv= | | =agent-shell-other-buffer= | =go= | | =agent-shell-yank-dwim= | =gp= | | =agent-shell-reload= | =gr= | | =agent-shell-restart= | =gR= | | =agent-shell-fork= | =gF= | | =agent-shell-copy-session-id= | =gy= | | =agent-shell-prompt-compose= | =gc= | | =agent-shell-queue-request= | =gq= | | =agent-shell-open-transcript= | =gt= | ** agent-shell-viewport-edit-mode-map The viewport's compose buffer. Standard save/quit verbs become send/cancel. | Command | Original | Evil | |------------------------------------------+-----------+--------------------------------| | =agent-shell-viewport-compose-send= | =C-c C-c= | =:w=, =:wq=, =ZZ=, =RET= remap | | =agent-shell-viewport-compose-cancel= | =C-c C-k= | =:q=, =ZQ= | | =agent-shell-viewport-previous-history= | n/a | =M-k= | | =agent-shell-viewport-next-history= | n/a | =M-j= | | =agent-shell-viewport-compose-peek-last= | n/a | =C-o= | When =evil-collection-want-g-bindings= is non-nil: | Command | Evil | |------------------------------------------+------| | =agent-shell-viewport-compose-help-menu= | =g?= | | =agent-shell-cycle-session-mode= | =gs= | | =agent-shell-viewport-set-session-mode= | =gm= | | =agent-shell-viewport-set-session-model= | =gv= | | =agent-shell-other-buffer= | =go= | | =agent-shell-yank-dwim= | =gp= | | =agent-shell-viewport-search-history= | =g/= | | =agent-shell-viewport-copy-session-id= | =gy= | | =agent-shell-viewport-open-transcript= | =gt= | ** agent-shell-viewport-view-mode-map Read-only viewport. =RET= / =:w= / =ZZ= all interrupt the agent; =:q= / =ZQ= bury. | Command | Original | Evil | |--------------------------------------+-----------+-------------------------| | =agent-shell-viewport-interrupt= | =C-c C-c= | =RET=, =:w=, =ZZ= remap | | =bury-buffer= | =q= | =q=, =ZQ=, =:q= remap | | =agent-shell-viewport-next-item= | =n= | =TAB=, =gj= | | =agent-shell-viewport-previous-item= | =p= | ==, =gk= | | =agent-shell-viewport-next-page= | =f= | =C-j= | | =agent-shell-viewport-previous-page= | =b= | =C-k= | When =evil-collection-want-g-bindings= is non-nil: | Command | Evil | |-------------------------------------------+--------------| | =agent-shell-viewport-reply-1..9= | =g1= .. =g9= | | =agent-shell-viewport-cycle-session-mode= | =gs= | | =agent-shell-viewport-set-session-model= | =gv= | | =agent-shell-other-buffer= | =go= | | =agent-shell-viewport-set-session-mode= | =gm= | | =agent-shell-viewport-help-menu= | =g?= | | =agent-shell-viewport-reply= | =gr= | | =agent-shell-viewport-reply-yes= | =gy= | | =agent-shell-viewport-reply-more= | =gM= | | =agent-shell-viewport-reply-again= | =ga= | | =agent-shell-viewport-reply-continue= | =gc= | | =agent-shell-viewport-edit= | =ge= | | =agent-shell-viewport-fork= | =gF= | | =agent-shell-viewport-copy-session-id= | =gY= | | =agent-shell-viewport-open-transcript= | =gt= | | =agent-shell-viewport-refresh= | =gz= | ** agent-shell-diff-mode-map | Command | Original | Evil (=g-bindings=) | Evil (no =g-bindings=) | |-------------------------------+----------+---------------------+------------------------| | =agent-shell-diff-open-file= | =f= | =gf= | =f= | | =agent-shell-diff-accept-all= | =y= | =gy= | =y= | | =agent-shell-diff-reject-all= | =n= | =gn= | =n= | | =kill-current-buffer= | n/a | =q= | =q= | ** New commands | Command | Purpose | |-------------------------------------------------------+----------------------------------------------------| | =evil-collection-agent-shell-permission-allow-once= | Press =y= on the latest pending permission button. | | =evil-collection-agent-shell-permission-reject-once= | Send =C-c C-c= to it. | | =evil-collection-agent-shell-permission-allow-always= | Press =!=. | | =evil-collection-agent-shell-permission-view-diff= | Press =v=. | Each only fires when a pending permission button is visible -- otherwise the keymap entry resolves to nil via a =:filter= and evil's default takes over. ** Customization | Variable | Default | Purpose | |--------------------------------------------------------+---------+-------------------------------------------------------| | =evil-collection-agent-shell-want-permission-bindings= | =t= | Bind =y= / =n= / =!= / =v= for the dispatchers above. |