Provide an option to reverse items only (#1267)

This commit is contained in:
Akinori MUSHA
2018-06-10 01:41:50 +09:00
committed by Junegunn Choi
parent 2c26f02f5c
commit daa1958f86
5 changed files with 136 additions and 30 deletions

View File

@@ -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