Skip to content

[FEATURE]: improve TUI clipboard paste and drag-and-drop file handling on Linux #14555

@RobertWsp

Description

@RobertWsp

Feature hasn't been suggested before.

  • I have verified this feature I'm about to request hasn't been suggested before.

Related issues found: #4668 (drag-and-drop), #6331 (Linux paste in Konsole), #10154 (clipboard paste). This feature request covers all three problems with a unified implementation and additionally adds WezTerm-specific DnD support and non-image file attachment handling, which none of the existing issues address.

Describe the enhancement you want to request

The TUI currently has several limitations with paste and drag-and-drop on Linux:

  1. Clipboard only reads PNG — images copied as JPEG, WebP, GIF, or BMP are silently ignored because clipboard.ts hardcodes image/png
  2. No multi-file paste/drop support — dragging multiple files from a file manager (Nautilus, Thunar) pastes raw paths as text instead of attaching them as files
  3. No non-image file attachments — PDFs, SVGs, code files, and directories pasted via path are not recognized as attachments
  4. WezTerm drag-and-drop doesn't work — WezTerm sends DroppedFile events as space-separated, backslash-escaped paths (via quote_dropped_files = "SpacesOnly"), which is a different format from newline-separated paths that other file managers use

Expected behavior: Dragging files from a file manager into the TUI should display virtual tokens ([Image 1], [File: name.ext], [Dir: dirname/]) instead of raw path text. Clipboard paste should support all common image formats.

Proposed solution (implemented in PR #14552):

  • Dynamic MIME discovery in clipboard.ts — probe clipboard for PNG → JPEG → WebP → GIF → BMP in priority order
  • Rewritten onPaste handler — supports newline-separated paths (Nautilus/Thunar), space-separated escaped paths (WezTerm), and single file paths
  • pasteFile() function for non-image attachments
  • shellTokens() parser for WezTerm's escaped filename format

Metadata

Metadata

Assignees

Labels

coreAnything pertaining to core functionality of the application (opencode server stuff)linux

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions