mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-12 08:26:27 +00:00
Add --keep-right option to keep the right end of the line visible
Close #1652
This commit is contained in:
parent
b8fc828955
commit
373c6d8d55
@ -11,6 +11,8 @@ CHANGELOG
|
||||
- Added `--pointer` and `--marker` options
|
||||
- `--height` option is now available on Windows binary (@kelleyma49)
|
||||
- More keys and actions for `--bind`
|
||||
- Added `--keep-right` option that keeps the right end of the line visible
|
||||
when it's too long
|
||||
- Bug fixes and improvements
|
||||
- Vim plugin: Floating windows support
|
||||
- bash: Various improvements in key bindings (CTRL-T, CTRL-R, ALT-C)
|
||||
|
@ -130,6 +130,10 @@ the details.
|
||||
.B "--cycle"
|
||||
Enable cyclic scroll
|
||||
.TP
|
||||
.B "--keep-right"
|
||||
Keep the right end of the line visible when it's too long. Effective only when
|
||||
the query string is empty.
|
||||
.TP
|
||||
.B "--no-hscroll"
|
||||
Disable horizontal scroll
|
||||
.TP
|
||||
|
@ -44,6 +44,7 @@ const usage = `usage: fzf [options]
|
||||
--no-mouse Disable mouse
|
||||
--bind=KEYBINDS Custom key bindings. Refer to the man page.
|
||||
--cycle Enable cyclic scroll
|
||||
--keep-right Keep the right end of the line visible on overflow
|
||||
--no-hscroll Disable horizontal scroll
|
||||
--hscroll-off=COL Number of screen columns to keep to the right of the
|
||||
highlighted substring (default: 10)
|
||||
@ -187,6 +188,7 @@ type Options struct {
|
||||
MinHeight int
|
||||
Layout layoutType
|
||||
Cycle bool
|
||||
KeepRight bool
|
||||
Hscroll bool
|
||||
HscrollOff int
|
||||
FileWord bool
|
||||
@ -242,6 +244,7 @@ func defaultOptions() *Options {
|
||||
MinHeight: 10,
|
||||
Layout: layoutDefault,
|
||||
Cycle: false,
|
||||
KeepRight: false,
|
||||
Hscroll: true,
|
||||
HscrollOff: 10,
|
||||
FileWord: false,
|
||||
@ -1174,6 +1177,10 @@ func parseOptions(opts *Options, allArgs []string) {
|
||||
opts.Cycle = true
|
||||
case "--no-cycle":
|
||||
opts.Cycle = false
|
||||
case "--keep-right":
|
||||
opts.KeepRight = true
|
||||
case "--no-keep-right":
|
||||
opts.KeepRight = false
|
||||
case "--hscroll":
|
||||
opts.Hscroll = true
|
||||
case "--no-hscroll":
|
||||
|
@ -25,6 +25,8 @@ import (
|
||||
var placeholder *regexp.Regexp
|
||||
var activeTempFiles []string
|
||||
|
||||
const ellipsis string = ".."
|
||||
|
||||
func init() {
|
||||
placeholder = regexp.MustCompile(`\\?(?:{[+sf]*[0-9,-.]*}|{q}|{\+?f?nf?})`)
|
||||
activeTempFiles = []string{}
|
||||
@ -73,6 +75,7 @@ type Terminal struct {
|
||||
queryLen [2]int
|
||||
layout layoutType
|
||||
fullscreen bool
|
||||
keepRight bool
|
||||
hscroll bool
|
||||
hscrollOff int
|
||||
wordRubout string
|
||||
@ -397,6 +400,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
|
||||
queryLen: [2]int{0, 0},
|
||||
layout: opts.Layout,
|
||||
fullscreen: fullscreen,
|
||||
keepRight: opts.KeepRight,
|
||||
hscroll: opts.Hscroll,
|
||||
hscrollOff: opts.HscrollOff,
|
||||
wordRubout: wordRubout,
|
||||
@ -1000,14 +1004,17 @@ func (t *Terminal) printHighlighted(result Result, attr tui.Attr, col1 tui.Color
|
||||
displayWidth := t.displayWidthWithLimit(text, 0, maxWidth)
|
||||
if displayWidth > maxWidth {
|
||||
if t.hscroll {
|
||||
if t.keepRight && pos == nil {
|
||||
text, _ = t.trimLeft(text, maxWidth-2)
|
||||
text = append([]rune(ellipsis), text...)
|
||||
} else if !t.overflow(text[:maxe], maxWidth-2) {
|
||||
// Stri..
|
||||
if !t.overflow(text[:maxe], maxWidth-2) {
|
||||
text, _ = t.trimRight(text, maxWidth-2)
|
||||
text = append(text, []rune("..")...)
|
||||
text = append(text, []rune(ellipsis)...)
|
||||
} else {
|
||||
// Stri..
|
||||
if t.overflow(text[maxe:], 2) {
|
||||
text = append(text[:maxe], []rune("..")...)
|
||||
text = append(text[:maxe], []rune(ellipsis)...)
|
||||
}
|
||||
// ..ri..
|
||||
var diff int32
|
||||
@ -1022,11 +1029,11 @@ func (t *Terminal) printHighlighted(result Result, attr tui.Attr, col1 tui.Color
|
||||
offsets[idx].offset[0] = b
|
||||
offsets[idx].offset[1] = util.Max32(b, e)
|
||||
}
|
||||
text = append([]rune(".."), text...)
|
||||
text = append([]rune(ellipsis), text...)
|
||||
}
|
||||
} else {
|
||||
text, _ = t.trimRight(text, maxWidth-2)
|
||||
text = append(text, []rune("..")...)
|
||||
text = append(text, []rune(ellipsis)...)
|
||||
|
||||
for idx, offset := range offsets {
|
||||
offsets[idx].offset[0] = util.Min32(offset.offset[0], int32(maxWidth-2))
|
||||
|
@ -1728,6 +1728,11 @@ class TestGoFZF < TestBase
|
||||
tmux.send_keys :Enter
|
||||
end
|
||||
end
|
||||
|
||||
def test_keep_right
|
||||
tmux.send_keys("seq 10000 | #{FZF} --read0 --keep-right", :Enter)
|
||||
tmux.until { |lines| lines.any_include?('9999 10000') }
|
||||
end
|
||||
end
|
||||
|
||||
module TestShell
|
||||
|
Loading…
Reference in New Issue
Block a user