namespace DodoSSH.Client.Session; /// /// How the phone's terminal keys are arranged on this device. /// /// /// /// Ids, not keys. Every list here names keys and groups by the stable ids in the shell's key catalog /// (TerminalKeyCatalog) rather than storing what a key sends, so a fix to a predefined key's bytes /// reaches people who customised their bar before the fix. An id this build does not know — one written by /// a newer build, or one for a custom key since deleted — is skipped on the way in rather than refused. /// /// /// In , so on this device and in plain text. The arrangement suits one /// screen and one pair of thumbs, which is the same argument the font size makes for not following /// somebody onto a desktop. Custom keys are keystrokes such as :wq, and the customise screen says /// outright that this file is not a place for a password. /// /// /// Null lists mean "as shipped" rather than "empty". An empty is a choice somebody made, /// and has to survive a launch as one. /// /// /// The keys on the bar above the software keyboard, in order. /// The order of the groups on the quick-access keyboard's KEYS tab. /// Groups turned off on the KEYS tab. /// Keys somebody added for themselves. /// The quick-access keyboard's tab last used, which it reopens to. /// Whether a wide screen shows the quick-access keyboard beside the terminal. /// Whether long-press-and-drag on the terminal moves the cursor. public sealed record TerminalKeyboardSettings( string[]? Bar = null, string[]? GroupOrder = null, string[]? HiddenGroups = null, CustomTerminalKey[]? CustomKeys = null, string? QuickAccessTab = null, bool SidePanelOpen = true, bool CursorGestures = true); /// A key somebody added: what it says on it, and what it types. /// Stable, so the bar can refer to it. Always starts custom:. /// What the key shows. /// /// What it sends, in the notation the customise screen accepts — \e, \r, ^C and so on — /// rather than as bytes, so the file stays readable and the parser stays the one place escapes are decided. /// public sealed record CustomTerminalKey(string Id, string Label, string Sequence);