diff --git a/src/core.go b/src/core.go index d639769d..404af12a 100644 --- a/src/core.go +++ b/src/core.go @@ -476,8 +476,17 @@ func Run(opts *Options) (int, error) { if len(opts.Expect) > 0 { opts.Printer("") } + transformer := func(item *Item) string { + return item.AsString(opts.Ansi) + } + if opts.AcceptNth != nil { + fn := opts.AcceptNth(opts.Delimiter) + transformer = func(item *Item) string { + return item.acceptNth(opts.Ansi, opts.Delimiter, fn) + } + } for i := 0; i < count; i++ { - opts.Printer(val.Get(i).item.AsString(opts.Ansi)) + opts.Printer(transformer(val.Get(i).item)) } if count == 0 { exitCode = ExitNoMatch diff --git a/src/item.go b/src/item.go index ca32f1bd..19f0498e 100644 --- a/src/item.go +++ b/src/item.go @@ -51,3 +51,9 @@ func (item *Item) AsString(stripAnsi bool) string { } return item.text.ToString() } + +func (item *Item) acceptNth(stripAnsi bool, delimiter Delimiter, transformer func([]Token, int32) string) string { + tokens := Tokenize(item.AsString(stripAnsi), delimiter) + transformed := transformer(tokens, item.Index()) + return StripLastDelimiter(transformed, delimiter) +} diff --git a/src/terminal.go b/src/terminal.go index a762853e..2f00a398 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -1575,9 +1575,7 @@ func (t *Terminal) output() bool { } if t.acceptNth != nil { transform = func(item *Item) string { - tokens := Tokenize(item.AsString(t.ansi), t.delimiter) - transformed := t.acceptNth(tokens, item.Index()) - return StripLastDelimiter(transformed, t.delimiter) + return item.acceptNth(t.ansi, t.delimiter, t.acceptNth) } } found := len(t.selected) > 0 diff --git a/test/test_core.rb b/test/test_core.rb index a68a8e95..59cdfac4 100644 --- a/test/test_core.rb +++ b/test/test_core.rb @@ -238,6 +238,11 @@ class TestCore < TestInteractive assert_equal %w[5555 55], fzf_output_lines end + def test_select_1_accept_nth + tmux.send_keys "seq 1 100 | #{fzf(:with_nth, '..,..', :print_query, :q, 5555, :'1', :accept_nth, '"{1} // {1}"')}", :Enter + assert_equal ['5555', '55 // 55'], fzf_output_lines + end + def test_exit_0 tmux.send_keys "seq 1 100 | #{fzf(:with_nth, '..,..', :print_query, :q, 555_555, :'0')}", :Enter assert_equal %w[555555], fzf_output_lines