diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.go | 8 | ||||
| -rw-r--r-- | src/options.go | 16 | ||||
| -rw-r--r-- | src/terminal.go | 31 | ||||
| -rw-r--r-- | src/tui/tui.go | 9 |
4 files changed, 52 insertions, 12 deletions
diff --git a/src/core.go b/src/core.go index ef470a80..1c009c69 100644 --- a/src/core.go +++ b/src/core.go @@ -237,14 +237,16 @@ func Run(opts *Options, version string, revision string) { go reader.restart(command) } eventBox.Watch(EvtReadNew) + query := []rune{} for { delay := true ticks++ input := func() []rune { - if opts.Phony { - return []rune{} + paused, input := terminal.Input() + if !paused { + query = input } - return []rune(terminal.Input()) + return query } eventBox.Wait(func(events *util.Events) { if _, fin := (*events)[EvtReadFin]; fin { diff --git a/src/options.go b/src/options.go index 691934ed..12c09556 100644 --- a/src/options.go +++ b/src/options.go @@ -33,7 +33,7 @@ const usage = `usage: fzf [options] -d, --delimiter=STR Field delimiter regex (default: AWK-style) +s, --no-sort Do not sort the result --tac Reverse the order of the input - --phony Do not perform search + --disabled Do not perform search --tiebreak=CRI[,..] Comma-separated list of sort criteria to apply when the scores are tied [length|begin|end|index] (default: length) @@ -682,8 +682,10 @@ func parseTheme(defaultTheme *tui.ColorTheme, str string) *tui.ColorTheme { } } switch components[0] { - case "input": + case "query", "input": mergeAttr(&theme.Input) + case "disabled": + mergeAttr(&theme.Disabled) case "fg": mergeAttr(&theme.Fg) case "bg": @@ -875,6 +877,8 @@ func parseKeymap(keymap map[tui.Event][]action, str string) { appendAction(actToggleOut) case "toggle-all": appendAction(actToggleAll) + case "toggle-search": + appendAction(actToggleSearch) case "select-all": appendAction(actSelectAll) case "deselect-all": @@ -923,6 +927,10 @@ func parseKeymap(keymap map[tui.Event][]action, str string) { appendAction(actPreviewHalfPageUp) case "preview-half-page-down": appendAction(actPreviewHalfPageDown) + case "enable-search": + appendAction(actEnableSearch) + case "disable-search": + appendAction(actDisableSearch) default: t := isExecuteAction(specLower) if t == actIgnore { @@ -1199,9 +1207,9 @@ func parseOptions(opts *Options, allArgs []string) { } case "--no-expect": opts.Expect = make(map[tui.Event]string) - case "--no-phony": + case "--enabled", "--no-phony": opts.Phony = false - case "--phony": + case "--disabled", "--phony": opts.Phony = true case "--tiebreak": opts.Criteria = parseTiebreak(nextString(allArgs, &i, "sort criterion required")) diff --git a/src/terminal.go b/src/terminal.go index e630db4e..48011628 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -125,6 +125,7 @@ type Terminal struct { unicode bool borderShape tui.BorderShape cleanExit bool + paused bool border tui.Window window tui.Window pborder tui.Window @@ -233,6 +234,7 @@ const ( actSelectAll actDeselectAll actToggle + actToggleSearch actToggleAll actToggleDown actToggleUp @@ -270,6 +272,8 @@ const ( actFirst actLast actReload + actDisableSearch + actEnableSearch ) type placeholderFlags struct { @@ -488,6 +492,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal { unicode: opts.Unicode, borderShape: opts.BorderShape, cleanExit: opts.ClearOnExit, + paused: opts.Phony, strong: strongAttr, cycle: opts.Cycle, header: header, @@ -563,10 +568,10 @@ func (t *Terminal) noInfoLine() bool { } // Input returns current query string -func (t *Terminal) Input() []rune { +func (t *Terminal) Input() (bool, []rune) { t.mutex.Lock() defer t.mutex.Unlock() - return copySlice(t.input) + return t.paused, copySlice(t.input) } // UpdateCount updates the count information @@ -925,8 +930,12 @@ func (t *Terminal) printPrompt() { t.prompt() before, after := t.updatePromptOffset() - t.window.CPrint(tui.ColInput, string(before)) - t.window.CPrint(tui.ColInput, string(after)) + color := tui.ColInput + if t.paused { + color = tui.ColDisabled + } + t.window.CPrint(color, string(before)) + t.window.CPrint(color, string(after)) } func (t *Terminal) trimMessage(message string, maxWidth int) string { @@ -1880,7 +1889,8 @@ func (t *Terminal) Loop() { version++ // We don't display preview window if no match if items[0] != nil { - command := t.replacePlaceholder(commandTemplate, false, string(t.Input()), items) + _, query := t.Input() + command := t.replacePlaceholder(commandTemplate, false, string(query), items) initialOffset := 0 cmd := util.ExecCommand(command, true) if pwindow != nil { @@ -2465,6 +2475,17 @@ func (t *Terminal) Loop() { t.input = trimQuery(t.history.next()) t.cx = len(t.input) } + case actToggleSearch: + t.paused = !t.paused + changed = !t.paused + req(reqPrompt) + case actEnableSearch: + t.paused = false + changed = true + req(reqPrompt) + case actDisableSearch: + t.paused = true + req(reqPrompt) case actSigStop: p, err := os.FindProcess(os.Getpid()) if err == nil { diff --git a/src/tui/tui.go b/src/tui/tui.go index cc9c7f67..eb09da40 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -250,6 +250,7 @@ func (p ColorPair) MergeNonDefault(other ColorPair) ColorPair { type ColorTheme struct { Colored bool Input ColorAttr + Disabled ColorAttr Fg ColorAttr Bg ColorAttr PreviewFg ColorAttr @@ -421,6 +422,7 @@ var ( ColPrompt ColorPair ColNormal ColorPair ColInput ColorPair + ColDisabled ColorPair ColMatch ColorPair ColCursor ColorPair ColCursorEmpty ColorPair @@ -443,6 +445,7 @@ func EmptyTheme() *ColorTheme { return &ColorTheme{ Colored: true, Input: ColorAttr{colUndefined, AttrUndefined}, + Disabled: ColorAttr{colUndefined, AttrUndefined}, Fg: ColorAttr{colUndefined, AttrUndefined}, Bg: ColorAttr{colUndefined, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, @@ -465,6 +468,7 @@ func NoColorTheme() *ColorTheme { return &ColorTheme{ Colored: false, Input: ColorAttr{colDefault, AttrRegular}, + Disabled: ColorAttr{colDefault, AttrRegular}, Fg: ColorAttr{colDefault, AttrRegular}, Bg: ColorAttr{colDefault, AttrRegular}, PreviewFg: ColorAttr{colDefault, AttrRegular}, @@ -492,6 +496,7 @@ func init() { Default16 = &ColorTheme{ Colored: true, Input: ColorAttr{colDefault, AttrUndefined}, + Disabled: ColorAttr{colUndefined, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, @@ -511,6 +516,7 @@ func init() { Dark256 = &ColorTheme{ Colored: true, Input: ColorAttr{colDefault, AttrUndefined}, + Disabled: ColorAttr{colUndefined, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, @@ -530,6 +536,7 @@ func init() { Light256 = &ColorTheme{ Colored: true, Input: ColorAttr{colDefault, AttrUndefined}, + Disabled: ColorAttr{colUndefined, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, @@ -564,6 +571,7 @@ func initTheme(theme *ColorTheme, baseTheme *ColorTheme, forceBlack bool) { return c } theme.Input = o(baseTheme.Input, theme.Input) + theme.Disabled = o(theme.Input, o(baseTheme.Disabled, theme.Disabled)) theme.Fg = o(baseTheme.Fg, theme.Fg) theme.Bg = o(baseTheme.Bg, theme.Bg) theme.PreviewFg = o(theme.Fg, o(baseTheme.PreviewFg, theme.PreviewFg)) @@ -597,6 +605,7 @@ func initPalette(theme *ColorTheme) { ColPrompt = pair(theme.Prompt, theme.Bg) ColNormal = pair(theme.Fg, theme.Bg) ColInput = pair(theme.Input, theme.Bg) + ColDisabled = pair(theme.Disabled, theme.Bg) ColMatch = pair(theme.Match, theme.Bg) ColCursor = pair(theme.Cursor, theme.Gutter) ColCursorEmpty = pair(blank, theme.Gutter) |
