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);