Compare commits

..

No commits in common. "14ef8e80519987962008b2da0c95907993d03865" and "93c029960666de2d1784f351ac37e5a74cf82e2e" have entirely different histories.

3 changed files with 18 additions and 12 deletions

View File

@ -76,8 +76,8 @@ function fzf_key_bindings
set -l line 0 set -l line 0
for i in (builtin history -z --reverse | string split0) for i in (builtin history -z --reverse | string split0)
set line (math $line + 1) set line (math $line + 1)
string escape -n -- $line\t(string replace -a -- \n \n\t $i | string collect) string escape -n -- $line\t$i
end | string join0 | string unescape -n | eval (__fzfcmd) --tac --read0 --print0 -q '(commandline)' | string replace -r '^\d*\t' '' | read -lz result end | string join0 | string replace -a '\n' '\n\t' | string unescape -n | eval (__fzfcmd) --tac --read0 --print0 -q '(commandline)' | string replace -r '^\d*\t' '' | read -lz result
and commandline -- $result and commandline -- $result
end end
else else

View File

@ -310,15 +310,20 @@ func extractColor(str string, state *ansiState, proc func(string, *ansiState) bo
return trimmed, nil, state return trimmed, nil, state
} }
func parseAnsiCode(s string) (int, string) { func parseAnsiCode(s string, delimiter byte) (int, byte, string) {
var remaining string var remaining string
var i int var i int
// Faster than strings.IndexAny(";:") if delimiter == 0 {
i = strings.IndexByte(s, ';') // Faster than strings.IndexAny(";:")
if i < 0 { i = strings.IndexByte(s, ';')
i = strings.IndexByte(s, ':') if i < 0 {
i = strings.IndexByte(s, ':')
}
} else {
i = strings.IndexByte(s, delimiter)
} }
if i >= 0 { if i >= 0 {
delimiter = s[i]
remaining = s[i+1:] remaining = s[i+1:]
s = s[:i] s = s[:i]
} }
@ -330,14 +335,14 @@ func parseAnsiCode(s string) (int, string) {
for _, ch := range stringBytes(s) { for _, ch := range stringBytes(s) {
ch -= '0' ch -= '0'
if ch > 9 { if ch > 9 {
return -1, remaining return -1, delimiter, remaining
} }
code = code*10 + int(ch) code = code*10 + int(ch)
} }
return code, remaining return code, delimiter, remaining
} }
return -1, remaining return -1, delimiter, remaining
} }
func interpretCode(ansiCode string, prevState *ansiState) ansiState { func interpretCode(ansiCode string, prevState *ansiState) ansiState {
@ -373,10 +378,11 @@ func interpretCode(ansiCode string, prevState *ansiState) ansiState {
state256 := 0 state256 := 0
ptr := &state.fg ptr := &state.fg
var delimiter byte
count := 0 count := 0
for len(ansiCode) != 0 { for len(ansiCode) != 0 {
var num int var num int
if num, ansiCode = parseAnsiCode(ansiCode); num != -1 { if num, delimiter, ansiCode = parseAnsiCode(ansiCode, delimiter); num != -1 {
count++ count++
switch state256 { switch state256 {
case 0: case 0:

View File

@ -381,7 +381,7 @@ func TestParseAnsiCode(t *testing.T) {
{"-2", "", -1}, {"-2", "", -1},
} }
for _, x := range tests { for _, x := range tests {
n, s := parseAnsiCode(x.In) n, _, s := parseAnsiCode(x.In, 0)
if n != x.N || s != x.Exp { if n != x.N || s != x.Exp {
t.Fatalf("%q: got: (%d %q) want: (%d %q)", x.In, n, s, x.N, x.Exp) t.Fatalf("%q: got: (%d %q) want: (%d %q)", x.In, n, s, x.N, x.Exp)
} }