Codex Handbook
tui/src/chatwidget/hooks.rs 43 lines
use std::path::PathBuf;use super::ChatWidget;use crate::app_event::AppEvent;use crate::bottom_pane::HooksBrowserView;use crate::hooks_rpc::hooks_list_entry_for_cwd;use codex_app_server_protocol::HooksListEntry;use codex_app_server_protocol::HooksListResponse;impl ChatWidget {    pub(crate) fn add_hooks_output(&mut self) {        self.app_event_tx.send(AppEvent::FetchHooksList {            cwd: self.config.cwd.to_path_buf(),        });    }    pub(crate) fn on_hooks_loaded(        &mut self,        cwd: PathBuf,        result: Result<HooksListResponse, String>,    ) {        if self.config.cwd.as_path() != cwd.as_path() {            return;        }        match result {            Ok(response) => {                self.open_hooks_browser(hooks_list_entry_for_cwd(response, &cwd));            }            Err(err) => self.add_error_message(format!("Failed to load hooks: {err}")),        }    }    pub(crate) fn open_hooks_browser(&mut self, entry: HooksListEntry) {        self.bottom_pane            .show_view(Box::new(HooksBrowserView::from_entry(                entry,                self.app_event_tx.clone(),                self.bottom_pane.list_keymap(),            )));        self.request_redraw();    }}