Fix preview window size calculation

This commit is contained in:
Junegunn Choi 2020-10-06 19:37:33 +09:00
parent bafb99d520
commit 1d8bd11b67
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
3 changed files with 20 additions and 23 deletions

View File

@ -1030,14 +1030,6 @@ func parsePreviewWindow(opts *previewOpts, input string) {
} }
} }
} }
if !opts.size.percent && opts.size.size > 0 {
// Adjust size for border
opts.size.size += 2
// And padding
if opts.position == posLeft || opts.position == posRight {
opts.size.size += 2
}
}
} }
func parseMargin(margin string) [4]sizeSpec { func parseMargin(margin string) [4]sizeSpec {

View File

@ -393,17 +393,18 @@ func TestPreviewOpts(t *testing.T) {
opts.Preview.wrap == true && opts.Preview.wrap == true &&
opts.Preview.position == posLeft && opts.Preview.position == posLeft &&
opts.Preview.size.percent == false && opts.Preview.size.percent == false &&
opts.Preview.size.size == 15+2+2) { opts.Preview.size.size == 15) {
t.Error(opts.Preview) t.Error(opts.Preview)
} }
opts = optsFor("--preview-window=up:15:wrap:hidden", "--preview-window=down") opts = optsFor("--preview-window=up:15:wrap:hidden", "--preview-window=down", "--preview-window=cycle")
if !(opts.Preview.command == "" && if !(opts.Preview.command == "" &&
opts.Preview.hidden == false && opts.Preview.hidden == true &&
opts.Preview.wrap == false && opts.Preview.wrap == true &&
opts.Preview.cycle == true &&
opts.Preview.position == posDown && opts.Preview.position == posDown &&
opts.Preview.size.percent == true && opts.Preview.size.percent == false &&
opts.Preview.size.size == 50) { opts.Preview.size.size == 15) {
t.Error(opts.Preview) t.Error(opts.Preview.size.size)
} }
opts = optsFor("--preview-window=up:15:wrap:hidden") opts = optsFor("--preview-window=up:15:wrap:hidden")
if !(opts.Preview.command == "" && if !(opts.Preview.command == "" &&
@ -411,7 +412,7 @@ func TestPreviewOpts(t *testing.T) {
opts.Preview.wrap == true && opts.Preview.wrap == true &&
opts.Preview.position == posUp && opts.Preview.position == posUp &&
opts.Preview.size.percent == false && opts.Preview.size.percent == false &&
opts.Preview.size.size == 15+2) { opts.Preview.size.size == 15) {
t.Error(opts.Preview) t.Error(opts.Preview)
} }
} }

View File

@ -614,12 +614,12 @@ const (
maxDisplayWidthCalc = 1024 maxDisplayWidthCalc = 1024
) )
func calculateSize(base int, size sizeSpec, margin int, minSize int) int { func calculateSize(base int, size sizeSpec, occupied int, minSize int, pad int) int {
max := base - margin max := base - occupied
if size.percent { if size.percent {
return util.Constrain(int(float64(base)*0.01*size.size), minSize, max) return util.Constrain(int(float64(base)*0.01*size.size), minSize, max)
} }
return util.Constrain(int(size.size), minSize, max) return util.Constrain(int(size.size)+pad, minSize, max)
} }
func (t *Terminal) resizeWindows() { func (t *Terminal) resizeWindows() {
@ -727,24 +727,28 @@ func (t *Terminal) resizeWindows() {
} }
t.pwindow = t.tui.NewWindow(y, x, pwidth, pheight, true, noBorder) t.pwindow = t.tui.NewWindow(y, x, pwidth, pheight, true, noBorder)
} }
verticalPad := 2
if t.preview.border == tui.BorderNone {
verticalPad = 0
}
switch t.preview.position { switch t.preview.position {
case posUp: case posUp:
pheight := calculateSize(height, t.preview.size, minHeight, 3) pheight := calculateSize(height, t.preview.size, minHeight, 3, verticalPad)
t.window = t.tui.NewWindow( t.window = t.tui.NewWindow(
marginInt[0]+pheight, marginInt[3], width, height-pheight, false, noBorder) marginInt[0]+pheight, marginInt[3], width, height-pheight, false, noBorder)
createPreviewWindow(marginInt[0], marginInt[3], width, pheight) createPreviewWindow(marginInt[0], marginInt[3], width, pheight)
case posDown: case posDown:
pheight := calculateSize(height, t.preview.size, minHeight, 3) pheight := calculateSize(height, t.preview.size, minHeight, 3, verticalPad)
t.window = t.tui.NewWindow( t.window = t.tui.NewWindow(
marginInt[0], marginInt[3], width, height-pheight, false, noBorder) marginInt[0], marginInt[3], width, height-pheight, false, noBorder)
createPreviewWindow(marginInt[0]+height-pheight, marginInt[3], width, pheight) createPreviewWindow(marginInt[0]+height-pheight, marginInt[3], width, pheight)
case posLeft: case posLeft:
pwidth := calculateSize(width, t.preview.size, minWidth, 5) pwidth := calculateSize(width, t.preview.size, minWidth, 5, 4)
t.window = t.tui.NewWindow( t.window = t.tui.NewWindow(
marginInt[0], marginInt[3]+pwidth, width-pwidth, height, false, noBorder) marginInt[0], marginInt[3]+pwidth, width-pwidth, height, false, noBorder)
createPreviewWindow(marginInt[0], marginInt[3], pwidth, height) createPreviewWindow(marginInt[0], marginInt[3], pwidth, height)
case posRight: case posRight:
pwidth := calculateSize(width, t.preview.size, minWidth, 5) pwidth := calculateSize(width, t.preview.size, minWidth, 5, 4)
t.window = t.tui.NewWindow( t.window = t.tui.NewWindow(
marginInt[0], marginInt[3], width-pwidth, height, false, noBorder) marginInt[0], marginInt[3], width-pwidth, height, false, noBorder)
createPreviewWindow(marginInt[0], marginInt[3]+width-pwidth, pwidth, height) createPreviewWindow(marginInt[0], marginInt[3]+width-pwidth, pwidth, height)