SyncTERM Font Support Detection

* Attempt to detect SyncTERM font support using DSR/CPR
* If a terminal doesn't support DSR/CPR, assume it doesn't support SyncTERM fonts, either.
* Support is also disabled if term simply doesn't ignore the ESC sequence, either
This commit is contained in:
Bryan Ashby
2022-04-25 21:09:57 -06:00
parent ac010f2ca4
commit 15c3c87500
5 changed files with 164 additions and 143 deletions

View File

@@ -351,23 +351,25 @@ function display(client, art, options, cb) {
});
let initSeq = '';
if(options.font) {
initSeq = ansi.setSyncTermFontWithAlias(options.font);
} else if(options.sauce) {
let fontName = getFontNameFromSAUCE(options.sauce);
if(fontName) {
fontName = ansi.getSyncTERMFontFromAlias(fontName);
}
if (client.term.syncTermFontsEnabled) {
if(options.font) {
initSeq = ansi.setSyncTermFontWithAlias(options.font);
} else if(options.sauce) {
let fontName = getFontNameFromSAUCE(options.sauce);
if(fontName) {
fontName = ansi.getSyncTermFontFromAlias(fontName);
}
//
// Set SyncTERM font if we're switching only. Most terminals
// that support this ESC sequence can only show *one* font
// at a time. This applies to detection only (e.g. SAUCE).
// If explicit, we'll set it no matter what (above)
//
if(fontName && client.term.currentSyncFont != fontName) {
client.term.currentSyncFont = fontName;
initSeq = ansi.setSyncTERMFont(fontName);
//
// Set SyncTERM font if we're switching only. Most terminals
// that support this ESC sequence can only show *one* font
// at a time. This applies to detection only (e.g. SAUCE).
// If explicit, we'll set it no matter what (above)
//
if(fontName && client.term.currentSyncFont != fontName) {
client.term.currentSyncFont = fontName;
initSeq = ansi.setSyncTermFont(fontName);
}
}
}