MCPcopy
hub / github.com/mathaou/termdbms / HandleFormatMovement

Function HandleFormatMovement

viewer/mode.go:118–218  ·  view source on GitHub ↗
(m *TuiModel, str string)

Source from the content-addressed store, hash-verified

116}
117
118func HandleFormatMovement(m *TuiModel, str string) (ret bool) {
119 lines := 0
120 for _, v := range m.Format.EditSlices {
121 if *v != "" {
122 lines++
123 }
124 }
125 switch str {
126 case "pgdown":
127 l := len(m.Format.Text) - 1
128 for i := 0; i < m.Viewport.Height && m.Viewport.YOffset < l; i++ {
129 ScrollDown(m)
130 }
131 ret = true
132 break
133 case "pgup":
134 for i := 0; i <
135 m.Viewport.Height && m.Viewport.YOffset > 0; i++ {
136 ScrollUp(m)
137 }
138 ret = true
139 break
140 case "home":
141 m.Viewport.YOffset = 0
142 m.Format.CursorX = 0
143 m.Format.CursorY = 0
144 ret = true
145 break
146 case "end":
147 m.Viewport.YOffset = len(m.Format.Text) - m.Viewport.Height
148 m.Format.CursorY = Min(m.Viewport.Height-FooterHeight, strings.Count(m.Data().EditTextBuffer, "\n"))
149 m.Format.CursorX = m.Format.RunningOffsets[len(m.Format.RunningOffsets)-1]
150 ret = true
151 break
152 case "right":
153 ret = true
154 m.Format.CursorX++
155
156 offset := GetOffsetForLineNumber(m.Format.CursorY)
157 x := m.Format.CursorX + offset + 1 // for the space at the end
158 l := len(*m.Format.EditSlices[m.Format.CursorY])
159 maxY := lines - 1
160 if l < x && m.Format.CursorY < maxY {
161 m.Format.CursorX = 0
162 m.Format.CursorY++
163 } else if l < x && m.Format.CursorY < len(m.Format.Text)-1 {
164 go Program.Send(
165 tea.KeyMsg{
166 Type: tea.KeyDown,
167 Alt: false,
168 },
169 )
170 } else if m.Format.CursorY > maxY {
171 m.Format.CursorX = maxY
172 }
173
174 break
175 case "left":

Callers 1

HandleFormatModeFunction · 0.85

Calls 5

ScrollDownFunction · 0.85
ScrollUpFunction · 0.85
MinFunction · 0.85
GetOffsetForLineNumberFunction · 0.85
DataMethod · 0.80

Tested by

no test coverage detected