@@ -63,7 +63,7 @@ func newModel(input string) mainModel {
6363 m .search .KeyMap .AcceptSuggestion = key .NewBinding (key .WithKeys ("tab" ))
6464 m .search .Prompt = " "
6565 m .search .PromptStyle = lipgloss .NewStyle ().Foreground (lipgloss .Color ("8" ))
66- m .search .Placeholder = "Filter files 🅃 "
66+ m .search .Placeholder = "Filter files "
6767 m .search .PlaceholderStyle = lipgloss .NewStyle ().MaxWidth (lipgloss .Width (m .search .Placeholder )).Foreground (lipgloss .Color ("8" ))
6868 m .search .Width = constants .OpenFileTreeWidth - 5
6969
@@ -80,28 +80,108 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
8080 var cmd tea.Cmd
8181 var cmds []tea.Cmd
8282
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
83167 if m .search .Focused () {
84168 switch msg := msg .(type ) {
85169 case tea.KeyMsg :
86170 switch msg .String () {
87171 case "esc" :
172+ m .stopSearch ()
88173 df , dfCmd := m .setDiffViewerDimensions ()
89- cmds = append (cmds , dfCmd )
90174 m .diffViewer = df
91- m .search .SetValue ("" )
92- m .search .Blur ()
93- m .searching = false
94- break
175+ cmds = append (cmds , dfCmd )
95176 case "ctrl+c" :
96- return m , tea .Quit
177+ return m , [] tea.Cmd { tea . Quit }
97178 case "enter" :
98- m .searching = false
99- m .search .SetValue ("" )
100- m .search .Blur ()
101- selected := m .filtered [m .resultsCursor ]
179+ m .stopSearch ()
102180 df , dfCmd := m .setDiffViewerDimensions ()
103181 cmds = append (cmds , dfCmd )
104182 m .diffViewer = df
183+
184+ selected := m .filtered [m .resultsCursor ]
105185 for i , f := range m .files {
106186 if filetree .GetFileName (f ) == selected {
107187 m .cursor = i
@@ -111,7 +191,6 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
111191 }
112192 }
113193
114- return m , tea .Batch (cmds ... )
115194 case "ctrl+n" , "down" :
116195 m .resultsCursor = min (len (m .files )- 1 , m .resultsCursor + 1 )
117196 m .resultsVp .LineDown (1 )
@@ -133,101 +212,9 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
133212 }
134213 m .filtered = filtered
135214 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 )
215215 }
216216
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
231218}
232219
233220func (m mainModel ) View () string {
@@ -261,12 +248,16 @@ func (m mainModel) View() string {
261248 Height (m .height - footerHeight - headerHeight ).Render (lipgloss .JoinVertical (lipgloss .Left , search , content ))
262249
263250 sidebar = lipgloss .NewStyle ().
251+ Width (width ).
264252 Border (lipgloss .NormalBorder (), false , true , false , false ).
265253 BorderForeground (lipgloss .Color ("8" )).Render (content )
266254 }
267255 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+ )
270261}
271262
272263type dimensionsMsg struct {
@@ -418,3 +409,10 @@ func (m mainModel) setDiffViewerDimensions() (tea.Model, tea.Cmd) {
418409 df , dfCmd := m .diffViewer .(diffModel ).Update (dimensionsMsg {Width : m .width - m .sidebarWidth (), Height : m .height - footerHeight - headerHeight })
419410 return df , dfCmd
420411}
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