version 1.25, 2022/06/30 09:55:53 |
version 1.26, 2022/08/15 08:41:13 |
|
|
|
|
/* A named terminal feature. */ |
/* A named terminal feature. */ |
struct tty_feature { |
struct tty_feature { |
const char *name; |
const char *name; |
const char **capabilities; |
const char *const *capabilities; |
int flags; |
int flags; |
}; |
}; |
|
|
/* Terminal has xterm(1) title setting. */ |
/* Terminal has xterm(1) title setting. */ |
static const char *tty_feature_title_capabilities[] = { |
static const char *const tty_feature_title_capabilities[] = { |
"tsl=\\E]0;", /* should be using TS really */ |
"tsl=\\E]0;", /* should be using TS really */ |
"fsl=\\a", |
"fsl=\\a", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal has OSC 7 working directory. */ |
/* Terminal has OSC 7 working directory. */ |
static const char *tty_feature_osc7_capabilities[] = { |
static const char *const tty_feature_osc7_capabilities[] = { |
"Swd=\\E]7;", |
"Swd=\\E]7;", |
"fsl=\\a", |
"fsl=\\a", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal has mouse support. */ |
/* Terminal has mouse support. */ |
static const char *tty_feature_mouse_capabilities[] = { |
static const char *const tty_feature_mouse_capabilities[] = { |
"kmous=\\E[M", |
"kmous=\\E[M", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Terminal can set the clipboard with OSC 52. */ |
/* Terminal can set the clipboard with OSC 52. */ |
static const char *tty_feature_clipboard_capabilities[] = { |
static const char *const tty_feature_clipboard_capabilities[] = { |
"Ms=\\E]52;%p1%s;%p2%s\\a", |
"Ms=\\E]52;%p1%s;%p2%s\\a", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Terminal supports OSC 8 hyperlinks. */ |
/* Terminal supports OSC 8 hyperlinks. */ |
static const char *tty_feature_hyperlinks_capabilities[] = { |
static const char *const tty_feature_hyperlinks_capabilities[] = { |
"*:Hls=\\E]8;%?%p1%l%tid=%p1%s%;;%p2%s\\E\\\\", |
"*:Hls=\\E]8;%?%p1%l%tid=%p1%s%;;%p2%s\\E\\\\", |
NULL |
NULL |
}; |
}; |
|
|
* terminals with RGB have versions that do not allow setting colours from the |
* terminals with RGB have versions that do not allow setting colours from the |
* 256 palette. |
* 256 palette. |
*/ |
*/ |
static const char *tty_feature_rgb_capabilities[] = { |
static const char *const tty_feature_rgb_capabilities[] = { |
"AX", |
"AX", |
"setrgbf=\\E[38;2;%p1%d;%p2%d;%p3%dm", |
"setrgbf=\\E[38;2;%p1%d;%p2%d;%p3%dm", |
"setrgbb=\\E[48;2;%p1%d;%p2%d;%p3%dm", |
"setrgbb=\\E[48;2;%p1%d;%p2%d;%p3%dm", |
|
|
}; |
}; |
|
|
/* Terminal supports 256 colours. */ |
/* Terminal supports 256 colours. */ |
static const char *tty_feature_256_capabilities[] = { |
static const char *const tty_feature_256_capabilities[] = { |
"AX", |
"AX", |
"setab=\\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", |
"setab=\\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", |
"setaf=\\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", |
"setaf=\\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", |
|
|
}; |
}; |
|
|
/* Terminal supports overline. */ |
/* Terminal supports overline. */ |
static const char *tty_feature_overline_capabilities[] = { |
static const char *const tty_feature_overline_capabilities[] = { |
"Smol=\\E[53m", |
"Smol=\\E[53m", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Terminal supports underscore styles. */ |
/* Terminal supports underscore styles. */ |
static const char *tty_feature_usstyle_capabilities[] = { |
static const char *const tty_feature_usstyle_capabilities[] = { |
"Smulx=\\E[4::%p1%dm", |
"Smulx=\\E[4::%p1%dm", |
"Setulc=\\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m", |
"Setulc=\\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m", |
"ol=\\E[59m", |
"ol=\\E[59m", |
|
|
}; |
}; |
|
|
/* Terminal supports bracketed paste. */ |
/* Terminal supports bracketed paste. */ |
static const char *tty_feature_bpaste_capabilities[] = { |
static const char *const tty_feature_bpaste_capabilities[] = { |
"Enbp=\\E[?2004h", |
"Enbp=\\E[?2004h", |
"Dsbp=\\E[?2004l", |
"Dsbp=\\E[?2004l", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal supports focus reporting. */ |
/* Terminal supports focus reporting. */ |
static const char *tty_feature_focus_capabilities[] = { |
static const char *const tty_feature_focus_capabilities[] = { |
"Enfcs=\\E[?1004h", |
"Enfcs=\\E[?1004h", |
"Dsfcs=\\E[?1004l", |
"Dsfcs=\\E[?1004l", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal supports cursor styles. */ |
/* Terminal supports cursor styles. */ |
static const char *tty_feature_cstyle_capabilities[] = { |
static const char *const tty_feature_cstyle_capabilities[] = { |
"Ss=\\E[%p1%d q", |
"Ss=\\E[%p1%d q", |
"Se=\\E[2 q", |
"Se=\\E[2 q", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal supports cursor colours. */ |
/* Terminal supports cursor colours. */ |
static const char *tty_feature_ccolour_capabilities[] = { |
static const char *const tty_feature_ccolour_capabilities[] = { |
"Cs=\\E]12;%p1%s\\a", |
"Cs=\\E]12;%p1%s\\a", |
"Cr=\\E]112\\a", |
"Cr=\\E]112\\a", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal supports strikethrough. */ |
/* Terminal supports strikethrough. */ |
static const char *tty_feature_strikethrough_capabilities[] = { |
static const char *const tty_feature_strikethrough_capabilities[] = { |
"smxx=\\E[9m", |
"smxx=\\E[9m", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Terminal supports synchronized updates. */ |
/* Terminal supports synchronized updates. */ |
static const char *tty_feature_sync_capabilities[] = { |
static const char *const tty_feature_sync_capabilities[] = { |
"Sync=\\EP=%p1%ds\\E\\\\", |
"Sync=\\EP=%p1%ds\\E\\\\", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Terminal supports extended keys. */ |
/* Terminal supports extended keys. */ |
static const char *tty_feature_extkeys_capabilities[] = { |
static const char *const tty_feature_extkeys_capabilities[] = { |
"Eneks=\\E[>4;1m", |
"Eneks=\\E[>4;1m", |
"Dseks=\\E[>4m", |
"Dseks=\\E[>4m", |
NULL |
NULL |
|
|
}; |
}; |
|
|
/* Terminal supports DECSLRM margins. */ |
/* Terminal supports DECSLRM margins. */ |
static const char *tty_feature_margins_capabilities[] = { |
static const char *const tty_feature_margins_capabilities[] = { |
"Enmg=\\E[?69h", |
"Enmg=\\E[?69h", |
"Dsmg=\\E[?69l", |
"Dsmg=\\E[?69l", |
"Clmg=\\E[s", |
"Clmg=\\E[s", |
|
|
}; |
}; |
|
|
/* Terminal supports DECFRA rectangle fill. */ |
/* Terminal supports DECFRA rectangle fill. */ |
static const char *tty_feature_rectfill_capabilities[] = { |
static const char *const tty_feature_rectfill_capabilities[] = { |
"Rect", |
"Rect", |
NULL |
NULL |
}; |
}; |
|
|
}; |
}; |
|
|
/* Use builtin function keys only. */ |
/* Use builtin function keys only. */ |
static const char *tty_feature_ignorefkeys_capabilities[] = { |
static const char *const tty_feature_ignorefkeys_capabilities[] = { |
"kf0@", |
"kf0@", |
"kf1@", |
"kf1@", |
"kf2@", |
"kf2@", |
|
|
}; |
}; |
|
|
/* Available terminal features. */ |
/* Available terminal features. */ |
static const struct tty_feature *tty_features[] = { |
static const struct tty_feature *const tty_features[] = { |
&tty_feature_256, |
&tty_feature_256, |
&tty_feature_bpaste, |
&tty_feature_bpaste, |
&tty_feature_ccolour, |
&tty_feature_ccolour, |
|
|
int |
int |
tty_apply_features(struct tty_term *term, int feat) |
tty_apply_features(struct tty_term *term, int feat) |
{ |
{ |
const struct tty_feature *tf; |
const struct tty_feature *tf; |
const char **capability; |
const char *const *capability; |
u_int i; |
u_int i; |
|
|
if (feat == 0) |
if (feat == 0) |
return (0); |
return (0); |
|
|
void |
void |
tty_default_features(int *feat, const char *name, u_int version) |
tty_default_features(int *feat, const char *name, u_int version) |
{ |
{ |
static struct { |
static const struct { |
const char *name; |
const char *name; |
u_int version; |
u_int version; |
const char *features; |
const char *features; |