Support cycling the log tail count from the services panel too

The services panel's Logs tab renders the underlying container's logs
through the same code path, so bind 't' there as well and include the
tail value in the services context cache key so the tab re-renders
when the value changes. Also switch the tail-limiting writer to
SetContent so the clear+rewrite is atomic and the view never renders
empty in between.
This commit is contained in:
DevLeonardoK 2026-07-14 21:45:37 -03:00
parent e57958fc3b
commit d5f6eee69f
12 changed files with 24 additions and 3 deletions

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: start
<kbd>a</kbd>: anbinden
<kbd>m</kbd>: zeige Protokolle
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: zeige Neustartoptionen

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: start
<kbd>a</kbd>: attach
<kbd>m</kbd>: view logs
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: view restart options

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: iniciar
<kbd>a</kbd>: attach
<kbd>m</kbd>: ver logs
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: levantar proyecto
<kbd>D</kbd>: dar de baja el proyecto
<kbd>R</kbd>: ver opciones de reinicio

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: démarrer
<kbd>a</kbd>: attacher
<kbd>m</kbd>: voir les enregistrements
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: voir les options de redémarrage

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: start
<kbd>a</kbd>: verbinden
<kbd>m</kbd>: bekijk logs
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: bekijk herstart opties

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: start
<kbd>a</kbd>: przyczep
<kbd>m</kbd>: pokaż logi
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: pokaż opcje restartu

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: iniciar
<kbd>a</kbd>: anexar
<kbd>m</kbd>: ver logs
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: subir projeto
<kbd>D</kbd>: derrubar projeto
<kbd>R</kbd>: ver opções de reinício

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: start
<kbd>a</kbd>: bağlan/iliştir
<kbd>m</kbd>: kayıt defterini görüntüle
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: up project
<kbd>D</kbd>: down project
<kbd>R</kbd>: yeniden başlatma seçeneklerini görüntüle

View file

@ -46,6 +46,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>S</kbd>: 启动项目
<kbd>a</kbd>: attach
<kbd>m</kbd>: 查看日志
<kbd>t</kbd>: cycle how many log lines are shown
<kbd>U</kbd>: 创建并启动容器
<kbd>D</kbd>: 停止并移除容器
<kbd>R</kbd>: 查看重启选项

View file

@ -44,6 +44,10 @@ func (gui *Gui) cycleContainerLogsTail(g *gocui.Gui, v *gocui.View) error {
gui.State.ContainerLogsTail = containerLogsTailPresets[(currentIdx+1)%len(containerLogsTailPresets)]
if v != nil && v.Name() == "services" {
return gui.Panels.Services.HandleSelect()
}
return gui.Panels.Containers.HandleSelect()
}
@ -77,8 +81,9 @@ func (w *tailLimitingWriter) Write(p []byte) (int, error) {
w.lines = w.lines[excess:]
}
w.view.Clear()
fmt.Fprint(w.view, strings.Join(w.lines, "\n")+"\n")
// SetContent clears and rewrites atomically, so the view never renders empty
// in between
w.view.SetContent(strings.Join(w.lines, "\n") + "\n")
return len(p), nil
}

View file

@ -325,6 +325,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleServiceRenderLogsToMain,
Description: gui.Tr.ViewLogs,
},
{
ViewName: "services",
Key: 't',
Modifier: gocui.ModNone,
Handler: gui.cycleContainerLogsTail,
Description: gui.Tr.CycleContainerLogsTail,
},
{
ViewName: "services",
Key: 'U',

View file

@ -53,7 +53,7 @@ func (gui *Gui) getServicesPanel() *panels.SideListPanel[*commands.Service] {
if service.Container == nil {
return "services-" + service.ID
}
return "services-" + service.ID + "-" + service.Container.ID + "-" + service.Container.Container.State
return "services-" + service.ID + "-" + service.Container.ID + "-" + service.Container.Container.State + "-" + gui.State.ContainerLogsTail
},
},
ListPanel: panels.ListPanel[*commands.Service]{