172 lines
5.3 KiB
Diff
172 lines
5.3 KiB
Diff
diff --git a/internal/backend/backend.go b/internal/backend/backend.go
|
|
index 661861a..c6e3efc 100644
|
|
--- a/internal/backend/backend.go
|
|
+++ b/internal/backend/backend.go
|
|
@@ -132,9 +132,10 @@ func (b Backend) DownloadItem(feedName string, index int) tea.Cmd {
|
|
|
|
// Close closes the backend and saves its components.
|
|
func (b Backend) Close() error {
|
|
- if err := b.Rss.Save(); err != nil {
|
|
- return fmt.Errorf("backend.Close: %w", err)
|
|
- }
|
|
+ // Can't do in nix
|
|
+ // if err := b.Rss.Save(); err != nil {
|
|
+ // return fmt.Errorf("backend.Close: %w", err)
|
|
+ // }
|
|
|
|
if err := b.Cache.Save(); err != nil {
|
|
return fmt.Errorf("backend.Close: %w", err)
|
|
diff --git a/internal/ui/browser/browser.go b/internal/ui/browser/browser.go
|
|
index 437e6e7..d2682b6 100644
|
|
--- a/internal/ui/browser/browser.go
|
|
+++ b/internal/ui/browser/browser.go
|
|
@@ -33,20 +33,20 @@ type Keymap struct {
|
|
// DefaultKeymap contains the default key bindings for the browser
|
|
var DefaultKeymap = Keymap{
|
|
CloseTab: key.NewBinding(
|
|
- key.WithKeys("c", "ctrl+w"),
|
|
- key.WithHelp("c", "Close tab"),
|
|
+ key.WithKeys("x", "ctrl+w", "q"),
|
|
+ key.WithHelp("x", "Close tab"),
|
|
),
|
|
NextTab: key.NewBinding(
|
|
key.WithKeys("tab"),
|
|
key.WithHelp("Tab", "Next tab"),
|
|
),
|
|
PrevTab: key.NewBinding(
|
|
- key.WithKeys("shift+tab"),
|
|
+ key.WithKeys("shift+tab", "h"),
|
|
key.WithHelp("Shift+Tab", "Previous tab"),
|
|
),
|
|
ShowHelp: key.NewBinding(
|
|
- key.WithKeys("h", "ctrl+h"),
|
|
- key.WithHelp("h", "Help"),
|
|
+ key.WithKeys("?", "ctrl+h"),
|
|
+ key.WithHelp("?", "Help"),
|
|
),
|
|
ToggleOfflineMode: key.NewBinding(
|
|
key.WithKeys("o", "ctrl+o"),
|
|
diff --git a/internal/ui/simplelist/list.go b/internal/ui/simplelist/list.go
|
|
index 476ad90..9ddb272 100644
|
|
--- a/internal/ui/simplelist/list.go
|
|
+++ b/internal/ui/simplelist/list.go
|
|
@@ -135,11 +135,11 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
|
m.page++
|
|
}
|
|
|
|
- case "shift+up", "K":
|
|
+ case "shift+up", "gg":
|
|
m.selected = 0
|
|
m.page = 0
|
|
|
|
- case "shift+down", "J":
|
|
+ case "shift+down", "shift+g":
|
|
m.selected = len(m.items) - 1
|
|
m.page = len(m.items) / m.itemsPerPage
|
|
}
|
|
diff --git a/internal/ui/tab/feed/feed.go b/internal/ui/tab/feed/feed.go
|
|
index ad2b95f..1e918bb 100644
|
|
--- a/internal/ui/tab/feed/feed.go
|
|
+++ b/internal/ui/tab/feed/feed.go
|
|
@@ -210,6 +210,12 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
|
|
m.viewport.SetContent(m.selector.cycle())
|
|
return m, nil
|
|
+ case key.Matches(msg, m.keymap.CycleSelectionBack):
|
|
+ if !m.viewportFocused {
|
|
+ return m, nil
|
|
+ }
|
|
+
|
|
+ m.viewport.SetContent(m.selector.cycle_back())
|
|
}
|
|
|
|
default:
|
|
diff --git a/internal/ui/tab/feed/keymap.go b/internal/ui/tab/feed/keymap.go
|
|
index 6f4dd7f..cd5170e 100644
|
|
--- a/internal/ui/tab/feed/keymap.go
|
|
+++ b/internal/ui/tab/feed/keymap.go
|
|
@@ -4,13 +4,14 @@ import "github.com/charmbracelet/bubbles/key"
|
|
|
|
// Keymap contains the key bindings for this tab
|
|
type Keymap struct {
|
|
- Open key.Binding
|
|
- ToggleFocus key.Binding
|
|
- RefreshArticles key.Binding
|
|
- SaveArticle key.Binding
|
|
- DeleteFromSaved key.Binding
|
|
- CycleSelection key.Binding
|
|
- MarkAsUnread key.Binding
|
|
+ Open key.Binding
|
|
+ ToggleFocus key.Binding
|
|
+ RefreshArticles key.Binding
|
|
+ SaveArticle key.Binding
|
|
+ DeleteFromSaved key.Binding
|
|
+ CycleSelection key.Binding
|
|
+ CycleSelectionBack key.Binding
|
|
+ MarkAsUnread key.Binding
|
|
}
|
|
|
|
// DefaultKeymap contains the default key bindings for this tab
|
|
@@ -36,8 +37,12 @@ var DefaultKeymap = Keymap{
|
|
key.WithHelp("d/ctrl+d", "Delete from saved"),
|
|
),
|
|
CycleSelection: key.NewBinding(
|
|
- key.WithKeys("g"),
|
|
- key.WithHelp("g", "Cycle selection"),
|
|
+ key.WithKeys("n"),
|
|
+ key.WithHelp("n", "Cycle selection"),
|
|
+ ),
|
|
+ CycleSelectionBack: key.NewBinding(
|
|
+ key.WithKeys("shift+n"),
|
|
+ key.WithHelp("shift+n", "Cycle selection"),
|
|
),
|
|
MarkAsUnread: key.NewBinding(
|
|
key.WithKeys("u"),
|
|
@@ -53,5 +58,6 @@ func (m *Keymap) SetEnabled(enabled bool) {
|
|
m.SaveArticle.SetEnabled(enabled)
|
|
m.DeleteFromSaved.SetEnabled(enabled)
|
|
m.CycleSelection.SetEnabled(enabled)
|
|
+ m.CycleSelectionBack.SetEnabled(enabled)
|
|
m.MarkAsUnread.SetEnabled(enabled)
|
|
}
|
|
diff --git a/internal/ui/tab/feed/selector.go b/internal/ui/tab/feed/selector.go
|
|
index fb2ef72..a0b138a 100644
|
|
--- a/internal/ui/tab/feed/selector.go
|
|
+++ b/internal/ui/tab/feed/selector.go
|
|
@@ -120,6 +120,35 @@ func (s *selector) cycle() string {
|
|
return b.String()
|
|
}
|
|
|
|
+func (s *selector) cycle_back() string {
|
|
+ var b strings.Builder
|
|
+
|
|
+ s.selection--
|
|
+ if !s.active || s.selection < 0 {
|
|
+ s.selection = len(s.urls) - 1
|
|
+ s.active = true
|
|
+ }
|
|
+
|
|
+ start, end := s.indices[s.selection][0], s.indices[s.selection][1]
|
|
+ b.WriteString((*s.article)[:start])
|
|
+ linkText := (*s.article)[start:end]
|
|
+
|
|
+ // This is tricky
|
|
+ if strings.ContainsRune(linkText, '\n') {
|
|
+ newLine := strings.IndexRune(linkText, '\n')
|
|
+ lastSpace := strings.LastIndex(linkText, " ")
|
|
+
|
|
+ b.WriteString(s.linkStyle.Render(strings.TrimSpace(linkText[:lastSpace])))
|
|
+ b.WriteString(linkText[newLine:lastSpace])
|
|
+ b.WriteString(s.linkStyle.Render(linkText[lastSpace:]))
|
|
+ } else {
|
|
+ b.WriteString(s.linkStyle.Render(linkText))
|
|
+ }
|
|
+
|
|
+ b.WriteString((*s.article)[end:])
|
|
+ return b.String()
|
|
+}
|
|
+
|
|
// open opens the URL in the browser
|
|
func (s *selector) open() error {
|
|
switch runtime.GOOS {
|