@@ -63,7 +63,7 @@ func newModel(input string) mainModel {
63
63
m .search .KeyMap .AcceptSuggestion = key .NewBinding (key .WithKeys ("tab" ))
64
64
m .search .Prompt = " "
65
65
m .search .PromptStyle = lipgloss .NewStyle ().Foreground (lipgloss .Color ("8" ))
66
- m .search .Placeholder = "Filter files 🅃 "
66
+ m .search .Placeholder = "Filter files "
67
67
m .search .PlaceholderStyle = lipgloss .NewStyle ().MaxWidth (lipgloss .Width (m .search .Placeholder )).Foreground (lipgloss .Color ("8" ))
68
68
m .search .Width = constants .OpenFileTreeWidth - 5
69
69
@@ -80,28 +80,108 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
80
80
var cmd tea.Cmd
81
81
var cmds []tea.Cmd
82
82
83
+ if ! m .searching {
84
+ switch msg := msg .(type ) {
85
+ case tea.KeyMsg :
86
+ switch msg .String () {
87
+ case "ctrl+c" , "q" :
88
+ return m , tea .Quit
89
+ case "t" :
90
+ m .searching = true
91
+ m .search .Width = m .sidebarWidth () - 5
92
+ m .search .SetValue ("" )
93
+ m .resultsCursor = 0
94
+ m .filtered = make ([]string , 0 )
95
+
96
+ m .resultsVp .Width = constants .SearchingFileTreeWidth
97
+ m .resultsVp .Height = m .height - footerHeight - headerHeight - searchHeight
98
+ m .resultsVp .SetContent (m .resultsView ())
99
+
100
+ df , dfCmd := m .setDiffViewerDimensions ()
101
+ cmds = append (cmds , dfCmd )
102
+ m .diffViewer = df
103
+ cmds = append (cmds , m .search .Focus ())
104
+ case "e" :
105
+ m .isShowingFileTree = ! m .isShowingFileTree
106
+ df , dfCmd := m .setDiffViewerDimensions ()
107
+ cmds = append (cmds , dfCmd )
108
+ m .diffViewer = df
109
+ case "up" , "k" , "ctrl+p" :
110
+ if m .cursor > 0 {
111
+ m .cursor --
112
+ m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [m .cursor ])
113
+ cmds = append (cmds , cmd )
114
+ }
115
+ case "down" , "j" , "ctrl+n" :
116
+ if m .cursor < len (m .files )- 1 {
117
+ m .cursor ++
118
+ m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [m .cursor ])
119
+ cmds = append (cmds , cmd )
120
+ }
121
+ }
122
+
123
+ case tea.WindowSizeMsg :
124
+ m .help .Width = msg .Width
125
+ m .width = msg .Width
126
+ m .height = msg .Height
127
+ df , dfCmd := m .setDiffViewerDimensions ()
128
+ m .diffViewer = df
129
+ cmds = append (cmds , dfCmd )
130
+ ft , ftCmd := m .fileTree .(ftModel ).Update (dimensionsMsg {Width : m .sidebarWidth (), Height : m .height - footerHeight - headerHeight - searchHeight })
131
+ m .fileTree = ft
132
+ cmds = append (cmds , ftCmd )
133
+
134
+ case fileTreeMsg :
135
+ m .files = msg .files
136
+ if len (m .files ) == 0 {
137
+ return m , tea .Quit
138
+ }
139
+ m .fileTree = m .fileTree .(ftModel ).SetFiles (m .files )
140
+ m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [0 ])
141
+ cmds = append (cmds , cmd )
142
+
143
+ case errMsg :
144
+ fmt .Printf ("Error: %v\n " , msg .err )
145
+ log .Fatal (msg .err )
146
+ }
147
+ } else {
148
+ var sCmds []tea.Cmd
149
+ m , sCmds = m .searchUpdate (msg )
150
+ cmds = append (cmds , sCmds ... )
151
+ }
152
+
153
+ m .fileTree = m .fileTree .(ftModel ).SetCursor (m .cursor )
154
+
155
+ m .diffViewer , cmd = m .diffViewer .Update (msg )
156
+ cmds = append (cmds , cmd )
157
+
158
+ m .fileTree , cmd = m .fileTree .Update (msg )
159
+ cmds = append (cmds , cmd )
160
+
161
+ return m , tea .Batch (cmds ... )
162
+ }
163
+
164
+ func (m mainModel ) searchUpdate (msg tea.Msg ) (mainModel , []tea.Cmd ) {
165
+ var cmd tea.Cmd
166
+ var cmds []tea.Cmd
83
167
if m .search .Focused () {
84
168
switch msg := msg .(type ) {
85
169
case tea.KeyMsg :
86
170
switch msg .String () {
87
171
case "esc" :
172
+ m .stopSearch ()
88
173
df , dfCmd := m .setDiffViewerDimensions ()
89
- cmds = append (cmds , dfCmd )
90
174
m .diffViewer = df
91
- m .search .SetValue ("" )
92
- m .search .Blur ()
93
- m .searching = false
94
- break
175
+ cmds = append (cmds , dfCmd )
95
176
case "ctrl+c" :
96
- return m , tea .Quit
177
+ return m , [] tea.Cmd { tea . Quit }
97
178
case "enter" :
98
- m .searching = false
99
- m .search .SetValue ("" )
100
- m .search .Blur ()
101
- selected := m .filtered [m .resultsCursor ]
179
+ m .stopSearch ()
102
180
df , dfCmd := m .setDiffViewerDimensions ()
103
181
cmds = append (cmds , dfCmd )
104
182
m .diffViewer = df
183
+
184
+ selected := m .filtered [m .resultsCursor ]
105
185
for i , f := range m .files {
106
186
if filetree .GetFileName (f ) == selected {
107
187
m .cursor = i
@@ -111,7 +191,6 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
111
191
}
112
192
}
113
193
114
- return m , tea .Batch (cmds ... )
115
194
case "ctrl+n" , "down" :
116
195
m .resultsCursor = min (len (m .files )- 1 , m .resultsCursor + 1 )
117
196
m .resultsVp .LineDown (1 )
@@ -133,101 +212,9 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
133
212
}
134
213
m .filtered = filtered
135
214
m .resultsVp .SetContent (m .resultsView ())
136
-
137
- return m , tea .Batch (cmds ... )
138
- }
139
-
140
- switch msg := msg .(type ) {
141
- case tea.KeyMsg :
142
- if m .searching {
143
- switch msg .String () {
144
- case "ctrl+n" :
145
- if m .searching {
146
- m .resultsCursor = min (len (m .files )- 1 , m .resultsCursor + 1 )
147
- m .resultsVp .LineDown (1 )
148
- }
149
- case "ctrl+p" :
150
- if m .searching {
151
- m .resultsCursor = max (0 , m .resultsCursor - 1 )
152
- m .resultsVp .LineUp (1 )
153
- }
154
- }
155
- }
156
- switch msg .String () {
157
- case "ctrl+c" , "q" :
158
- return m , tea .Quit
159
- case "t" :
160
- m .searching = true
161
- m .search .Width = m .sidebarWidth () - 5
162
- m .search .SetValue ("" )
163
- m .resultsCursor = 0
164
- m .filtered = make ([]string , 0 )
165
- m .resultsVp .SetContent (m .resultsView ())
166
- m .resultsVp .Height = m .height - footerHeight - headerHeight - searchHeight
167
- m .resultsVp .Width = constants .SearchingFileTreeWidth
168
- df , dfCmd := m .setDiffViewerDimensions ()
169
- cmds = append (cmds , dfCmd )
170
- m .diffViewer = df
171
- cmds = append (cmds , m .search .Focus ())
172
- return m , tea .Batch (cmds ... )
173
- case "e" :
174
- m .isShowingFileTree = ! m .isShowingFileTree
175
- df , dfCmd := m .setDiffViewerDimensions ()
176
- m .diffViewer = df
177
- return m , dfCmd
178
- case "up" , "k" , "ctrl+p" :
179
- if m .cursor > 0 {
180
- m .cursor --
181
- m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [m .cursor ])
182
- cmds = append (cmds , cmd )
183
- }
184
- case "down" , "j" , "ctrl+n" :
185
- if m .cursor < len (m .files )- 1 {
186
- m .cursor ++
187
- m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [m .cursor ])
188
- cmds = append (cmds , cmd )
189
- }
190
- }
191
-
192
- case tea.WindowSizeMsg :
193
- m .help .Width = msg .Width
194
- m .width = msg .Width
195
- m .height = msg .Height
196
- df , dfCmd := m .diffViewer .(diffModel ).Update (dimensionsMsg {Width : m .width - m .sidebarWidth (), Height : m .height - footerHeight - headerHeight })
197
- m .diffViewer = df
198
- cmds = append (cmds , dfCmd )
199
- ft , ftCmd := m .fileTree .(ftModel ).Update (dimensionsMsg {Width : m .sidebarWidth (), Height : m .height - footerHeight - headerHeight - searchHeight })
200
- m .fileTree = ft
201
- cmds = append (cmds , ftCmd )
202
-
203
- case fileTreeMsg :
204
- m .files = msg .files
205
- if len (m .files ) == 0 {
206
- return m , tea .Quit
207
- }
208
- m .fileTree = m .fileTree .(ftModel ).SetFiles (m .files )
209
- m .diffViewer , cmd = m .diffViewer .(diffModel ).SetFilePatch (m .files [0 ])
210
- cmds = append (cmds , cmd )
211
-
212
- case errMsg :
213
- fmt .Printf ("Error: %v\n " , msg .err )
214
- log .Fatal (msg .err )
215
215
}
216
216
217
- s , sCmd := m .search .Update (msg )
218
- cmds = append (cmds , sCmd )
219
- m .search = s
220
- m .search .Width = m .sidebarWidth () - 5
221
-
222
- m .fileTree = m .fileTree .(ftModel ).SetCursor (m .cursor )
223
-
224
- m .diffViewer , cmd = m .diffViewer .Update (msg )
225
- cmds = append (cmds , cmd )
226
-
227
- m .fileTree , cmd = m .fileTree .Update (msg )
228
- cmds = append (cmds , cmd )
229
-
230
- return m , tea .Batch (cmds ... )
217
+ return m , cmds
231
218
}
232
219
233
220
func (m mainModel ) View () string {
@@ -261,12 +248,16 @@ func (m mainModel) View() string {
261
248
Height (m .height - footerHeight - headerHeight ).Render (lipgloss .JoinVertical (lipgloss .Left , search , content ))
262
249
263
250
sidebar = lipgloss .NewStyle ().
251
+ Width (width ).
264
252
Border (lipgloss .NormalBorder (), false , true , false , false ).
265
253
BorderForeground (lipgloss .Color ("8" )).Render (content )
266
254
}
267
255
dv := lipgloss .NewStyle ().MaxHeight (m .height - footerHeight - headerHeight ).Width (m .width - m .sidebarWidth ()).Render (m .diffViewer .View ())
268
- content := lipgloss .JoinHorizontal (lipgloss .Top , sidebar , dv )
269
- return lipgloss .JoinVertical (lipgloss .Left , header , content , footer )
256
+ return lipgloss .JoinVertical (lipgloss .Left ,
257
+ header ,
258
+ lipgloss .JoinHorizontal (lipgloss .Top , sidebar , dv ),
259
+ footer ,
260
+ )
270
261
}
271
262
272
263
type dimensionsMsg struct {
@@ -418,3 +409,10 @@ func (m mainModel) setDiffViewerDimensions() (tea.Model, tea.Cmd) {
418
409
df , dfCmd := m .diffViewer .(diffModel ).Update (dimensionsMsg {Width : m .width - m .sidebarWidth (), Height : m .height - footerHeight - headerHeight })
419
410
return df , dfCmd
420
411
}
412
+
413
+ func (m * mainModel ) stopSearch () {
414
+ m .searching = false
415
+ m .search .SetValue ("" )
416
+ m .search .Blur ()
417
+ m .search .Width = m .sidebarWidth () - 5
418
+ }
0 commit comments