@@ -5,6 +5,7 @@ local permission_window = require('opencode.ui.permission_window')
55local Promise = require (' opencode.promise' )
66local ctx = require (' opencode.ui.renderer.ctx' )
77local events = require (' opencode.ui.renderer.events' )
8+ local event_scope = require (' opencode.ui.event_scope' )
89local flush = require (' opencode.ui.renderer.flush' )
910local scroll = require (' opencode.ui.renderer.scroll' )
1011
259260-- can be stubbed cleanly (e.g. stub(renderer, '_render_full_session_data'))
260261M .on_session_updated = events .on_session_updated
261262
263+ function M .event_subscriptions ()
264+ return {
265+ { ' session.updated' , events .on_session_updated },
266+ { ' session.compacted' , events .on_session_compacted },
267+ { ' session.error' , events .on_session_error },
268+ { ' message.updated' , events .on_message_updated },
269+ { ' message.removed' , events .on_message_removed },
270+ { ' message.part.updated' , events .on_part_updated },
271+ { ' message.part.removed' , events .on_part_removed },
272+ { ' permission.updated' , events .on_permission_updated },
273+ { ' permission.asked' , events .on_permission_updated },
274+ { ' permission.replied' , events .on_permission_replied },
275+ { ' question.asked' , events .on_question_asked },
276+ { ' question.replied' , events .on_question_replied },
277+ { ' question.rejected' , events .on_question_replied },
278+ { ' file.edited' , events .on_file_edited },
279+ { ' custom.restore_point.created' , events .on_restore_points },
280+ { ' custom.emit_events.finished' , M .on_emit_events_finished },
281+ }
282+ end
283+
262284--- Reset all renderer state and clear the output buffer
263285function M .reset ()
264286 ctx :reset ()
@@ -291,30 +313,12 @@ function M.setup_subscriptions(subscribe)
291313 return
292314 end
293315
294- local subs = {
295- { ' session.updated' , events .on_session_updated },
296- { ' session.compacted' , events .on_session_compacted },
297- { ' session.error' , events .on_session_error },
298- { ' message.updated' , events .on_message_updated },
299- { ' message.removed' , events .on_message_removed },
300- { ' message.part.updated' , events .on_part_updated },
301- { ' message.part.removed' , events .on_part_removed },
302- { ' permission.updated' , events .on_permission_updated },
303- { ' permission.asked' , events .on_permission_updated },
304- { ' permission.replied' , events .on_permission_replied },
305- { ' question.asked' , events .on_question_asked },
306- { ' question.replied' , events .clear_question_display },
307- { ' question.rejected' , events .clear_question_display },
308- { ' file.edited' , events .on_file_edited },
309- { ' custom.restore_point.created' , events .on_restore_points },
310- { ' custom.emit_events.finished' , M .on_emit_events_finished },
311- }
312-
313- for _ , sub in ipairs (subs ) do
316+ for _ , sub in ipairs (M .event_subscriptions ()) do
317+ local callback = event_scope .scoped_callback (sub [1 ], sub [2 ])
314318 if subscribe then
315- state .event_manager :subscribe (sub [1 ], sub [ 2 ] )
319+ state .event_manager :subscribe (sub [1 ], callback )
316320 else
317- state .event_manager :unsubscribe (sub [1 ], sub [ 2 ] )
321+ state .event_manager :unsubscribe (sub [1 ], callback )
318322 end
319323 end
320324end
0 commit comments