New keyboard shortcuts
This commit is contained in:
@@ -346,20 +346,22 @@ def cleanup_and_exit(state: State):
|
||||
|
||||
def _bind_hotkeys(state: State):
|
||||
logging.debug(
|
||||
"Binding hotkeys: capture=%s send=%s action3=%s reset=%s quit=%s toggle_mode=%s",
|
||||
"Binding hotkeys: capture=%s send=%s action3=%s reset=%s quit=%s toggle_mode=%s suppress=%s",
|
||||
state.cfg.shortcut_capture,
|
||||
state.cfg.shortcut_send,
|
||||
state.cfg.shortcut_action3,
|
||||
state.cfg.shortcut_reset,
|
||||
state.cfg.shortcut_quit,
|
||||
state.cfg.shortcut_toggle_mode,
|
||||
getattr(state.cfg, 'suppress_hotkeys', True),
|
||||
)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_capture, lambda: capture_active_window(state))
|
||||
keyboard.add_hotkey(state.cfg.shortcut_send, lambda: threading.Thread(target=send_to_openai, args=(state,), daemon=True).start())
|
||||
keyboard.add_hotkey(state.cfg.shortcut_action3, lambda: threading.Thread(target=handle_action3, args=(state,), daemon=True).start())
|
||||
keyboard.add_hotkey(state.cfg.shortcut_reset, lambda: reset_state(state))
|
||||
keyboard.add_hotkey(state.cfg.shortcut_quit, lambda: maybe_quit(state))
|
||||
keyboard.add_hotkey(state.cfg.shortcut_toggle_mode, lambda: toggle_mode(state))
|
||||
suppress = getattr(state.cfg, 'suppress_hotkeys', True)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_capture, lambda: capture_active_window(state), suppress=suppress)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_send, lambda: threading.Thread(target=send_to_openai, args=(state,), daemon=True).start(), suppress=suppress)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_action3, lambda: threading.Thread(target=handle_action3, args=(state,), daemon=True).start(), suppress=suppress)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_reset, lambda: reset_state(state), suppress=suppress)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_quit, lambda: maybe_quit(state), suppress=suppress)
|
||||
keyboard.add_hotkey(state.cfg.shortcut_toggle_mode, lambda: toggle_mode(state), suppress=suppress)
|
||||
# Ctrl+V listener (do not suppress paste)
|
||||
keyboard.add_hotkey("ctrl+v", lambda: on_paste_event(state), suppress=False)
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ from dataclasses import dataclass
|
||||
@dataclass
|
||||
class Settings:
|
||||
# Hotkeys (Windows format for `keyboard` lib)
|
||||
shortcut_capture: str = "alt+shift+1"
|
||||
shortcut_send: str = "alt+shift+2"
|
||||
shortcut_action3: str = "alt+shift+3"
|
||||
shortcut_reset: str = "alt+shift+4"
|
||||
shortcut_quit: str = "alt+shift+5"
|
||||
shortcut_toggle_mode: str = "alt+shift+6"
|
||||
shortcut_capture: str = "ctrl+shift+1"
|
||||
shortcut_send: str = "ctrl+shift+2"
|
||||
shortcut_action3: str = "ctrl+shift+3"
|
||||
shortcut_reset: str = "ctrl+shift+4"
|
||||
shortcut_quit: str = "ctrl+shift+5"
|
||||
shortcut_toggle_mode: str = "ctrl+shift+6"
|
||||
|
||||
# OpenAI
|
||||
model: str = "Google Gemini_2.5"
|
||||
@@ -35,6 +35,29 @@ class Settings:
|
||||
captures_dir_name: str = "captures"
|
||||
response_file_name: str = "response.txt"
|
||||
log_file_name: str = "agent.log"
|
||||
suppress_hotkeys: bool = True
|
||||
|
||||
def __post_init__(self):
|
||||
# Allow hotkey overrides via environment variables for easy customization
|
||||
# Example: set BG_AGENT_SHORTCUT_SEND="ctrl+shift+enter"
|
||||
env_map = {
|
||||
"BG_AGENT_SHORTCUT_CAPTURE": "shortcut_capture",
|
||||
"BG_AGENT_SHORTCUT_SEND": "shortcut_send",
|
||||
"BG_AGENT_SHORTCUT_ACTION3": "shortcut_action3",
|
||||
"BG_AGENT_SHORTCUT_RESET": "shortcut_reset",
|
||||
"BG_AGENT_SHORTCUT_QUIT": "shortcut_quit",
|
||||
"BG_AGENT_SHORTCUT_TOGGLE_MODE": "shortcut_toggle_mode",
|
||||
}
|
||||
for env, attr in env_map.items():
|
||||
val = os.environ.get(env)
|
||||
if val:
|
||||
setattr(self, attr, val)
|
||||
|
||||
# Optional: allow disabling suppression via env
|
||||
sup = os.environ.get("BG_AGENT_SUPPRESS_HOTKEYS")
|
||||
if sup is not None:
|
||||
v = str(sup).strip().lower()
|
||||
self.suppress_hotkeys = v in {"1", "true", "yes", "on"}
|
||||
|
||||
|
||||
def ensure_dirs(cfg: Settings) -> None:
|
||||
|
||||
Reference in New Issue
Block a user