summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2025-01-22 19:16:08 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-01-22 19:16:08 +0900
commit578108280e081c9996eb7df578aac4e1dd1a6f94 (patch)
tree4cfb7a7664e635e7eee2995935d7a26fe7a8f261 /src
parent65db7352b72845b306e6bc1388a4ad02d0f57a70 (diff)
downloadfzf-578108280e081c9996eb7df578aac4e1dd1a6f94.tar.gz
Support OSC 8 sequence with BEL characters
Fix #4193
Diffstat (limited to 'src')
-rw-r--r--src/ansi.go15
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}
}
}