detached 3ece2da

fix(tui): preserve clipboard fallback

commit
3ece2da72227929210f848aca1129233c4e292b1
author
brice · · 2026-08-04 09:54 UTC
parent
3959425
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +2 -11
M packages/agent/modes/interactive.go +1 -8
@@ -2767,14 +2767,7 @@ func (i *Interactive) handleKey(ctx context.Context, k tui.Key) (done bool) {
27672767 }
27682768
27692769 func (i *Interactive) pasteClipboard(ctx context.Context) {
2770- image, ok, err := tui.ReadClipboardImage(ctx)
2771- if err != nil {
2772- i.mu.Lock()
2773- i.statusErr = "clipboard paste failed: " + err.Error()
2774- i.statusOK = ""
2775- i.mu.Unlock()
2776- return
2777- }
2770+ image, ok, _ := tui.ReadClipboardImage(ctx)
27782771 if ok {
27792772 i.mu.Lock()
27802773 marker := fmt.Sprintf("[clipboard image #%d]", len(i.clipboardImages)+1)
@@ -2767,14 +2767,7 @@ func (i *Interactive) handleKey(ctx context.Context, k tui.Key) (done bool) {
2767 }2767 }
2768 2768
2769 func (i *Interactive) pasteClipboard(ctx context.Context) {2769 func (i *Interactive) pasteClipboard(ctx context.Context) {
2770- image, ok, err := tui.ReadClipboardImage(ctx)2770+ image, ok, _ := tui.ReadClipboardImage(ctx)
2771- if err != nil {
2772- i.mu.Lock()
2773- i.statusErr = "clipboard paste failed: " + err.Error()
2774- i.statusOK = ""
2775- i.mu.Unlock()
2776- return
2777- }
2778 if ok {2771 if ok {
2779 i.mu.Lock()2772 i.mu.Lock()
2780 marker := fmt.Sprintf("[clipboard image #%d]", len(i.clipboardImages)+1)2773 marker := fmt.Sprintf("[clipboard image #%d]", len(i.clipboardImages)+1)
M packages/tui/clipboard_darwin.go +1 -3
@@ -63,9 +63,7 @@ func ReadClipboardImage(ctx context.Context) (ClipboardImage, bool, error) {
6363 if !ok {
6464 return ClipboardImage{}, false, nil
6565 }
66- if err := removeClipboardImageFile(path); err != nil {
67- return ClipboardImage{}, false, err
68- }
66+ _ = removeClipboardImageFile(path)
6967 return ClipboardImage{MimeType: "image/png", Data: data}, true, nil
7068 }
7169
@@ -63,9 +63,7 @@ func ReadClipboardImage(ctx context.Context) (ClipboardImage, bool, error) {
63 if !ok {63 if !ok {
64 return ClipboardImage{}, false, nil64 return ClipboardImage{}, false, nil
65 }65 }
66- if err := removeClipboardImageFile(path); err != nil {66+ _ = removeClipboardImageFile(path)
67- return ClipboardImage{}, false, err
68- }
69 return ClipboardImage{MimeType: "image/png", Data: data}, true, nil67 return ClipboardImage{MimeType: "image/png", Data: data}, true, nil
70 }68 }
71 69

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close