from collections.abc import Mapping from typing import Any, TypeVar, Union from attrs import define as _attrs_define from ..types import UNSET, Unset T = TypeVar("T", bound="KeybindsConfig") @_attrs_define class KeybindsConfig: """Custom keybind configurations Attributes: leader (Union[Unset, str]): Leader key for keybind combinations Default: 'ctrl+x'. app_help (Union[Unset, str]): Show help dialog Default: 'h'. app_exit (Union[Unset, str]): Exit the application Default: 'ctrl+c,q'. editor_open (Union[Unset, str]): Open external editor Default: 'e'. theme_list (Union[Unset, str]): List available themes Default: 't'. project_init (Union[Unset, str]): Create/update AGENTS.md Default: 'i'. tool_details (Union[Unset, str]): Toggle tool details Default: 'd'. thinking_blocks (Union[Unset, str]): Toggle thinking blocks Default: 'b'. session_export (Union[Unset, str]): Export session to editor Default: 'x'. session_new (Union[Unset, str]): Create a new session Default: 'n'. session_list (Union[Unset, str]): List all sessions Default: 'l'. session_timeline (Union[Unset, str]): Show session timeline Default: 'g'. session_share (Union[Unset, str]): Share current session Default: 's'. session_unshare (Union[Unset, str]): Unshare current session Default: 'none'. session_interrupt (Union[Unset, str]): Interrupt current session Default: 'esc'. session_compact (Union[Unset, str]): Compact the session Default: 'c'. session_child_cycle (Union[Unset, str]): Cycle to next child session Default: 'ctrl+right'. session_child_cycle_reverse (Union[Unset, str]): Cycle to previous child session Default: 'ctrl+left'. messages_page_up (Union[Unset, str]): Scroll messages up by one page Default: 'pgup'. messages_page_down (Union[Unset, str]): Scroll messages down by one page Default: 'pgdown'. messages_half_page_up (Union[Unset, str]): Scroll messages up by half page Default: 'ctrl+alt+u'. messages_half_page_down (Union[Unset, str]): Scroll messages down by half page Default: 'ctrl+alt+d'. messages_first (Union[Unset, str]): Navigate to first message Default: 'ctrl+g'. messages_last (Union[Unset, str]): Navigate to last message Default: 'ctrl+alt+g'. messages_copy (Union[Unset, str]): Copy message Default: 'y'. messages_undo (Union[Unset, str]): Undo message Default: 'u'. messages_redo (Union[Unset, str]): Redo message Default: 'r'. model_list (Union[Unset, str]): List available models Default: 'm'. model_cycle_recent (Union[Unset, str]): Next recent model Default: 'f2'. model_cycle_recent_reverse (Union[Unset, str]): Previous recent model Default: 'shift+f2'. agent_list (Union[Unset, str]): List agents Default: 'a'. agent_cycle (Union[Unset, str]): Next agent Default: 'tab'. agent_cycle_reverse (Union[Unset, str]): Previous agent Default: 'shift+tab'. input_clear (Union[Unset, str]): Clear input field Default: 'ctrl+c'. input_paste (Union[Unset, str]): Paste from clipboard Default: 'ctrl+v'. input_submit (Union[Unset, str]): Submit input Default: 'enter'. input_newline (Union[Unset, str]): Insert newline in input Default: 'shift+enter,ctrl+j'. switch_mode (Union[Unset, str]): @deprecated use agent_cycle. Next mode Default: 'none'. switch_mode_reverse (Union[Unset, str]): @deprecated use agent_cycle_reverse. Previous mode Default: 'none'. switch_agent (Union[Unset, str]): @deprecated use agent_cycle. Next agent Default: 'tab'. switch_agent_reverse (Union[Unset, str]): @deprecated use agent_cycle_reverse. Previous agent Default: 'shift+tab'. file_list (Union[Unset, str]): @deprecated Currently not available. List files Default: 'none'. file_close (Union[Unset, str]): @deprecated Close file Default: 'none'. file_search (Union[Unset, str]): @deprecated Search file Default: 'none'. file_diff_toggle (Union[Unset, str]): @deprecated Split/unified diff Default: 'none'. messages_previous (Union[Unset, str]): @deprecated Navigate to previous message Default: 'none'. messages_next (Union[Unset, str]): @deprecated Navigate to next message Default: 'none'. messages_layout_toggle (Union[Unset, str]): @deprecated Toggle layout Default: 'none'. messages_revert (Union[Unset, str]): @deprecated use messages_undo. Revert message Default: 'none'. """ leader: Union[Unset, str] = "ctrl+x" app_help: Union[Unset, str] = "h" app_exit: Union[Unset, str] = "ctrl+c,q" editor_open: Union[Unset, str] = "e" theme_list: Union[Unset, str] = "t" project_init: Union[Unset, str] = "i" tool_details: Union[Unset, str] = "d" thinking_blocks: Union[Unset, str] = "b" session_export: Union[Unset, str] = "x" session_new: Union[Unset, str] = "n" session_list: Union[Unset, str] = "l" session_timeline: Union[Unset, str] = "g" session_share: Union[Unset, str] = "s" session_unshare: Union[Unset, str] = "none" session_interrupt: Union[Unset, str] = "esc" session_compact: Union[Unset, str] = "c" session_child_cycle: Union[Unset, str] = "right" session_child_cycle_reverse: Union[Unset, str] = "left" messages_page_up: Union[Unset, str] = "pgup" messages_page_down: Union[Unset, str] = "pgdown" messages_half_page_up: Union[Unset, str] = "ctrl+alt+u" messages_half_page_down: Union[Unset, str] = "ctrl+alt+d" messages_first: Union[Unset, str] = "ctrl+g" messages_last: Union[Unset, str] = "ctrl+alt+g" messages_copy: Union[Unset, str] = "y" messages_undo: Union[Unset, str] = "u" messages_redo: Union[Unset, str] = "r" model_list: Union[Unset, str] = "m" model_cycle_recent: Union[Unset, str] = "f2" model_cycle_recent_reverse: Union[Unset, str] = "shift+f2" agent_list: Union[Unset, str] = "a" agent_cycle: Union[Unset, str] = "tab" agent_cycle_reverse: Union[Unset, str] = "shift+tab" input_clear: Union[Unset, str] = "ctrl+c" input_paste: Union[Unset, str] = "ctrl+v" input_submit: Union[Unset, str] = "enter" input_newline: Union[Unset, str] = "shift+enter,ctrl+j" switch_mode: Union[Unset, str] = "none" switch_mode_reverse: Union[Unset, str] = "none" switch_agent: Union[Unset, str] = "tab" switch_agent_reverse: Union[Unset, str] = "shift+tab" file_list: Union[Unset, str] = "none" file_close: Union[Unset, str] = "none" file_search: Union[Unset, str] = "none" file_diff_toggle: Union[Unset, str] = "none" messages_previous: Union[Unset, str] = "none" messages_next: Union[Unset, str] = "none" messages_layout_toggle: Union[Unset, str] = "none" messages_revert: Union[Unset, str] = "none" def to_dict(self) -> dict[str, Any]: leader = self.leader app_help = self.app_help app_exit = self.app_exit editor_open = self.editor_open theme_list = self.theme_list project_init = self.project_init tool_details = self.tool_details thinking_blocks = self.thinking_blocks session_export = self.session_export session_new = self.session_new session_list = self.session_list session_timeline = self.session_timeline session_share = self.session_share session_unshare = self.session_unshare session_interrupt = self.session_interrupt session_compact = self.session_compact session_child_cycle = self.session_child_cycle session_child_cycle_reverse = self.session_child_cycle_reverse messages_page_up = self.messages_page_up messages_page_down = self.messages_page_down messages_half_page_up = self.messages_half_page_up messages_half_page_down = self.messages_half_page_down messages_first = self.messages_first messages_last = self.messages_last messages_copy = self.messages_copy messages_undo = self.messages_undo messages_redo = self.messages_redo model_list = self.model_list model_cycle_recent = self.model_cycle_recent model_cycle_recent_reverse = self.model_cycle_recent_reverse agent_list = self.agent_list agent_cycle = self.agent_cycle agent_cycle_reverse = self.agent_cycle_reverse input_clear = self.input_clear input_paste = self.input_paste input_submit = self.input_submit input_newline = self.input_newline switch_mode = self.switch_mode switch_mode_reverse = self.switch_mode_reverse switch_agent = self.switch_agent switch_agent_reverse = self.switch_agent_reverse file_list = self.file_list file_close = self.file_close file_search = self.file_search file_diff_toggle = self.file_diff_toggle messages_previous = self.messages_previous messages_next = self.messages_next messages_layout_toggle = self.messages_layout_toggle messages_revert = self.messages_revert field_dict: dict[str, Any] = {} field_dict.update({}) if leader is not UNSET: field_dict["leader"] = leader if app_help is not UNSET: field_dict["app_help"] = app_help if app_exit is not UNSET: field_dict["app_exit"] = app_exit if editor_open is not UNSET: field_dict["editor_open"] = editor_open if theme_list is not UNSET: field_dict["theme_list"] = theme_list if project_init is not UNSET: field_dict["project_init"] = project_init if tool_details is not UNSET: field_dict["tool_details"] = tool_details if thinking_blocks is not UNSET: field_dict["thinking_blocks"] = thinking_blocks if session_export is not UNSET: field_dict["session_export"] = session_export if session_new is not UNSET: field_dict["session_new"] = session_new if session_list is not UNSET: field_dict["session_list"] = session_list if session_timeline is not UNSET: field_dict["session_timeline"] = session_timeline if session_share is not UNSET: field_dict["session_share"] = session_share if session_unshare is not UNSET: field_dict["session_unshare"] = session_unshare if session_interrupt is not UNSET: field_dict["session_interrupt"] = session_interrupt if session_compact is not UNSET: field_dict["session_compact"] = session_compact if session_child_cycle is not UNSET: field_dict["session_child_cycle"] = session_child_cycle if session_child_cycle_reverse is not UNSET: field_dict["session_child_cycle_reverse"] = session_child_cycle_reverse if messages_page_up is not UNSET: field_dict["messages_page_up"] = messages_page_up if messages_page_down is not UNSET: field_dict["messages_page_down"] = messages_page_down if messages_half_page_up is not UNSET: field_dict["messages_half_page_up"] = messages_half_page_up if messages_half_page_down is not UNSET: field_dict["messages_half_page_down"] = messages_half_page_down if messages_first is not UNSET: field_dict["messages_first"] = messages_first if messages_last is not UNSET: field_dict["messages_last"] = messages_last if messages_copy is not UNSET: field_dict["messages_copy"] = messages_copy if messages_undo is not UNSET: field_dict["messages_undo"] = messages_undo if messages_redo is not UNSET: field_dict["messages_redo"] = messages_redo if model_list is not UNSET: field_dict["model_list"] = model_list if model_cycle_recent is not UNSET: field_dict["model_cycle_recent"] = model_cycle_recent if model_cycle_recent_reverse is not UNSET: field_dict["model_cycle_recent_reverse"] = model_cycle_recent_reverse if agent_list is not UNSET: field_dict["agent_list"] = agent_list if agent_cycle is not UNSET: field_dict["agent_cycle"] = agent_cycle if agent_cycle_reverse is not UNSET: field_dict["agent_cycle_reverse"] = agent_cycle_reverse if input_clear is not UNSET: field_dict["input_clear"] = input_clear if input_paste is not UNSET: field_dict["input_paste"] = input_paste if input_submit is not UNSET: field_dict["input_submit"] = input_submit if input_newline is not UNSET: field_dict["input_newline"] = input_newline if switch_mode is not UNSET: field_dict["switch_mode"] = switch_mode if switch_mode_reverse is not UNSET: field_dict["switch_mode_reverse"] = switch_mode_reverse if switch_agent is not UNSET: field_dict["switch_agent"] = switch_agent if switch_agent_reverse is not UNSET: field_dict["switch_agent_reverse"] = switch_agent_reverse if file_list is not UNSET: field_dict["file_list"] = file_list if file_close is not UNSET: field_dict["file_close"] = file_close if file_search is not UNSET: field_dict["file_search"] = file_search if file_diff_toggle is not UNSET: field_dict["file_diff_toggle"] = file_diff_toggle if messages_previous is not UNSET: field_dict["messages_previous"] = messages_previous if messages_next is not UNSET: field_dict["messages_next"] = messages_next if messages_layout_toggle is not UNSET: field_dict["messages_layout_toggle"] = messages_layout_toggle if messages_revert is not UNSET: field_dict["messages_revert"] = messages_revert return field_dict @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) leader = d.pop("leader", UNSET) app_help = d.pop("app_help", UNSET) app_exit = d.pop("app_exit", UNSET) editor_open = d.pop("editor_open", UNSET) theme_list = d.pop("theme_list", UNSET) project_init = d.pop("project_init", UNSET) tool_details = d.pop("tool_details", UNSET) thinking_blocks = d.pop("thinking_blocks", UNSET) session_export = d.pop("session_export", UNSET) session_new = d.pop("session_new", UNSET) session_list = d.pop("session_list", UNSET) session_timeline = d.pop("session_timeline", UNSET) session_share = d.pop("session_share", UNSET) session_unshare = d.pop("session_unshare", UNSET) session_interrupt = d.pop("session_interrupt", UNSET) session_compact = d.pop("session_compact", UNSET) session_child_cycle = d.pop("session_child_cycle", UNSET) session_child_cycle_reverse = d.pop("session_child_cycle_reverse", UNSET) messages_page_up = d.pop("messages_page_up", UNSET) messages_page_down = d.pop("messages_page_down", UNSET) messages_half_page_up = d.pop("messages_half_page_up", UNSET) messages_half_page_down = d.pop("messages_half_page_down", UNSET) messages_first = d.pop("messages_first", UNSET) messages_last = d.pop("messages_last", UNSET) messages_copy = d.pop("messages_copy", UNSET) messages_undo = d.pop("messages_undo", UNSET) messages_redo = d.pop("messages_redo", UNSET) model_list = d.pop("model_list", UNSET) model_cycle_recent = d.pop("model_cycle_recent", UNSET) model_cycle_recent_reverse = d.pop("model_cycle_recent_reverse", UNSET) agent_list = d.pop("agent_list", UNSET) agent_cycle = d.pop("agent_cycle", UNSET) agent_cycle_reverse = d.pop("agent_cycle_reverse", UNSET) input_clear = d.pop("input_clear", UNSET) input_paste = d.pop("input_paste", UNSET) input_submit = d.pop("input_submit", UNSET) input_newline = d.pop("input_newline", UNSET) switch_mode = d.pop("switch_mode", UNSET) switch_mode_reverse = d.pop("switch_mode_reverse", UNSET) switch_agent = d.pop("switch_agent", UNSET) switch_agent_reverse = d.pop("switch_agent_reverse", UNSET) file_list = d.pop("file_list", UNSET) file_close = d.pop("file_close", UNSET) file_search = d.pop("file_search", UNSET) file_diff_toggle = d.pop("file_diff_toggle", UNSET) messages_previous = d.pop("messages_previous", UNSET) messages_next = d.pop("messages_next", UNSET) messages_layout_toggle = d.pop("messages_layout_toggle", UNSET) messages_revert = d.pop("messages_revert", UNSET) keybinds_config = cls( leader=leader, app_help=app_help, app_exit=app_exit, editor_open=editor_open, theme_list=theme_list, project_init=project_init, tool_details=tool_details, thinking_blocks=thinking_blocks, session_export=session_export, session_new=session_new, session_list=session_list, session_timeline=session_timeline, session_share=session_share, session_unshare=session_unshare, session_interrupt=session_interrupt, session_compact=session_compact, session_child_cycle=session_child_cycle, session_child_cycle_reverse=session_child_cycle_reverse, messages_page_up=messages_page_up, messages_page_down=messages_page_down, messages_half_page_up=messages_half_page_up, messages_half_page_down=messages_half_page_down, messages_first=messages_first, messages_last=messages_last, messages_copy=messages_copy, messages_undo=messages_undo, messages_redo=messages_redo, model_list=model_list, model_cycle_recent=model_cycle_recent, model_cycle_recent_reverse=model_cycle_recent_reverse, agent_list=agent_list, agent_cycle=agent_cycle, agent_cycle_reverse=agent_cycle_reverse, input_clear=input_clear, input_paste=input_paste, input_submit=input_submit, input_newline=input_newline, switch_mode=switch_mode, switch_mode_reverse=switch_mode_reverse, switch_agent=switch_agent, switch_agent_reverse=switch_agent_reverse, file_list=file_list, file_close=file_close, file_search=file_search, file_diff_toggle=file_diff_toggle, messages_previous=messages_previous, messages_next=messages_next, messages_layout_toggle=messages_layout_toggle, messages_revert=messages_revert, ) return keybinds_config