1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-27 16:51:15 +02:00

Merge pull request #11966 from NixOS/mergify/bp/2.25-maintenance/pr-11876

Filter OSC 8 correctly (backport #11876)
This commit is contained in:
Eelco Dolstra 2024-11-26 14:10:16 +01:00 committed by GitHub
commit 9f9b2ed48c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 0 deletions

View file

@ -57,4 +57,9 @@ TEST(filterANSIEscapes, utf8)
ASSERT_EQ(filterANSIEscapes("f𐍈𐍈bär", true, 4), "f𐍈𐍈b"); ASSERT_EQ(filterANSIEscapes("f𐍈𐍈bär", true, 4), "f𐍈𐍈b");
} }
TEST(filterANSIEscapes, osc8)
{
ASSERT_EQ(filterANSIEscapes("\e]8;;http://example.com\e\\This is a link\e]8;;\e\\"), "This is a link");
}
} // namespace nix } // namespace nix

View file

@ -45,6 +45,13 @@ std::string filterANSIEscapes(std::string_view s, bool filterAll, unsigned int w
while (i != s.end() && *i >= 0x20 && *i <= 0x2f) e += *i++; while (i != s.end() && *i >= 0x20 && *i <= 0x2f) e += *i++;
// eat final byte // eat final byte
if (i != s.end() && *i >= 0x40 && *i <= 0x7e) e += last = *i++; if (i != s.end() && *i >= 0x40 && *i <= 0x7e) e += last = *i++;
} else if (i != s.end() && *i == ']') {
// OSC
e += *i++;
// eat ESC
while (i != s.end() && *i != '\e') e += *i++;
// eat backslash
if (i != s.end() && *i == '\\') e += last = *i++;
} else { } else {
if (i != s.end() && *i >= 0x40 && *i <= 0x5f) e += *i++; if (i != s.end() && *i >= 0x40 && *i <= 0x5f) e += *i++;
} }