aboutsummaryrefslogtreecommitdiff
path: root/src/app/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/state.rs')
-rw-r--r--src/app/state.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/app/state.rs b/src/app/state.rs
index dd1b167e..a25c7c5e 100644
--- a/src/app/state.rs
+++ b/src/app/state.rs
@@ -867,6 +867,34 @@ impl SettingsSection {
}
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub(crate) enum ExperimentSetting {
+ PaneHistory,
+ SwitchAsciiInputSourceInPrefix,
+}
+
+impl ExperimentSetting {
+ pub(crate) const ALL: [Self; 2] = [Self::PaneHistory, Self::SwitchAsciiInputSourceInPrefix];
+
+ pub(crate) fn label(self) -> &'static str {
+ match self {
+ Self::PaneHistory => "pane screen history",
+ Self::SwitchAsciiInputSourceInPrefix => {
+ "switch to ascii input source in prefix (macOS)"
+ }
+ }
+ }
+
+ pub(crate) fn enabled(self, state: &AppState) -> bool {
+ match self {
+ Self::PaneHistory => state.pane_history_persistence_enabled(),
+ Self::SwitchAsciiInputSourceInPrefix => {
+ state.switch_ascii_input_source_in_prefix_enabled()
+ }
+ }
+ }
+}
+
/// All built-in theme names in display order.
pub const THEME_NAMES: &[&str] = &[
"catppuccin",
@@ -1268,6 +1296,11 @@ pub struct AppState {
pub cjk_ime_agents: Vec<crate::detect::Agent>,
/// DECSCUSR shape parameter (1–6) for the IME anchor cursor.
pub cjk_ime_cursor_shape: u8,
+ /// While prefix mode is active, switch the macOS host input source to an
+ /// ASCII-capable layout so prefix commands register as ASCII even when a
+ /// CJK IME is active. macOS only; a no-op elsewhere. See
+ /// `[experimental] switch_ascii_input_source_in_prefix`.
+ pub switch_ascii_input_source_in_prefix: bool,
pub kitty_graphics_enabled: bool,
pub default_shell: String,
pub shell_mode: crate::config::ShellModeConfig,
@@ -1327,6 +1360,10 @@ impl AppState {
self.pane_history_persistence
}
+ pub fn switch_ascii_input_source_in_prefix_enabled(&self) -> bool {
+ self.switch_ascii_input_source_in_prefix
+ }
+
pub(crate) fn integration_updates_available(&self) -> bool {
self.integration_recommendations
.iter()
@@ -1575,6 +1612,7 @@ impl AppState {
cjk_ime_agent_filter_configured: false,
cjk_ime_agents: Vec::new(),
cjk_ime_cursor_shape: 2, // steady_block
+ switch_ascii_input_source_in_prefix: false,
kitty_graphics_enabled: false,
default_shell: String::new(),
shell_mode: crate::config::ShellModeConfig::Auto,