diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/terminal.go | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/src/terminal.go b/src/terminal.go index 9c627e12..7f688d87 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -450,31 +450,35 @@ func (a byTimeOrder) Less(i, j int) bool { return a[i].at.Before(a[j].at) } +// EventTypes are listed in the order of their priority. const ( - reqPrompt util.EventType = iota + reqResize util.EventType = iota + reqReinit + reqFullRedraw + reqRedraw + + reqJump + reqPrompt reqInfo reqHeader reqFooter reqList - reqJump - reqActivate - reqReinit - reqFullRedraw - reqResize - reqRedraw reqRedrawInputLabel reqRedrawHeaderLabel reqRedrawFooterLabel reqRedrawListLabel reqRedrawBorderLabel reqRedrawPreviewLabel - reqClose - reqPrintQuery + reqPreviewReady reqPreviewEnqueue reqPreviewDisplay reqPreviewRefresh reqPreviewDelayed + + reqActivate + reqClose + reqPrintQuery reqBecome reqQuit reqFatal @@ -1624,14 +1628,12 @@ func (t *Terminal) changeHeader(header string) bool { return needFullRedraw } -func (t *Terminal) changeFooter(footer string) bool { +func (t *Terminal) changeFooter(footer string) { var lines []string if len(footer) > 0 { lines = strings.Split(strings.TrimSuffix(footer, "\n"), "\n") } - needFullRedraw := len(t.footer) != len(lines) t.footer = lines - return needFullRedraw } // UpdateHeader updates the header @@ -2889,6 +2891,13 @@ func (t *Terminal) resizeIfNeeded() bool { return true } + // Check footer window + if len(t.footer) > 0 && (t.footerWindow == nil || t.footerWindow.Height() != len(t.footer)) || + len(t.footer) == 0 && t.footerWindow != nil { + t.printAll() + return true + } + // Check if the header borders are used and header has changed allHeaderLines := t.visibleHeaderLines() primaryHeaderLines := allHeaderLines @@ -5116,6 +5125,8 @@ func (t *Terminal) Loop() error { t.uiMutex.Lock() t.mutex.Lock() info := false + header := false + footer := false for _, key := range keys { req := util.EventType(key) value := (*events)[req] @@ -5153,13 +5164,9 @@ func (t *Terminal) Loop() error { } t.printList() case reqHeader: - if !t.resizeIfNeeded() { - t.printHeader() - } + header = true case reqFooter: - if !t.resizeIfNeeded() { - t.printFooter() - } + footer = true case reqActivate: t.suppress = false if t.hasPreviewer() { @@ -5243,8 +5250,16 @@ func (t *Terminal) Loop() error { return } } - if info && !t.resizeIfNeeded() { - t.printInfo() + if (info || header || footer) && !t.resizeIfNeeded() { + if info { + t.printInfo() + } + if header { + t.printHeader() + } + if footer { + t.printFooter() + } } t.flush() t.mutex.Unlock() @@ -5670,24 +5685,17 @@ func (t *Terminal) Loop() error { t.cx = len(t.input) case actChangeHeader, actTransformHeader, actBgTransformHeader: capture(false, func(header string) { + // When a dedicated header window is not used, we may need to + // update other elements as well. if t.changeHeader(header) { - if t.headerWindow != nil { - // Need to resize header window - req(reqRedraw) - } else { - req(reqHeader, reqList, reqPrompt, reqInfo) - } - } else { - req(reqHeader) + req(reqList, reqPrompt, reqInfo) } + req(reqHeader) }) case actChangeFooter, actTransformFooter, actBgTransformFooter: capture(false, func(footer string) { - if t.changeFooter(footer) { - req(reqRedraw) - } else { - req(reqFooter) - } + t.changeFooter(footer) + req(reqFooter) }) case actChangeHeaderLabel, actTransformHeaderLabel, actBgTransformHeaderLabel: capture(true, func(label string) { |
