Skip to content

Conversation

@sei40kr
Copy link

@sei40kr sei40kr commented Dec 12, 2025

Summary

Adds OSC 52 terminal escape sequence support for clipboard operations as an opt-in configuration option.

Changes

  • Created modular clipboard architecture with trait-based backends:
    • ArboardClipboard: System clipboard (default)
    • Osc52Clipboard: Terminal escape sequences
  • Added use_osc52_clipboard config option (default: false)
  • When enabled, uses OSC 52; when disabled, uses arboard
  • Returns None if arboard initialization fails and OSC 52 is disabled

Benefits

  • ✅ Enables clipboard functionality in SSH sessions
  • ✅ Works in headless/remote environments
  • ✅ No external clipboard tools required when using OSC 52
  • ✅ Backward compatible - disabled by default

How to use

Users can test if their terminal supports OSC 52 by running:

printf '\033]52;c;%s\007' "$(echo -n 'test' | base64)"
# Then try pasting - if you see 'test', OSC 52 is supported

Then enable it in ~/.config/gitu/config.toml:

[general]
use_osc52_clipboard = true

Test plan

  • All existing tests pass
  • Builds successfully
  • Default behavior unchanged (OSC 52 disabled by default)
  • Config option properly documented in default_config.toml

🤖 Generated with Claude Code

Add OSC 52 terminal escape sequence support for clipboard operations
as an opt-in feature via configuration.

Implementation:
- Created clipboard trait with two backends:
  - ArboardClipboard: System clipboard (default)
  - Osc52Clipboard: Terminal escape sequences
- Added use_osc52_clipboard config option (default: false)
- When enabled, uses OSC 52; when disabled, uses arboard
- Returns None if arboard initialization fails and OSC 52 is disabled

Benefits:
- Enables clipboard in SSH sessions
- Works in headless/remote environments
- No external clipboard tools required when using OSC 52

Testing:
- Added instructions in config.toml to test terminal OSC 52 support
- Users can verify with: printf '\033]52;c;%s\007' "$(echo -n 'test' | base64)"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
@sei40kr sei40kr force-pushed the feat/osc52-clipboard branch from 2b0c111 to c06b6ec Compare December 12, 2025 17:55
@sei40kr
Copy link
Author

sei40kr commented Dec 12, 2025

Design Decision: Manual Configuration

OSC 52 support requires manual configuration rather than automatic detection. I explored auto-detection via XTGETTCAP queries, but encountered issues:

  • Event loop interference: Background threads checking terminal capabilities conflicted with crossterm's event polling, causing menus to open unexpectedly at startup
  • Synchronous checks: Running capability checks during copy operations would add 200ms latency to the first copy
  • Terminal compatibility: Many terminals support OSC 52 but don't respond to XTGETTCAP queries (Windows Terminal, some tmux configurations)

Manual configuration via use_osc52_clipboard provides a reliable, zero-overhead solution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant