Skip to content

Commit

Permalink
fix(terminal): prepare for OSC 8, #87
Browse files Browse the repository at this point in the history
  • Loading branch information
ericwq committed Jul 29, 2024
1 parent 82be21c commit e5dd8a5
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions terminal/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4933,22 +4933,29 @@ func TestNvimClean(t *testing.T) {
tc := []struct {
label string
seq string
resp string
hdIDs []int
}{
{
"first", "\x1b[?1049h\x1b[22;0;0t\x1b[?1h\x1b=\x1b[H\x1b[2J\x1b[?2004h\x1b[?2026$p\x1b[0m\x1b[4:3m\x1bP$qm\x1b\\\x1b[?u\x1b[c\x1b[?25h",

"\x1b[?2026;0$y\x1bP0$rm\x1b\\\x1b[?64;1;9;15;21;22c",
[]int{
CSI_privSM, CSI_XTWINOPS, CSI_privSM, ESC_DECKPAM, CSI_CUP, CSI_ED, CSI_privSM,
CSI_DECRQM, CSI_SGR, CSI_SGR, DCS_DECRQSS, CSI_U, CSI_priDA, CSI_privSM,
},
},
{
"second", "\x1b]11;?\a\x1bP+q5463;524742;73657472676266;73657472676262\x1b\\\x1b[0m\x1b[48;2;1;2;3m\x1bP$qm\x1b\\",
"\x1b]11;rgb:0000/0000/0000\x1b\\\x1bP0$rm\x1b\\",
[]int{OSC_10_11_12_17_19, DCS_XTGETTCAP, CSI_SGR, CSI_SGR, DCS_DECRQSS},
},
{
"osc 8",
"\x1b[?2026h\x1b(B\x1b[m\x1b[38;2;186;187;241m 1 \x1b(B\x1b[m\x1b[38;2;153;209;219m\x1b[48;2;59;63;82m<\x1b(B\x1b[m\x1b[38;2;202;158;230m\x1b[48;2;59;63;82mimg\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[48;2;59;63;82m \x1b(B\x1b[m\x1b[3m\x1b[38;2;129;200;190m\x1b[48;2;59;63;82msrc\x1b(B\x1b[m\x1b[38;2;153;209;219m\x1b[48;2;59;63;82m=\x1b(B\x1b[m\x1b[38;2;166;209;137m\x1b[48;2;59;63;82m\"\x1b(B\x1b[0;4m\x1b[3m\x1b[38;2;242;213;207m\x1b[48;2;59;63;82m\x1b]8;;img/aprilsh-avatar.png\x1b\\img/aprilsh-avatar.png\x1b(B\x1b[m\x1b[38;2;166;209;137m\x1b[48;2;59;63;82m\x1b]8;;\x1b\\\"\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[48;2;59;63;82m \x1b(B\x1b[m\x1b[3m\x1b[38;2;129;200;190m\x1b[48;2;59;63;82malt\x1b(B\x1b[m\x1b[38;2;153;209;219m\x1b[48;2;59;63;82m=\x1b(B\x1b[m\x1b[38;2;166;209;137m\x1b[48;2;59;63;82m\"image\"\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[48;2;59;63;82m \x1b(B\x1b[m\x1b[3m\x1b[38;2;129;200;190m\x1b[48;2;59;63;82mwidth\x1b(B\x1b[m\x1b[38;2;153;209;219m\x1b[48;2;59;63;82m=\x1b(B\x1b[m\x1b[38;2;166;209;137m\x1b[48;2;59;63;82m\"150\"\x1b(B\x1b[m\x1b[38;2;153;209;219m\x1b[48;2;59;63;82m/>\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[48;2;59;63;82m \r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 1 \x1b(B\x1b[m\x1b[38;2;198;208;245mAprilsh: remote shell support intermittent or mobile network. Inspired by [mosh](https://mosh.org/) and [zutty](https://github.com/tomscii/zutty). ap\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 2 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 3 \x1b(B\x1b[m\x1b[38;2;239;159;118m## Installation\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 4 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 5 \x1b(B\x1b[m\x1b[38;2;166;209;137m#### Requirement\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 6 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 7 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://www.openssh.com/\x1b\\open-ssh\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is a must requirement, sshd is required to perform user authentication.\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 8 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://git.adelielinux.org/adelie/musl-locales/-/wikis/home\x1b\\locale support\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is a must requirement.\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 9 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://invisible-island.net/ncurses/\x1b\\ncurses and terminfo\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is a must requirement.\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 10 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://systemd.io/\x1b\\systmd\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is required by redhat linux family (fedora, centos, redhat).\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 11 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://github.com/OpenRC/openrc\x1b\\openrc\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is required by alpine.\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 12 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://skarnet.org/software/utmps/\x1b\\utmps\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is required by alpine\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 13 \x1b(B\x1b[m\x1b[38;2;244;184;228m- \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;https://github.com/logrotate/logrotate\x1b\\logrotate\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ is required by alpine.\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 14 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 15 \x1b(B\x1b[m\x1b[38;2;198;208;245mIf you prefer to build aprilsh manually, please refer to \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;doc/install-alpine.md\x1b\\this document\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 16 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 17 \x1b(B\x1b[m\x1b[38;2;153;209;219m<\x1b(B\x1b[m\x1b[38;2;202;158;230mdetails\x1b(B\x1b[m\x1b[38;2;153;209;219m>\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 18 \x1b(B\x1b[m\x1b[38;2;153;209;219m<\x1b(B\x1b[m\x1b[38;2;202;158;230msummary\x1b(B\x1b[m\x1b[38;2;153;209;219m>\x1b(B\x1b[m\x1b[38;2;198;208;245mAlpine linux\x1b(B\x1b[m\x1b[38;2;153;209;219m</\x1b(B\x1b[m\x1b[38;2;202;158;230msummary\x1b(B\x1b[m\x1b[38;2;153;209;219m>\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 19 \x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b[K\r\n\x1b(B\x1b[m\x1b[38;2;81;87;109m 20 \x1b(B\x1b[m\x1b[38;2;198;208;245mBefore start apshd, you need to make sure you can ssh login to the target server, please refer to \x1b(B\x1b[m\x1b[38;2;133;193;220m\x1b]8;;doc/ssh-openrc.md\x1b\\this doc\x1b(B\x1b[m\x1b[38;2;198;208;245m\x1b]8;;\x1b\\ to setup a ss",
"",
[]int{},
},
}

p := NewParser()
emu := NewEmulator3(8, 4, 0)
for _, v := range tc {
Expand Down Expand Up @@ -4978,6 +4985,11 @@ func TestNvimClean(t *testing.T) {
v.label, v.seq, j, strHandlerID[v.hdIDs[j]], strHandlerID[hd.id])
}
}

gotResp := emu.ReadOctetsToHost()
if gotResp != v.resp {
t.Errorf("%s expect response %q, got %q\n", v.label, v.resp, gotResp)
}
})
}
}

0 comments on commit e5dd8a5

Please sign in to comment.