diff --git a/ui/keymap/keymap.go b/ui/keymap/keymap.go index fddfb11ca02ba92dd84e5286d88974ac236a098a..cf2cc2f74c166b0c628360b379c845613f79d3e9 100644 --- a/ui/keymap/keymap.go +++ b/ui/keymap/keymap.go @@ -183,6 +183,7 @@ func DefaultKeyMap() *KeyMap { key.WithKeys( "h", "left", + "backspace", ), key.WithHelp( "←", diff --git a/ui/pages/repo/files.go b/ui/pages/repo/files.go index 065c491f76d3d036e050eb182230b933efb0b2d5..745016102a4c169f60381927f28f036b59167041 100644 --- a/ui/pages/repo/files.go +++ b/ui/pages/repo/files.go @@ -227,20 +227,21 @@ func (f *Files) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmds = append(cmds, f.selectFileCmd) } } + case BackMsg: + cmds = append(cmds, f.deselectItemCmd) case tea.KeyMsg: switch f.activeView { case filesViewFiles: - switch msg.String() { - case "l", "right": + switch { + case key.Matches(msg, f.common.KeyMap.SelectItem): cmds = append(cmds, f.selector.SelectItem) - case "h", "left": - cmds = append(cmds, f.deselectItemCmd) + case key.Matches(msg, f.common.KeyMap.BackItem): + cmds = append(cmds, backCmd) } case filesViewContent: - keyStr := msg.String() switch { - case keyStr == "h", keyStr == "left": - cmds = append(cmds, f.deselectItemCmd) + case key.Matches(msg, f.common.KeyMap.BackItem): + cmds = append(cmds, backCmd) case key.Matches(msg, f.common.KeyMap.Copy): f.common.Copy.Copy(f.currentContent.content) case key.Matches(msg, lineNo): diff --git a/ui/pages/repo/log.go b/ui/pages/repo/log.go index cd624e4402b76ee5e66837485c6b3d65a4eec295..a1511a5ff37db765010d83757d5ac92808d4c164 100644 --- a/ui/pages/repo/log.go +++ b/ui/pages/repo/log.go @@ -211,10 +211,10 @@ func (l *Log) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case tea.KeyMsg, tea.MouseMsg: switch l.activeView { case logViewCommits: - switch key := msg.(type) { + switch kmsg := msg.(type) { case tea.KeyMsg: - switch key.String() { - case "l", "right": + switch { + case key.Matches(kmsg, l.common.KeyMap.SelectItem): cmds = append(cmds, l.selector.SelectItem) } } @@ -233,15 +233,19 @@ func (l *Log) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } cmds = append(cmds, cmd) case logViewDiff: - switch key := msg.(type) { + switch kmsg := msg.(type) { case tea.KeyMsg: - switch key.String() { - case "h", "left": - l.activeView = logViewCommits - l.selectedCommit = nil + switch { + case key.Matches(kmsg, l.common.KeyMap.BackItem): + cmds = append(cmds, backCmd) } } } + case BackMsg: + if l.activeView == logViewDiff { + l.activeView = logViewCommits + l.selectedCommit = nil + } case selector.ActiveMsg: switch sel := msg.IdentifiableItem.(type) { case LogItem: diff --git a/ui/pages/repo/refs.go b/ui/pages/repo/refs.go index b5b6c7fedf72af1251ad84c30bc0676bc98d85ae..308a26288372c3ecbcaa4b9b985e51075fb4136f 100644 --- a/ui/pages/repo/refs.go +++ b/ui/pages/repo/refs.go @@ -132,8 +132,8 @@ func (r *Refs) Update(msg tea.Msg) (tea.Model, tea.Cmd) { ) } case tea.KeyMsg: - switch msg.String() { - case "l", "right": + switch { + case key.Matches(msg, r.common.KeyMap.SelectItem): cmds = append(cmds, r.selector.SelectItem) } } diff --git a/ui/pages/repo/repo.go b/ui/pages/repo/repo.go index 808ae9286cc35b71d96771a1074f32455d3e8ee3..5d0d4a58bed8b35b4a6c5b2f47aeb898fabfbd86 100644 --- a/ui/pages/repo/repo.go +++ b/ui/pages/repo/repo.go @@ -45,11 +45,11 @@ func (t tab) String() string { }[t] } -// CopyUrlMsg is a message to copy the URL of the current repository. -type CopyUrlMsg struct{} +// CopyURLMsg is a message to copy the URL of the current repository. +type CopyURLMsg struct{} -// ResetUrlMsg is a message to reset the URL string. -type ResetUrlMsg struct{} +// ResetURLMsg is a message to reset the URL string. +type ResetURLMsg struct{} // UpdateStatusBarMsg updates the status bar. type UpdateStatusBarMsg struct{} @@ -60,6 +60,9 @@ type RepoMsg git.GitRepo // RefMsg is a message that contains a git.Reference. type RefMsg *ggit.Reference +// BackMsg is a message to go back to the previous view. +type BackMsg struct{} + // Repo is a view for a git repository. type Repo struct { common common.Common @@ -70,7 +73,7 @@ type Repo struct { statusbar *statusbar.StatusBar panes []common.Component ref *ggit.Reference - copyUrl time.Time + copyURL time.Time } // New returns a new Repo. @@ -198,20 +201,25 @@ func (r *Repo) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmds = append(cmds, r.updateStatusBarCmd) switch msg := msg.(type) { case tea.MouseMsg: - if msg.Type == tea.MouseLeft { + switch msg.Type { + case tea.MouseLeft: id := fmt.Sprintf("%s-url", r.selectedRepo.Repo()) if r.common.Zone.Get(id).InBounds(msg) { cmds = append(cmds, r.copyUrlCmd()) } + case tea.MouseRight: + if r.common.Zone.Get("repo-main").InBounds(msg) { + cmds = append(cmds, backCmd) + } } } } - case CopyUrlMsg: + case CopyURLMsg: r.common.Copy.Copy( git.RepoURL(r.cfg.Host, r.cfg.Port, r.selectedRepo.Repo()), ) - case ResetUrlMsg: - r.copyUrl = time.Time{} + case ResetURLMsg: + r.copyURL = time.Time{} case ReadmeMsg: case FileItemsMsg: f, cmd := r.panes[filesTab].Update(msg) @@ -275,7 +283,10 @@ func (r *Repo) View() string { r.common.Styles.Tabs.GetVerticalFrameSize() mainStyle := repoBodyStyle. Height(r.common.Height - hm) - main := r.panes[r.activeTab].View() + main := r.common.Zone.Mark( + "repo-main", + r.panes[r.activeTab].View(), + ) view := lipgloss.JoinVertical(lipgloss.Top, r.headerView(), r.tabs.View(), @@ -306,7 +317,7 @@ func (r *Repo) headerView() string { Width(r.common.Width - lipgloss.Width(desc) - 1). Align(lipgloss.Right) url := git.RepoURL(cfg.Host, cfg.Port, r.selectedRepo.Repo()) - if !r.copyUrl.IsZero() && r.copyUrl.Add(time.Second).After(time.Now()) { + if !r.copyURL.IsZero() && r.copyURL.Add(time.Second).After(time.Now()) { url = "copied!" } url = common.TruncateString(url, r.common.Width-lipgloss.Width(desc)-1) @@ -368,13 +379,13 @@ func (r *Repo) updateModels(msg tea.Msg) tea.Cmd { } func (r *Repo) copyUrlCmd() tea.Cmd { - r.copyUrl = time.Now() + r.copyURL = time.Now() return tea.Batch( func() tea.Msg { - return CopyUrlMsg{} + return CopyURLMsg{} }, tea.Tick(time.Second, func(time.Time) tea.Msg { - return ResetUrlMsg{} + return ResetURLMsg{} }), ) } @@ -382,3 +393,7 @@ func (r *Repo) copyUrlCmd() tea.Cmd { func updateStatusBarCmd() tea.Msg { return UpdateStatusBarMsg{} } + +func backCmd() tea.Msg { + return BackMsg{} +}