Closes #17605
Watches for target paths if file watched is a symlink in Linux.
This will check if the generated `notify::Event` has any paths matching
the `root_path` and if the file is a symlink it will also check if the
path matches the `target_root_path` (the path that the symlink is
pointing to)
Release Notes:
- Added file watching for symlinks
Alvaro Parker
created
39be9e5
gpui: Fix `show: false` support on Windows to create an invisible window (#18161)
Click to expand commit body
Release Notes:
- N/A
-
The `show` of WindowOptions is valid on macOS but not on Windows, this
changes to fix it to support create an invisible window.
```bash
cargo run -p gpui --example window
```
## Before
https://github.com/user-attachments/assets/4157bdaa-39a7-44df-bbdc-30b00e9c61e9
## After
https://github.com/user-attachments/assets/d48fa524-0caa-4f87-932d-01d7a468c488
https://github.com/user-attachments/assets/dd052f15-c8db-4a2a-a6af-a7c0ffecca84
Closes #17573
Release Notes:
- Check that double clicks on Linux are triggered by same button.
Patrick MARIE
created
938a067
gpui: Fix img element to auto size when only have width or height (#17994)
Click to expand commit body
Release Notes:
- N/A
---
We may only want to set the height of an image to limit the size and
make the width adaptive.
In HTML, we will only set width or height, and the other side will adapt
and maintain the original image ratio.
I changed this because I had a logo image that only to be limited in
height, and then I found that setting the height of the `img` alone
would not display correctly.
I also tried to set `ObjectFit` in this Demo, but it seems that none of
them can achieve the same effect as "After".
## Before
<img width="809" alt="before 2024-09-18 164029"
src="https://github.com/user-attachments/assets/7ba559ed-e53b-43e6-a072-93c8ba5b14ee">
## After
<img width="749" alt="after 2024-09-18 172003"
src="https://github.com/user-attachments/assets/51ee2eba-76b3-400a-abbf-de0e9c4021e2">
**Clipboard Behavior on Windows Under This PR:**
| User Action | Zed’s Behavior |
| ------------------- |
-------------------------------------------------- |
| Paste PNG | Worked |
| Paste JPEG | Worked |
| Paste WebP | Worked, but not in the way you expect (see Issue section
below) |
| Paste GIF | Partially worked (see Issue section below) |
| Paste SVG | Partially worked (see Issue section below) |
| Paste BMP | Worked, but not in the way you expect (see Issue section
below) |
| Paste TIFF | Worked, but not in the way you expect (see Issue section
below) |
| Paste Files | Worked, same behavior as macOS |
| Copy image in Zed | Not tested, as I couldn’t find a way to copy
images |
---
**Differences Between the Windows and macOS Clipboard**
The clipboard functionality on Windows differs significantly from macOS.
On macOS, there can be multiple items in the clipboard, whereas, on
Windows, the clipboard holds only a single item. You can retrieve
different formats from the clipboard, but they are all just different
representations of the same item.
For example, when you copy a JPG image from Microsoft Word, the
clipboard will contain data in several formats:
- Microsoft Office proprietary data
- JPG format data
- PNG format data
- SVG format data
Please note that these formats all represent the same image, just in
different formats. This is due to compatibility concerns on Windows, as
various applications support different formats. Ideally, multiple
formats should be placed on the clipboard to support more software.
However, in general, supporting PNG will cover 99% of software, like
Chrome, which only supports PNG and BMP formats.
Additionally, since the clipboard on Windows only contains a single
item, special handling is required when copying multiple objects, such
as text and images. For instance, if you copy both text and an image
simultaneously in Microsoft Word, Microsoft places the following data on
the clipboard:
- Microsoft Office proprietary data containing a lot of content such as
text fonts, sizes, italics, positioning, image size, content, etc.
- RTF data representing the above content in RTF format
- HTML data representing the content in HTML format
- Plain text data
Therefore, for the current `ClipboardItem` implementation, if there are
multiple `ClipboardEntry` objects to be placed on the clipboard, RTF or
HTML formats are required. This PR does not support this scenario, and
only supports copying or pasting a single item from the clipboard.
---
**Known Issues**
- **WebP, BMP, TIFF**: These formats are not explicitly supported in
this PR. However, as mentioned earlier, in most cases, there are
corresponding PNG format data on the clipboard. This PR retrieves data
via PNG format, so users copying images in these formats from other
sources will still see the images displayed correctly.
- **GIF**: In this PR, GIFs are displayed, but for GIF images with
multiple frames, the image will not animate and will freeze on a single
frame. Since I observed the same behavior on macOS, I believe this is
not an issue with this PR.
- **SVG**: In this PR, only the top-left corner of the SVG image is
displayed. Again, I observed the same behavior on macOS, so I believe
this issue is not specific to this PR.
---
I hope this provides a clearer understanding. Any feedback or
suggestions on how to improve this are welcome.
Release Notes:
- N/A
Junkui Zhang
created
ecb7144
windows: Fix can not set folder for `FileSaveDialog` (#17708)
Click to expand commit body
Closes #17622
Closes #17682
The story here is that `SHCreateItemFromParsingName` dose not accept UNC
path.
Video:
https://github.com/user-attachments/assets/f4f7f671-5ab5-4965-9158-e7a79ac02654
Release Notes:
- N/A
Junkui Zhang
created
8377561
linux/wayland: Add support for pasting images (#17671)
Click to expand commit body
Release Notes:
- You can now paste images into the Assistant Panel to include them as
context on Linux wayland
- Closes: https://github.com/zed-industries/zed/issues/11024
## Release Notes:
- Improved Markdown Preview rendering of tables
## Before:

<img width="2035" alt="Screenshot 2024-09-25 at 05 47 19"
src="https://github.com/user-attachments/assets/a30c56f5-4793-44c2-8527-294189f9e724">
## Now:

<img width="2040" alt="Screenshot 2024-09-25 at 05 47 48"
src="https://github.com/user-attachments/assets/76e5d217-9110-4c5d-9fad-dc63ae0b75f4">
## Note:
I'm not a Rust programmer and this is my first PR in Zed (because i just
want to fix this, so i can view my notes in Markdown in Zed, not slow
Visual Studio Code) - so there may be errors. I'm open for critic a
- Add `script/build-docker`
- Add `script/install-cmake`
- Add `script/install-mold`
- Improve `script/linux`
- Add missing dependencies: `jq`, `git`, `tar`, `gzip` as required.
- Add check for mold
- Fix Redhat 8.x derivatives (RHEL, Centos, Almalinux, Rocky, Oracle, Amazon)
- Fix perl libs to be Fedora only
- Install the best `libstdc++` available on apt distros
- ArchLinux: run `pacman -Syu` to update repos before installing.
- Should work on Raspbian (untested)
This make it possible to test builds on other distros using docker:
```
./script/build-docker amazonlinux:2023
```
Peter Tripp
created
432de00
ci: Use BuildJet Ubuntu 20.04 runners for better glibc compatibility (#18442)
Click to expand commit body
Use BuildJet Ubuntu 20.04 runners.
- Linux arm64 unchanged (glibc >= 2.35)
- Linux x64 glibc requirement becomes to >= 2.31 (from glibc >= 2.35).
Note: Ubuntu 20.04 repo cmake (3.16.3) is normally too old to build Zed, but `ubuntu-2004` [includes cmake
3.30.3](https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2004-Readme.md#tools).
- Refactor duplicated inline script from ci.yml to
`script/determine-release-channel`
- Remove references to non-existent '-nightly' release tags
Release Notes:
- N/A
Peter Tripp
created
74cba24
ci: Move collab to Dockerfile-collab (#18515)
Click to expand commit body
This makes it possible to have multiple Dockerfiles, each with their own
`.dockerignore`. Previously any docker builds would always include
anything inside `.dockerignore`. I believe this feature may require
`export DOCKER_BUILDKIT=1` but we use that in CI already.
This PR changes the undo icon and adds a background color so that indent
lines don't bleed through the control block.
<img width="900" alt="Screenshot 2024-09-30 at 5 38 44 PM"
src="https://github.com/user-attachments/assets/4955f0f6-50ce-432f-85b9-1da0172d5e51">
Release Notes:
- N/A
This is a follow-up to #18530 thanks to this comment here:
https://github.com/zed-industries/zed/pull/18530#issuecomment-2382870564
In short: it fixes the `blinking` setting and the `cursor_shape` setting
as it relates to blinking.
Turns out our `blinking` setting was always the wrong value when using
`terminal_controlled` and the terminal _would_ control the blinking.
Example script to test with:
```bash
echo -e "0 normal \x1b[\x30 q"; sleep 2
echo -e "1 blink block \x1b[\x31 q"; sleep 2
echo -e "2 solid block \x1b[\x32 q"; sleep 2
echo -e "3 blink under \x1b[\x33 q"; sleep 2
echo -e "4 solid under \x1b[\x34 q"; sleep 2
echo -e "5 blink vert \x1b[\x35 q"; sleep 2
echo -e "6 solid vert \x1b[\x36 q"; sleep 2
echo -e "0 normal \x1b[\x30 q"; sleep 2
echo -e "color \x1b]12;#00ff00\x1b\\"; sleep 2
echo -e "reset \x1b]112\x1b\\ \x1b[\x30 q"
```
Before the changes in here, this script would set the cursor shape and
the blinking, but the blinking boolean would always be wrong.
This change here makes sure that it works consistently:
- `terminal.cursor_shape` only controls the *default* shape of the
terminal, not the blinking.
- `terminal.blinking = on` means that it's *always* blinking, regardless
of what terminal programs want
- `terminal.blinking = off` means that it's *never* blinking, regardless
of what terminal programs want
- `terminal.blinking = terminal_controlled (default)` means that it's
blinking depending on what terminal programs want. when a terminal
program resets the cursor to default, it sets it back to
`terminal.cursor_shape` if that is set.
Release Notes:
- Fixed the behavior of `{"terminal": {"blinking":
"[on|off|terminal_controlled]"}` to work correctly and to work correctly
when custom `cursor_shape` is set.
- `terminal.cursor_shape` only controls the *default* shape of the
terminal, not the blinking.
- `terminal.blinking = on` means that it's *always* blinking, regardless
of what terminal programs want
- `terminal.blinking = off` means that it's *never* blinking, regardless
of what terminal programs want
- `terminal.blinking = terminal_controlled (default)` means that it's
blinking depending on what terminal programs want. when a terminal
program resets the cursor to default, it sets it back to
`terminal.cursor_shape` if that is set.
Demo:
https://github.com/user-attachments/assets/b3fbeafd-ad58-41c8-9c07-1f03bc31771f
Co-authored-by: Bennet <bennet@zed.dev>
Thorsten Ball
and
Bennet
created
215bce1
Make direct direnv loading default (#18536)
Click to expand commit body
I've been running with direct direnv loading for a while now and haven't
experienced any significant issues other than #18473. Making it default
would make direnv integration more reliable and consistent. I've also
updated the docs a bit to ensure that they represent current status of
direnv integration
Release Notes:
- Made direnv integration use direct (`direnv export json`) mode by
default instead of relying on a shell hook, improving consistency and
reliability of direnv detection
Stanislav Alekseev
created
e64a86c
Fix a typo in the multi buffers documentation (#18535)
65f6a7e
linux/x11: Give title bar inactive bg on mouse down (#18529)
Click to expand commit body
This fixes something that I felt was off for a while. Previously, when
you'd click on the titlebar to move the window, the titlebar would only
change its background once the moving starts, but not on mouse-down.
That felt really off, since the moving is down with mouse-down and move,
so I think giving the user feedback about the mouse-down event makes
more sense.
I know there's a subjectivity to this change, so I'm ready to hear other
opinions, but for now I want to go with this.
Release Notes:
- N/A
Thorsten Ball
created
533416c
terminal: Make CursorShape configurable (#18530)
Click to expand commit body
This builds on top of @Yevgen's #15840 and combines it with the settings
names introduced in #17572.
Closes #4731.
Release Notes:
- Added a setting for the terminal's default cursor shape. The setting
is `{"terminal": {"cursor_shape": "block"}}``. Possible values: `block`,
`bar`, `hollow`, `underline`.
Demo:
https://github.com/user-attachments/assets/96ed28c2-c222-436b-80cb-7cd63eeb47dd
Thorsten Ball
created
57ad577
Add a way to explicitly specify RC toolkit path (#18402)
Click to expand commit body
Closes #18393
Release Notes:
- Added a `ZED_RC_TOOLKIT_PATH` env variable so `winresource` crate can fetch the RC executable path correctly on some configurations
0hDEADBEAF
created
707ccb0
Restore paste on middle-click on linux (#18503)
Click to expand commit body
This is a partial revert of e6c1c51b37a, which removed the middle-click
pasting on linux (both x11 & wayland). It also restores the
`middle_click_paste` option behavior which became unexistent.
Release Notes:
- Restore Linux middle-click pasting.
I made a few tree-sitter queries for improving the highlighting of C++.
There is one query that I'm not totally certain about and would
appreciate some feedback on it, the one that concerns attributes.
Many editor only highlight the identifier as a keyword (This is the
behavior implemented in this commit), while others, for example the
tree-sitter plugin for neovim, tags the entire attribute for
highlighting (double brackets included). I don't know which one is
preferable. Here are screenshots of the two versions:


Release Notes:
- Fixed C++ attributes identifiers being wrongly highlighed through the
tag "variable"
- C++ attribute identifiers (nodiscard,deprecated, noreturn, etc.. ) are
now highlighted through the tag "keyword"
- Changed C++ primitives types (void, bool, int, size_t, etc.. ) to no
longer be highlighted with the tag "keyword", they can now be
highlighted by the tag "type.primitive".
- Added a tag "concept" for highlighting C++ concept identifiers. (This
tag name has been chosen to be the same than the one returned by
clangd's semantic tokens)
VacheDesNeiges
created
ed5eb72
Improve language server log view split ergonomics (#18527)
Click to expand commit body
Allows to split log view, and opens it split on the right, same as the
syntax tree view.
Release Notes:
- Improved language server log panel split ergonomics
Kirill Bulatov
created
3fafdeb
gpui: Fix blur region on Plasma/Wayland (#18465)
Click to expand commit body
Once again aping after what winit does - since we always want to have
the whole window blurred there is apparently no need to specify a blur
region at all. Rounded corners would be the exception, but that is not
possible with the current protocol (it is planned for the vendor-neutral
version though!)
This eliminates the problem where only a fixed region of the window
would get blurred if the window was resized to be larger than at launch.
Also a drive-by comment grammar fix :wink:
Release Notes:
- Fixed blur region handling on Plasma/Wayland
PHP heredoc strings make it easy to define string literals over multiple
lines:
```php
$someString = <<<EOT
multiline
text
EOT;
```
That `EOT` identifier can be anything else, and it is actually being
used in Sublime Text and VS Code to inject syntax highlighting for
another language in said string, depending on the identifier. For
instance, if the identifier is SQL, SQL syntax highlighting will be
applied to the contents of the string. Likewise if the identifier is CSS
or JS.
```php
$someString = <<<SQL
SELECT *
FROM my_table
SQL;
```
This PR changes the PHP extension so that it supports that feature too.
Release Notes:
- php: Added syntax highlighting inside heredoc strings
Sylvain Brunerie
created
5b40deb
Don't stop loading the env if direnv call fails (#18473)
Click to expand commit body
Before this we we would stop loading the environment if the call to
direnv failed, which is not necessary in any way
cc @mrnugget
Release Notes:
- Fixed the environment not loading if `direnv` mode is set to `direct`
and `.envrc` is not allowed
Stanislav Alekseev
created
e39695b
docs: Update msys2 section in development/windows (#18385)
Click to expand commit body
merge after
https://packages.msys2.org/packages/mingw-w64-clang-x86_64-zed is
available. alternatively you can check the
[queue](https://packages.msys2.org/queue) for build status
Zed now compiles and runs under msys2/CLANG64 environment, so change the
docs to give the users a choice of their environment
Release Notes:
- N/A
Maksim Bondarenkov
created
77df7e5
settings: Make external formatter arguments optional (#18340)
Click to expand commit body
If specifying a formatter in the settings like this:
"languages": {
"foo": {
"formatter": {
"external": {
"command": "/path/to/foo-formatter"
}
}
}
}
Zed will show an error like this:
Invalid user settings file
data did not match any variant of untagged enum SingleOrVec
This is because the arguments are not optional. The error is hard to
understand, so let's make the arguments actually optional, which makes
the above settings snippet valid.
Release Notes:
- Make external formatter arguments optional
Tom Wieczorek
created
250f2e7
tasks: Display runnables at the start of folds (#18526)
Click to expand commit body
Release Notes:
- Fixed task indicators not showing up at the starts of folds.
Piotr Osiewicz
created
5f35fa5
Associate `uv.lock` files with TOML (#18426)
Click to expand commit body
The `uv` python package manager uses the TOML for it's `uv.lock` file,
see https://docs.astral.sh/uv/guides/projects/#uvlock.
Ref #7808
Release Notes:
- associate `uv.lock` files with the TOML language
Thorben Kröger
created
84ce81c
Pass `Summary::Context` to `Item::summarize` (#18510)
Click to expand commit body
We are going to use this in the multi-buffer to produce a summary for an
`Excerpt` that contains a `Range<Anchor>`.
Release Notes:
- N/A
Co-authored-by: Nathan <nathan@zed.dev>
Antonio Scandurra
and
Nathan
created
8aeab48
Continue to redirect to GitHub commits for nightly and dev release notes (#18487)
Click to expand commit body
We are now using the `view release notes locally` action when clicking
on the update toast - the endpoint for this action does not currently
return anything for valid for these channels, as we don't have support
yet for diffing between these builds, so for now, [continue to do what
the `view release notes` action did and just send the user to the commit
view on
GitHub](https://github.com/zed-industries/zed/blob/caffb2733f8e859637050e3708dbd10b6e409762/crates/auto_update/src/auto_update.rs#L255-L260).
It is a bit counterintuitive to send the user to the browser when using
the "local" action, but this is just a patch in the interim.
If we make adjustments to our channels to keep the nightly tag stable
and add some sort of unique suffix, like a timestamp, we can then adjust
things to return these in the request body and show them in the editor.
Release Notes:
- N/A
Joseph T. Lyons
created
1021f0e
Show release notes locally when showing update notification (#18486)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/17527
I think we are ok to switch to using the local action now. There are a
few things we don't support, like media, but we don't include media
directly too often, and I think this might help push the community to
maybe add support for it. That being said, I updated the markdown coming
back from the endpoint to include links to the web version of the
release notes, so they can always hop over to that version, if they
would like.
https://github.com/user-attachments/assets/b4d207a7-1640-48f1-91d0-94537f74116c
All forming of the Markdown happens in the endpoint, so if someone with
a better eye wants to update this, you can do that here:
https://github.com/zed-industries/zed.dev/blob/0e5923e3e7d1caa8b4bf32d0a7f8999b34dbe64c/src/pages/api/release_notes/v2/%5Bchannel_type%5D/%5Bversion%5D.ts#L50-L62
Release Notes:
- Changed the `view the release notes` button in the update toast to
trigger the local release notes action.
3737d4e
Add tooltip for code actions icon button (#18461)
Click to expand commit body
I have just recently discovered this keybinding myself out of talking to
folks, ha. The tooltip here might ease the discovery for other folks in
the future.
<img width="700" alt="Screenshot 2024-09-27 at 11 04 28 PM"
src="https://github.com/user-attachments/assets/844d3b55-15af-47f7-a8db-5c8832ceba29">
---
Release Notes:
- N/A
1c5be9d
Capitalize tooltip labels on buffer search (#18458)
Click to expand commit body
For consistency, as this seems to be the pattern we're using overall for
labels and buttons.
---
Release Notes:
- N/A
Danilo Leal
created
d5f6740
Install cargo-edito without extra features (#18457)
Click to expand commit body
https://github.com/killercup/cargo-edit/pull/907 removed the feature
from the crate
Release Notes:
- N/A
Kirill Bulatov
created
c3075df
Fix bugs in diff hunk highlighting (#18454)
Click to expand commit body
Fixes https://github.com/zed-industries/zed/issues/18405
In https://github.com/zed-industries/zed/pull/18313, we introduced a
problem where git addition highlights might spuriously return when
undoing certain changes. It turned out, there were already some cases
where git hunk highlighting was incorrect when editing at the boundaries
of expanded diff hunks.
In this PR, I've introduced a test helper method for more rigorously
(and readably) testing the editor's git state. You can assert about the
entire state of an editor's diff decorations using a formatted diff:
```rust
cx.assert_diff_hunks(
r#"
- use some::mod1;
use some::mod2;
const A: u32 = 42;
- const B: u32 = 42;
const C: u32 = 42;
fn main() {
- println!("hello");
+ //println!("hello");
println!("world");
+ //
+ //
}
fn another() {
println!("another");
+ println!("another");
}
- fn another2() {
println!("another2");
}
"#
.unindent(),
);
```
This will assert about the editor's actual row highlights, not just the
editor's internal hunk-tracking state.
I rewrote all of our editor diff tests to use these more high-level
assertions, and it caught the new bug, as well as some pre-existing bugs
in the highlighting of added content.
The problem was how we *remove* highlighted rows. Previously, it relied
on supplying exactly the same range as one that we had previously
highlighted. I've added a `remove_highlighted_rows(ranges)` APIs which
is much simpler - it clears out any row ranges that intersect the given
ranges (which is all that we need for the Git diff use case).
Release Notes:
- N/A
Release Notes:
- vim: Fixed cursor position after `:{range}yank`.
- vim: Added `:fo[ld]`, `:foldo[pen]` and `:foldc[lose]`
Conrad Irwin
created
6d4ecac
Add a `get-release-notes-since` script (#18445)
Click to expand commit body
Release Notes:
- N/A
Joseph T. Lyons
created
dc5ffe6
Fix GoToDefinition changing the viewport unnecessarily (#18441)
Click to expand commit body
Closes #10738.
Release Notes:
- Fixed `GoToDefinition` changing the viewport (scrolling up/down) even when the definition is already within the viewport. ([#10738](https://github.com/zed-industries/zed/issues/10738))
73ff8c0
Fix missing tooltips for selected buttons (#18435)
Click to expand commit body
Reverts #13857. Hiding tooltips for selected buttons prevents tooltips
like "Close x dock" from showing up, see #14938 for an example.
The intention of the original PR was to hide the "Show application menu"
tooltip, while the context menu is open.
In order to fix this without breaking other UI elements, we track the
state of the context menu using `PopoverMenuHandle` now, which allows us
to prevent the tooltip from showing up while the context menu is open.
Closes #14938
Release Notes:
- Fixed an issue where some tooltips would not show up
Bennet Bo Fenner
created
1c5d9c2
Add missing shortcuts in tooltips (#18282)
Click to expand commit body
Fixes some missing shortcuts from Tooltips like the project search,
buffer search, quick action bar, ....
https://github.com/user-attachments/assets/d3a0160a-8d6e-4ddc-bf82-1fabeca42d59
This should hopefully help new users learn and discover some nice
keyboard shortcuts
Release Notes:
- Display keyboard shortcuts inside tooltips in the project search,
buffer search etc.
Bennet Bo Fenner
created
a1d2e11
assistant: Fix copy/cut not working when selection is empty (#18403)
Click to expand commit body
Release Notes:
- Fixed copy/cut/paste not working in the assistant panel when selection
was empty
Bennet Bo Fenner
created
568a21a
Fix the numeration in line wrap docs (#18428)