export type KeyEncodingResult = {
data: string;
warnings: string[];
};
export function hasCursorModeSensitiveKeys(request: KeyEncodingRequest): boolean { return (
request.keys?.some((raw) => { const token = raw.trim(); if (!token) { returnfalse;
} const parsed = parseModifiers(token); if (hasAnyModifier(parsed.mods)) { returnfalse;
} return normalizeLowercaseStringOrEmpty(parsed.base) in DECCKM_SS3_KEYS;
}) ?? false
);
}
export function encodeKeySequence(
request: KeyEncodingRequest,
cursorKeyMode?: "normal" | "application",
): KeyEncodingResult { const warnings: string[] = [];
let data = "";
if (request.literal) {
data += request.literal;
}
if (request.hex?.length) { for (const raw of request.hex) { constbyte = parseHexByte(raw); if (byte === null) {
warnings.push(`Invalid hex byte: ${raw}`); continue;
}
data += String.fromCharCode(byte);
}
}
if (request.keys?.length) { for (const token of request.keys) {
data += encodeKeyToken(token, warnings, cursorKeyMode);
}
}
return { data, warnings };
}
export function encodePaste(text: string, bracketed = true): string { if (!bracketed) { return text;
} return `${BRACKETED_PASTE_START}${text}${BRACKETED_PASTE_END}`;
}
function applyCharModifiers(char: string, mods: Modifiers): string {
let value = char; if (mods.shift && value.length === 1 && /[a-z]/.test(value)) {
value = value.toUpperCase();
} if (mods.ctrl) { const ctrl = toCtrlChar(value); if (ctrl) {
value = ctrl;
}
} if (mods.alt) {
value = `${ESC}${value}`;
} return value;
}
function xtermModifier(mods: Modifiers): number {
let mod = 1; if (mods.shift) {
mod += 1;
} if (mods.alt) {
mod += 2;
} if (mods.ctrl) {
mod += 4;
} return mod;
}
function applyXtermModifier(sequence: string, modifier: number): string | null { const escPattern = escapeRegExp(ESC); const csiNumber = new RegExp(`^${escPattern}\\[(\\d+)([~A-Z])$`); const csiArrow = new RegExp(`^${escPattern}\\[(A|B|C|D|H|F)$`);
const numberMatch = sequence.match(csiNumber); if (numberMatch) { return `${ESC}[${numberMatch[1]};${modifier}${numberMatch[2]}`;
}
const arrowMatch = sequence.match(csiArrow); if (arrowMatch) { return `${ESC}[1;${modifier}${arrowMatch[1]}`;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.