Skip to content

Fixed: Remove trailing whitespace padding when copying multi-line text#4940

Open
tcely wants to merge 1 commit intotermux:masterfrom
tcely:tcely-issue-2108
Open

Fixed: Remove trailing whitespace padding when copying multi-line text#4940
tcely wants to merge 1 commit intotermux:masterfrom
tcely:tcely-issue-2108

Conversation

@tcely
Copy link
Copy Markdown

@tcely tcely commented Jan 15, 2026

This commit addresses issue #2108 where copying multi-line selections resulted in excessive trailing whitespace being added to the clipboard.

Problem:

The getSelectedText() method in TerminalBuffer was setting x2 = columns for all non-final rows, causing the copy operation to read the entire terminal width (e.g., 120 characters) regardless of actual content length. This resulted in short lines being padded with 100+ spaces, which could bloat a 5,000-line selection from <1MB to 2-3MB, exceeding Android's 1MB Binder transaction limit and causing clipboard truncation.

Solution:

Modified the selection logic to distinguish between wrapped and non-wrapped lines:

  • Wrapped lines: Continue reading to full terminal width to preserve wrapped content correctly
  • Non-wrapped lines: Find the last non-space character and only copy up to that position

This aligns Termux's copy behavior with standard terminal emulators (Alacritty, GNOME Terminal) which automatically trim trailing whitespace.

Impact:

  • Eliminates clipboard truncation for 99% of use cases
  • Maintains correct behavior for wrapped lines
  • Preserves empty lines (lines with only spaces keep at least one space)
  • No breaking changes to existing functionality

Fixes: #2108

This commit addresses issue termux#2108 where copying multi-line selections
resulted in excessive trailing whitespace being added to the clipboard.

Problem:
--------
The getSelectedText() method in TerminalBuffer was setting x2 = columns
for all non-final rows, causing the copy operation to read the entire
terminal width (e.g., 120 characters) regardless of actual content
length. This resulted in short lines being padded with 100+ spaces,
which could bloat a 5,000-line selection from <1MB to 2-3MB, exceeding
Android's 1MB Binder transaction limit and causing clipboard truncation.

Solution:
---------
Modified the selection logic to distinguish between wrapped and
non-wrapped lines:
- Wrapped lines: Continue reading to full terminal width to preserve
  wrapped content correctly
- Non-wrapped lines: Find the last non-space character and only copy
  up to that position

This aligns Termux's copy behavior with standard terminal emulators
(Alacritty, GNOME Terminal) which automatically trim trailing whitespace.

Impact:
-------
- Eliminates clipboard truncation for 99% of use cases
- Maintains correct behavior for wrapped lines
- Preserves empty lines (lines with only spaces keep at least one space)
- No breaking changes to existing functionality

Fixes: termux#2108
@tcely tcely marked this pull request as ready for review January 15, 2026 06:58
@termux termux deleted a comment from susysandeman05-coder Jan 20, 2026
Copilot AI added a commit to Uaemextop/termux-app that referenced this pull request Mar 10, 2026
- PR termux#5007: Fix fullscreen mode on Android 11+ (hide navigation bar)
- PR termux#4940: Fix trailing whitespace padding when copying multi-line text
- PR termux#4931: Enable RTL support in AndroidManifest.xml
- PR termux#4994: Fix typos in README.md and use kbd formatting
- PR termux#4972: Add fallback editor in FileReceiverActivity
- Add debug and release keystores in .github/signing/
- Update build.gradle to use new keystores
- Add release_build.yml workflow
- Update existing workflows to verify signing keystores

Co-authored-by: EduardoC3677 <217669697+EduardoC3677@users.noreply.github.com>
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.

copied text includes whitespace

3 participants