[v2] 在第一次刷新之前,tea.Printf/Println 会发出一个全屏高度的 Cursor-down (滚动整个屏幕)
作者: hlubek创建于 2026年7月23日更新于 2026年7月23日
** 受影响的版本:**Charm.land/bubletea/v2'v2.0.7(登陆发动机GitHub.com/Charmbracelet/紫外线')
□ 总结
一个"tea". (原始内容存档于2017-09-26). Printf"/"tea. Println 命令在渲染器第一次冲出** 之前运行,发出一个Cursor-下行的完全终端高度而不是页脚框高度,将整个屏幕向上滚动. 程序启动和第一次冲出之间的窗口很小(~一个框架在配置的FPS),但真实:启动信息通过go p.Send ' 发送,在第一次冲出前没有发生任何意外,因此,任何在Init ' 上打印的或针对WindowSizeMsg ' 的Cmd',或从立即开始伐木的goroutine上打印的“Cmd”都可以在其中着陆。
□ 根因 (源级)
`插入Above ' 计算与细胞起伏高度相去甚远的Cursor,但 以完整的终端大小创建单元格buf,并且只调整到当前大小 视图中“ flush() ” 的高度, 可能还没有运行。
tea.Printf'/Println'返回印刷线 ' (reser.go:59-92'), 作为“p.resander. 插入Above(ms.messageBody)”同步处理 (`tea.go:861-862').插入Above'(cursed resters.go:707-763'): 开始 w, h::= s. cellbuf. (中文(简体) ). Width (), s. cellbuf. (中文(简体) ). 高度( ) 下 := h - y - 1 /. 发出ansi. CursorDown( 下) QQ ESC [ B (行~716-723)
这假定 " h " 是页框高。
- 但是,细胞起子是按**完全终端大小** 创建的:`新CursedRender'-
`uv.NewScreen Buffer(w,h)' (`cursed render.go:46'),加上`w,h'来自
`term.GetSize' in`Run' (`tea.go:1045-1066')。
- 电池的尺寸调整到视图高度** 只在“flush() ” 内:
`框架H8:=内容。 高度( ); s. cellbuf. resize(...)'
(`cursed render.go:276,295-306'). " 交出() " 只隐藏视图
(`:579-584');`改变()'(开口在`:619')**不**触动电池起子。
- Flushes在 " 1s/fps " (~16.6ms,60fps)开始使用滴答机。
`起步器'(`tea.go:1393-1422',冲出:1417-1418')。 第一个
`Printf'可穿行`Init'- handleCommands'-发送-事件记录-插入Above'
在窗户里 在第一个边缘之间没有发生** 之前**
和“WindowSizeMsg”并不意味着冲水。
后果:在第一次冲出前,`h'是整个终点站,所以
" 下 " = " h -- -- -- 1 " 滚动全屏幕。
# 最小重写草图
开始
主软件包
导入( E)
"fmt" (英语).
茶 “Charm.land/bulbtea/v2”
(中文(简体) ).
类型 :
func (m 型号) Init () 茶. 缩写{
// 启动时的打印计划 - 比赛第一个冲出 。
茶归来. Println ("本行滚动整个屏幕")
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (m 型号) 更新 (msg tea.Msg) (tea.Model, tea.Cmd) {
如果 , OK: = msg. (tea. KeyPressMsg); OK {
回来,喝茶。 退出
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
返回 m, 无
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (m 型号) View () 茶. 查看 {还茶. NewView ("脚行")}
func 主 () {
如果 , 错误 : = 取出茶来。 New Program( 型号 ) 。 运行 (); 错误 != 0 {
fmt. (英语). 打印( err)
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
在终端中运行, 已有多个回滚内容屏幕 可见: 首发“ Println” 发射前 . . . . . . .
内容来源: charmbracelet/bubbletea