diff options
Diffstat (limited to 'src/core.go')
-rw-r--r-- | src/core.go | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/core.go b/src/core.go index f6c5a50d..1006109d 100644 --- a/src/core.go +++ b/src/core.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "time" + "unsafe" "github.com/junegunn/fzf/src/util" ) @@ -18,6 +19,10 @@ Matcher -> EvtSearchFin -> Terminal (update list) Matcher -> EvtHeader -> Terminal (update header) */ +func ustring(data []byte) string { + return unsafe.String(unsafe.SliceData(data), len(data)) +} + // Run starts fzf func Run(opts *Options, version string, revision string) { sort := opts.Sort > 0 @@ -45,7 +50,7 @@ func Run(opts *Options, version string, revision string) { if opts.Theme.Colored { ansiProcessor = func(data []byte) (util.Chars, *[]ansiOffset) { prevLineAnsiState = lineAnsiState - trimmed, offsets, newState := extractColor(string(data), lineAnsiState, nil) + trimmed, offsets, newState := extractColor(ustring(data), lineAnsiState, nil) lineAnsiState = newState return util.ToChars([]byte(trimmed)), offsets } @@ -53,7 +58,7 @@ func Run(opts *Options, version string, revision string) { // When color is disabled but ansi option is given, // we simply strip out ANSI codes from the input ansiProcessor = func(data []byte) (util.Chars, *[]ansiOffset) { - trimmed, _, _ := extractColor(string(data), nil, nil) + trimmed, _, _ := extractColor(ustring(data), nil, nil) return util.ToChars([]byte(trimmed)), nil } } @@ -66,7 +71,7 @@ func Run(opts *Options, version string, revision string) { if len(opts.WithNth) == 0 { chunkList = NewChunkList(func(item *Item, data []byte) bool { if len(header) < opts.HeaderLines { - header = append(header, string(data)) + header = append(header, ustring(data)) eventBox.Set(EvtHeader, header) return false } @@ -77,7 +82,7 @@ func Run(opts *Options, version string, revision string) { }) } else { chunkList = NewChunkList(func(item *Item, data []byte) bool { - tokens := Tokenize(string(data), opts.Delimiter) + tokens := Tokenize(ustring(data), opts.Delimiter) if opts.Ansi && opts.Theme.Colored && len(tokens) > 1 { var ansiState *ansiState if prevLineAnsiState != nil { |