import React from "react"; import { DEFAULT_TERMINAL_WORD_SEPARATORS } from "../../../domain/models"; import type { DisconnectedNoticeMode, DynamicTabTitleMode, LinkModifier, MiddleClickBehavior, OscNotificationMode, RightClickBehavior, TerminalSettings } from "../../../domain/models"; import { Input } from "../../ui/input"; import { Label } from "../../ui/label"; import { SectionHeader, Select, SettingsAnchor, SettingRow, Toggle } from "../settings-ui"; type Translate = (key: string) => string; interface TerminalBehaviorSettingsProps { t: Translate; terminalSettings: TerminalSettings; updateTerminalSetting: (key: K, value: TerminalSettings[K]) => void; } export const MIDDLE_CLICK_BEHAVIOR_OPTIONS: Array<{ value: MiddleClickBehavior; labelKey: string; }> = [ { value: "context-menu", labelKey: "settings.terminal.behavior.middleClick.menu" }, { value: "paste", labelKey: "settings.terminal.behavior.middleClick.paste" }, { value: "disabled", labelKey: "settings.terminal.behavior.middleClick.disabled" }, ]; export const DYNAMIC_TAB_TITLE_MODE_OPTIONS: Array<{ value: DynamicTabTitleMode; labelKey: string; }> = [ { value: "off", labelKey: "settings.terminal.behavior.dynamicTabTitle.off" }, { value: "agent", labelKey: "settings.terminal.behavior.dynamicTabTitle.agent" }, { value: "all", labelKey: "settings.terminal.behavior.dynamicTabTitle.all" }, ]; export const TerminalBehaviorSettings: React.FC = ({ t, terminalSettings, updateTerminalSetting, }) => ( <>
updateTerminalSetting("autoCloseOnExit", v)} /> updateTerminalSetting("rightClickBehavior", v as RightClickBehavior)} className="w-36" /> updateTerminalSetting("showContextMenuOverFullscreenApps", v)} /> updateTerminalSetting("copyOnSelect", v)} /> updateTerminalSetting("normalizeTextOnCopy", v)} /> updateTerminalSetting("wordSeparators", e.target.value)} placeholder={`${DEFAULT_TERMINAL_WORD_SEPARATORS}=,:`} className="w-56 font-mono" spellCheck={false} /> updateTerminalSetting("disableBracketedPaste", !v)} /> updateTerminalSetting("autoUploadClipboardImageOnPaste", v)} /> updateTerminalSetting("shiftEnterNewlineEnabled", v)} /> updateTerminalSetting("shiftEnterNewlineText", e.target.value)} placeholder="\\n" className="w-56 font-mono" spellCheck={false} /> updateTerminalSetting("clearWipesScrollback", v)} /> updateTerminalSetting("preserveSelectionOnInput", v)} /> updateTerminalSetting("forcePromptNewLine", v)} /> updateTerminalSetting("oscNotifications", v as OscNotificationMode)} className="w-40" /> updateTerminalSetting("linkModifier", v as LinkModifier)} className="w-48" />

{t("settings.terminal.scrollback.desc")}

{ const val = parseInt(e.target.value); if (!isNaN(val) && val >= 0 && val <= 100000) { updateTerminalSetting("scrollback", val); } }} className="w-full" />

{t("settings.terminal.startupCommandDelay.desc")}

{ const val = parseInt(e.target.value); if (!isNaN(val) && val >= 0 && val <= 10000) { updateTerminalSetting("startupCommandDelayMs", val); } }} className="w-full" />
);