coder / coder/code-server

Clipboard copy in code-server on iPad is unreliable with dragged/keyboard selections

Offen
#7,556 6 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug triage
Vorherrschende Sprache
TypeScript
Sterne
79.3k
Forks
6.8k
Ø Merge
2 T. 6 Std.
Gemergte PRs (30 T.)
41

Beschreibung

### Is there an existing issue for this?

- [x] I have searched the existing issues

### OS/Web Information

- **iPadOS:** 26.0.1
- **code-server:** 4.105.1 (`811ec6c1d60add2eb92446161ca812828fdbaa7f`)
- **VS Code (web):** 1.105.1
- **Browsers on iPad:** Safari, Safari PWA (Add to Home Screen), Brave, Chrome
- **Access:** Tailscale with HTTPS (valid certs; no warnings)
- **Host:** code-server running in WSL2 on Windows 11 (Ubuntu)

### Steps to Reproduce

1. Open code-server in Safari
2. Open a file (I used `.py`)
3. Select code by dragging with mouse/trackpad from end to beginning
4. Press **⌘C** to copy.
5. Press the position you want to paste
6. Press **⌘V** to paste.

> **Note on selection direction:** If I select **from the beginning to the end** of the text, copy tends to work **more often**, but I then hit separate **encoding issues** (details below). If I select **from the end to the beginning** (which is common in real use), copy fails much more frequently. Details and diagnostics are in later sections.

### Expected

Copy should reliably place the selected text into the iPad system clipboard, regardless of how the selection was created. Pasting should paste the just selected text.

### Actual

The pasted text is often **not** the selection; it pastes whatever was previously on the clipboard.
Because this is **intermittent**, try the above a few times if it works once; failures are common but not 100%.

### Logs

```shell
When selecting text (end to beginning), pressing **⌘C** (fails), and pasting (pasted previously copied text, not the new text):

[18:36:01] File action: writeFile /mnt/c/Users///temp.py
[18:36:01] [File Watcher (node.js)] [raw] ["change"] temp.py
[18:36:01] [File Watcher (node.js)] [CHANGED] /mnt/c/Users///temp.py
[18:36:01] [File Watcher (node.js)] >> ignored (not included) /mnt/c/Users///temp.py
[18:36:01] [File Watcher (node.js)] [raw] ["change"] temp.py
[18:36:01] [File Watcher (node.js)] [CHANGED] /mnt/c/Users///temp.py
[18:36:01] [File Watcher (node.js)] >> ignored (not included) /mnt/c/Users///temp.py
[18:36:01] [File Watcher ('parcel')] [CHANGED] /mnt/c/Users///temp.py
[18:36:01] File action: writeFile /home//.local/share/code-server/User/History/-5a5bb3a7/entries.json
[18:36:01] [File Watcher ('parcel')] [CHANGED] /mnt/c/Users///temp.py
[18:36:01] [File Watcher ('parcel')] >> normalized [CHANGED] /mnt/c/Users///temp.py
```

### Screenshot/Video

https://github.com/user-attachments/assets/defdc0fb-6442-484e-a772-f1914b6b16e7

### Does this bug reproduce in native VS Code?

This cannot be tested in native VS Code

### Does this bug reproduce in GitHub Codespaces?

I did not test GitHub Codespaces

### Are you accessing code-server over a secure context?

- [x] I am using a secure context.

### Notes

## Additional observations

### A) Selection direction vs. encoding artifacts
- Selecting **begin → end** tends to copy **more reliably** (always so far), **but** small selections that include certain punctuation (quotes, commas, colons) can paste as **URL‑encoded text**.
- **Code line:** `print("Torch version:", torch.__version__)`
- **Example selected:** `n:", to`
- **Pasted:** `n:%22,%20to`
- When selecting **larger spans** or **multiple lines**, the URL‑encoding doesn’t appear.
- When pasting **multiple lines** that were copied during these “encoded” cases, they paste as **one line** instead of preserving line breaks.

### B) Selection method that always works (diagnostic)
- If I select by **double-click** (word) or **triple-click** (entire line) and then copy, **copy/paste always works** and I do **not** see the encoding issue.
- This is useful as a control, but it’s not how users typically select arbitrary ranges in day-to-day editing.

---

## What I’ve tried

### Copy mechanisms
- **⌘C / ⌘V** (default) → unreliable with drag/Shift+Arrow selections.
- **right‑click → Copy** → same behavior.

### Keybindings
- Custom binding of `editor.action.clipboardCopyAction` to **Ctrl+Shift+C** → still unreliable with drag selections.
- Default **⌘C** left in place to match typical usage; same results.

### Browsers
- **Safari**, **Safari PWA**, **Brave**, **Chrome** on iPad → identical behavior (expected; all are WebKit).

### Selection variants
- **End → begin** selection → fails more frequently.
- **Begin → end** selection → succeeds always (in the short time I've tried it), but introduces **URL‑encoded paste** for short spans containing punctuation.
- **Double/triple‑click** selection → **always succeeds**, no encoding issue.
- **Multiple lines / larger blocks** → encoding issue not observed.

---

## Impact

Frequent copy failures and occasional encoding artifacts make normal editing (moving code, refactoring snippets, copying short substrings) unreliable on iPad. The **Begin → end** selection is a usable workaround for now, and for the encoding issue I can select more text and delete the extra parts, but it does impact my productivity.

On a side note, this is my first issue on a public repository, so feedback on what I could do differently in the future is always welcome :)

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.