diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2025-01-22 19:16:08 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2025-01-22 19:16:08 +0900 |
| commit | 578108280e081c9996eb7df578aac4e1dd1a6f94 (patch) | |
| tree | 4cfb7a7664e635e7eee2995935d7a26fe7a8f261 /src/ansi.go | |
| parent | 65db7352b72845b306e6bc1388a4ad02d0f57a70 (diff) | |
| download | fzf-578108280e081c9996eb7df578aac4e1dd1a6f94.tar.gz | |
Support OSC 8 sequence with BEL characters
Fix #4193
Diffstat (limited to 'src/ansi.go')
| -rw-r--r-- | src/ansi.go | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/ansi.go b/src/ansi.go index 687b9524..90f2415b 100644 --- a/src/ansi.go +++ b/src/ansi.go @@ -358,12 +358,17 @@ func interpretCode(ansiCode string, prevState *ansiState) ansiState { if ansiCode[0] != '\x1b' || ansiCode[1] != '[' || ansiCode[len(ansiCode)-1] != 'm' { if prevState != nil && strings.HasSuffix(ansiCode, "0K") { state.lbg = prevState.bg - } else if ansiCode == "\x1b]8;;\x1b\\" { // End of a hyperlink - state.url = nil - } else if strings.HasPrefix(ansiCode, "\x1b]8;") && strings.HasSuffix(ansiCode, "\x1b\\") { - if paramsEnd := strings.IndexRune(ansiCode[4:], ';'); paramsEnd >= 0 { + } else if strings.HasPrefix(ansiCode, "\x1b]8;") && (strings.HasSuffix(ansiCode, "\x1b\\") || strings.HasSuffix(ansiCode, "\a")) { + stLen := 2 + if strings.HasSuffix(ansiCode, "\a") { + stLen = 1 + } + // "\x1b]8;;\x1b\\" or "\x1b]8;;\a" + if len(ansiCode) == 5+stLen && ansiCode[4] == ';' { + state.url = nil + } else if paramsEnd := strings.IndexRune(ansiCode[4:], ';'); paramsEnd >= 0 { params := ansiCode[4 : 4+paramsEnd] - uri := ansiCode[5+paramsEnd : len(ansiCode)-2] + uri := ansiCode[5+paramsEnd : len(ansiCode)-stLen] state.url = &url{uri: uri, params: params} } } |
