Skip to content

Commit ebbfbbb

Browse files
committed
fix: diff width after exiting search mode
1 parent f9d90a3 commit ebbfbbb

File tree

2 files changed

+108
-110
lines changed

2 files changed

+108
-110
lines changed

diffviewer.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/charmbracelet/lipgloss"
1414
)
1515

16-
const dirrHeaderHeight = 3
16+
const dirHeaderHeight = 3
1717

1818
type diffModel struct {
1919
vp viewport.Model
@@ -54,7 +54,7 @@ func (m diffModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
5454
m.width = msg.Width
5555
m.height = msg.Height
5656
m.vp.Width = m.width
57-
m.vp.Height = m.height - dirrHeaderHeight
57+
m.vp.Height = m.height - dirHeaderHeight
5858
cmds = append(cmds, diff(m.file, m.width))
5959
}
6060

@@ -96,7 +96,7 @@ func (m diffModel) headerView() string {
9696
return base.
9797
Width(m.width).
9898
PaddingLeft(1).
99-
Height(dirrHeaderHeight - 1).
99+
Height(dirHeaderHeight - 1).
100100
BorderStyle(lipgloss.NormalBorder()).
101101
BorderBottom(true).
102102
BorderForeground(lipgloss.Color("8")).

main.go

Lines changed: 105 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -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

233220
func (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

272263
type 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

Comments
 (0)