Zed Improved. Aiming to improve upon Zed and make a truly delightful code editor.
https://zed.dev
![]() For #31827 # URL Decoding Fix for Terminal File Path Clicking ## Discussion This change does not allow for paths that literally have `%XX` inside of them. If any such paths exist, they will fail to ctrl+click. A larger change would be needed to handle that. ## Problem In the terminal, you could ctrl+click file paths to open them in the editor, but this didn't work when the paths contained URL-encoded characters (percent-encoded sequences like `%CE%BB` for Greek letter λ). ### Example Issue - This worked: `dashboardλ.mts:3:8` - This didn't work: `dashboard%CE%BB.mts:3:8` The URL-encoded form `%CE%BB` represents the Greek letter λ (lambda), but the terminal wasn't decoding these sequences before trying to open the files. ## Solution Added URL decoding functionality to the terminal path detection system: 1. **Added urlencoding dependency** to `crates/terminal/Cargo.toml` 2. **Created decode_file_path function** in `crates/terminal/src/terminal.rs` that: - Attempts to decode URL-encoded paths using `urlencoding::decode()` - Falls back to the original string if decoding fails - Handles malformed encodings gracefully 3. **Applied decoding to PathLikeTarget creation** for both: - Regular file paths detected by word regex - File:// URLs that are treated as paths ## Code Changes ### New Function ```rust /// Decodes URL-encoded file paths to handle cases where terminal output contains /// percent-encoded characters (e.g., %CE%BB for λ). /// Falls back to the original string if decoding fails. fn decode_file_path(path: &str) -> String { urlencoding::decode(path) .map(|decoded| decoded.into_owned()) .unwrap_or_else(|_| path.to_string()) } ``` ### Modified PathLikeTarget Creation The function is now called when creating `PathLikeTarget` instances: - For file:// URLs: `decode_file_path(path)` - For regular paths: `decode_file_path(&maybe_url_or_path)` ## Testing Added comprehensive test coverage in `test_decode_file_path()` that verifies: - Normal paths remain unchanged - URL-encoded characters are properly decoded (λ, spaces, slashes) - Paths with line numbers work correctly - Invalid encodings fall back gracefully - Mixed encoding scenarios work ## Impact This fix enables ctrl+click functionality for file paths containing non-ASCII characters that appear URL-encoded in terminal output, making the feature work consistently with tools that output percent-encoded file paths. The change is backward compatible - all existing functionality continues to work unchanged, and the fix only activates when URL-encoded sequences are detected. Release Notes: * File paths printed in the terminal that have `%XX` escape sequences will now be properly decoded so that ctrl+click will open them |
||
---|---|---|
.cargo | ||
.cloudflare | ||
.config | ||
.github | ||
.zed | ||
assets | ||
crates | ||
docs | ||
extensions | ||
legal | ||
nix | ||
script | ||
tooling | ||
.clinerules | ||
.cursorrules | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.prettierrc | ||
.rules | ||
.windsurfrules | ||
Cargo.lock | ||
Cargo.toml | ||
CLAUDE.md | ||
clippy.toml | ||
CODE_OF_CONDUCT.md | ||
compose.yml | ||
CONTRIBUTING.md | ||
Cross.toml | ||
debug.plist | ||
default.nix | ||
docker-compose.sql | ||
Dockerfile-collab | ||
Dockerfile-collab.dockerignore | ||
Dockerfile-cross | ||
Dockerfile-cross.dockerignore | ||
Dockerfile-distros | ||
Dockerfile-distros.dockerignore | ||
flake.lock | ||
flake.nix | ||
LICENSE-AGPL | ||
LICENSE-APACHE | ||
LICENSE-GPL | ||
livekit.yaml | ||
lychee.toml | ||
Procfile | ||
Procfile.postgrest | ||
README.md | ||
renovate.json | ||
rust-toolchain.toml | ||
shell.nix | ||
typos.toml |
Zed
Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Installation
On macOS and Linux you can download Zed directly or install Zed via your local package manager.
Other platforms are not yet available:
- Windows (tracking issue)
- Web (tracking issue)
Developing Zed
- Building Zed for macOS
- Building Zed for Linux
- Building Zed for Windows
- Running Collaboration Locally
Contributing
See CONTRIBUTING.md for ways you can contribute to Zed.
Also... we're hiring! Check out our jobs page for open roles.
Licensing
License information for third party dependencies must be correctly provided for CI to pass.
We use cargo-about
to automatically comply with open source licenses. If CI is failing, check the following:
- Is it showing a
no license specified
error for a crate you've created? If so, addpublish = false
under[package]
in your crate's Cargo.toml. - Is the error
failed to satisfy license requirements
for a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to theaccepted
array inscript/licenses/zed-licenses.toml
. - Is
cargo-about
unable to find the license for a dependency? If so, add a clarification field at the end ofscript/licenses/zed-licenses.toml
, as specified in the cargo-about book.