mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-10 17:51:58 -07:00
Provide an option to reverse items only (#1267)
This commit is contained in:
committed by
Junegunn Choi
parent
2c26f02f5c
commit
daa1958f86
@@ -59,7 +59,7 @@ type Terminal struct {
|
||||
inlineInfo bool
|
||||
prompt string
|
||||
promptLen int
|
||||
reverse bool
|
||||
layout layoutType
|
||||
fullscreen bool
|
||||
hscroll bool
|
||||
hscrollOff int
|
||||
@@ -302,10 +302,11 @@ func trimQuery(query string) []rune {
|
||||
func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
|
||||
input := trimQuery(opts.Query)
|
||||
var header []string
|
||||
if opts.Reverse {
|
||||
header = opts.Header
|
||||
} else {
|
||||
switch opts.Layout {
|
||||
case layoutDefault, layoutReverseList:
|
||||
header = reverseStringArray(opts.Header)
|
||||
default:
|
||||
header = opts.Header
|
||||
}
|
||||
var delay time.Duration
|
||||
if opts.Tac {
|
||||
@@ -363,7 +364,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
|
||||
t := Terminal{
|
||||
initDelay: delay,
|
||||
inlineInfo: opts.InlineInfo,
|
||||
reverse: opts.Reverse,
|
||||
layout: opts.Layout,
|
||||
fullscreen: fullscreen,
|
||||
hscroll: opts.Hscroll,
|
||||
hscrollOff: opts.HscrollOff,
|
||||
@@ -643,8 +644,21 @@ func (t *Terminal) resizeWindows() {
|
||||
}
|
||||
|
||||
func (t *Terminal) move(y int, x int, clear bool) {
|
||||
if !t.reverse {
|
||||
y = t.window.Height() - y - 1
|
||||
h := t.window.Height()
|
||||
|
||||
switch t.layout {
|
||||
case layoutDefault:
|
||||
y = h - y - 1
|
||||
case layoutReverseList:
|
||||
n := 2 + len(t.header)
|
||||
if t.inlineInfo {
|
||||
n--
|
||||
}
|
||||
if y < n {
|
||||
y = h - y - 1
|
||||
} else {
|
||||
y -= n
|
||||
}
|
||||
}
|
||||
|
||||
if clear {
|
||||
@@ -748,7 +762,7 @@ func (t *Terminal) printList() {
|
||||
count := t.merger.Length() - t.offset
|
||||
for j := 0; j < maxy; j++ {
|
||||
i := j
|
||||
if !t.reverse {
|
||||
if t.layout == layoutDefault {
|
||||
i = maxy - 1 - j
|
||||
}
|
||||
line := i + 2 + len(t.header)
|
||||
@@ -1680,12 +1694,12 @@ func (t *Terminal) Loop() {
|
||||
req(reqList, reqInfo)
|
||||
}
|
||||
case actToggleIn:
|
||||
if t.reverse {
|
||||
if t.layout != layoutDefault {
|
||||
return doAction(action{t: actToggleUp}, mapkey)
|
||||
}
|
||||
return doAction(action{t: actToggleDown}, mapkey)
|
||||
case actToggleOut:
|
||||
if t.reverse {
|
||||
if t.layout != layoutDefault {
|
||||
return doAction(action{t: actToggleDown}, mapkey)
|
||||
}
|
||||
return doAction(action{t: actToggleUp}, mapkey)
|
||||
@@ -1813,13 +1827,21 @@ func (t *Terminal) Loop() {
|
||||
mx -= t.window.Left()
|
||||
my -= t.window.Top()
|
||||
mx = util.Constrain(mx-t.promptLen, 0, len(t.input))
|
||||
if !t.reverse {
|
||||
my = t.window.Height() - my - 1
|
||||
}
|
||||
min := 2 + len(t.header)
|
||||
if t.inlineInfo {
|
||||
min--
|
||||
}
|
||||
h := t.window.Height()
|
||||
switch t.layout {
|
||||
case layoutDefault:
|
||||
my = h - my - 1
|
||||
case layoutReverseList:
|
||||
if my < h-min {
|
||||
my += min
|
||||
} else {
|
||||
my = h - my - 1
|
||||
}
|
||||
}
|
||||
if me.Double {
|
||||
// Double-click
|
||||
if my >= min {
|
||||
@@ -1912,7 +1934,7 @@ func (t *Terminal) constrain() {
|
||||
}
|
||||
|
||||
func (t *Terminal) vmove(o int, allowCycle bool) {
|
||||
if t.reverse {
|
||||
if t.layout != layoutDefault {
|
||||
o *= -1
|
||||
}
|
||||
dest := t.cy + o
|
||||
|
Reference in New Issue
Block a user