From 2f8da4bcb2179d8e949fbd6a964c81994813f3b7 Mon Sep 17 00:00:00 2001 From: Patrick Dewey Date: Wed, 10 Jun 2026 07:14:55 -0400 Subject: [PATCH] add yank to clipboard keybind --- internal/app/app.go | 18 +++++++++++++++++- internal/app/browser.go | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/internal/app/app.go b/internal/app/app.go index 2452919..e62d557 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -88,6 +88,10 @@ type notificationsMsg struct { } type feedMsg struct{ page *semble.Page[semble.Activity] } type openURLMsg struct{ err error } +type yankURLMsg struct { + url string + err error +} type warmCacheMsg struct{ err error } type createdMsg string @@ -178,6 +182,11 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.status = "opening " + selected.url return m, openURL(selected.url) } + case "y": + if selected, ok := m.list.SelectedItem().(item); ok && selected.url != "" { + m.status = "yanking " + selected.url + return m, yankURL(selected.url) + } case "a": switch m.screen { case screenCards: @@ -242,6 +251,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil } return m, nil + case yankURLMsg: + if msg.err != nil { + m.err = msg.err + return m, nil + } + m.status = "yanked " + msg.url + return m, nil case warmCacheMsg: if msg.err != nil { m.err = msg.err @@ -262,7 +278,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m model) View() string { - nav := titleStyle.Render("Semble") + " " + m.tabsView() + "\n" + helpStyle.Render("tab tabs · h/l or ←/→ pages · r refresh · a add · q quit") + nav := titleStyle.Render("Semble") + " " + m.tabsView() + "\n" + helpStyle.Render("tab tabs · h/l or ←/→ pages · enter open · y yank · r refresh · a add · q quit") if m.loading { nav += "\n" + m.spinner.View() + " loading..." } diff --git a/internal/app/browser.go b/internal/app/browser.go index 384c701..10fb54c 100644 --- a/internal/app/browser.go +++ b/internal/app/browser.go @@ -4,6 +4,7 @@ import ( "os/exec" "runtime" + "github.com/atotto/clipboard" tea "github.com/charmbracelet/bubbletea" ) @@ -20,3 +21,9 @@ func openURL(rawurl string) tea.Cmd { return tea.ExecProcess(cmd, func(err error) tea.Msg { return openURLMsg{err: err} }) } + +func yankURL(rawurl string) tea.Cmd { + return func() tea.Msg { + return yankURLMsg{url: rawurl, err: clipboard.WriteAll(rawurl)} + } +} -- 2.51.2