@@ -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