diff --git a/cursed_renderer.go b/cursed_renderer.go index f22d94a351..8eaafb23d4 100644 --- a/cursed_renderer.go +++ b/cursed_renderer.go @@ -61,7 +61,11 @@ func (s *cursedRenderer) setOptimizations(hardTabs, backspace, mapnl bool) { s.hardTabs = hardTabs s.backspace = backspace s.mapnl = mapnl - s.scr.SetTabStops(s.width) + if s.hardTabs { + s.scr.SetTabStops(s.width) + } else { + s.scr.SetTabStops(-1) + } s.scr.SetBackspace(s.backspace) s.scr.SetMapNewline(s.mapnl) s.mu.Unlock() @@ -275,6 +279,11 @@ func (s *cursedRenderer) flush(closing bool) error { } } + // Restore tab stops if we have tab optimizations enabled. + if s.starting && s.hardTabs { + _, _ = s.scr.WriteString(ansi.SetTabEvery8Columns) + } + if !s.starting && !closing && s.lastView != nil && viewEquals(s.lastView, &view) && frameArea == s.cellbuf.Bounds() { // No changes, nothing to do. return nil @@ -587,7 +596,11 @@ func reset(s *cursedRenderer) { scr.SetColorProfile(s.profile) scr.SetRelativeCursor(true) // Always start in inline mode scr.SetFullscreen(false) // Always start in inline mode - scr.SetTabStops(s.width) + if s.hardTabs { + scr.SetTabStops(s.width) + } else { + scr.SetTabStops(-1) + } scr.SetBackspace(s.backspace) scr.SetMapNewline(s.mapnl) scr.SetScrollOptim(runtime.GOOS != "windows") // disable scroll optimization on Windows due to bugs in some terminals diff --git a/testdata/TestViewModel/altscreen_autoexit.golden b/testdata/TestViewModel/altscreen_autoexit.golden index 61da636d1f..810564717e 100644 --- a/testdata/TestViewModel/altscreen_autoexit.golden +++ b/testdata/TestViewModel/altscreen_autoexit.golden @@ -1 +1 @@ -[>4m[=0;1u[?1049h[?25l[?2004h[>4;2m[=1;1usuccess[>4m[=0;1u [?1049l[?25h[?2004l[?2026$p[?2027$p \ No newline at end of file +[>4m[=0;1u[?1049h[?25l[?2004h[>4;2m[=1;1usuccess[>4m[=0;1u[?1049l[?25h[?2004l[?2026$p[?2027$p \ No newline at end of file