23315d2
Fix country code serialization (#11947)
Click to expand commit body
Release Notes: - N/A
Conrad Irwin created
23315d2
Fix country code serialization (#11947)
Release Notes: - N/A
Conrad Irwin created
0dd5fe3
Revert "Fix aside affecting parent popover height (#11859)" (#11942)
This reverts commit d3dfa91254f8cbc7f4779463b30a3df1677c395d. This change can cause weird behavior where the completion menu ends up positioned away from the cursor location: <img width="1062" alt="Screenshot 2024-05-16 at 6 43 17 PM" src="https://github.com/zed-industries/zed/assets/1486634/0462a874-4fe3-4ca9-88ce-8d5d0b4009fe"> With the change reverted: <img width="1026" alt="Screenshot 2024-05-16 at 6 43 35 PM" src="https://github.com/zed-industries/zed/assets/1486634/9fc7b9a1-0cfb-4a84-8f6b-b481a785ceca"> Release Notes: - Fixed an issue where the completion menu would sometimes appear detached from the cursor location (preview only).
Marshall Bowers created
b9ecca7
Remove wiring for `assistant2` (#11940)
This PR removes the wiring for `assistant2` that hooks it up to Zed. Since we're focusing in on improving the current assistant, we don't need this present in Zed. I left the `assistant2` crate intact for now, to make it easier to reference any code from it. Release Notes: - N/A
Marshall Bowers created
b60254f
x11: Add XIM support (#11657)
This pull request adds XIM (X Input Method) support to x11 platform. The implementation utilizes [xim-rs](https://crates.io/crates/xim), a XIM library written entirely in Rust, to provide asynchronous XIM communication. Preedit and candidate positioning are fully supported in the editor interface, yet notably absent in the terminal environment. This work is sponsored by [Rainlab Inc.](https://rainlab.co.jp/en/) Release Notes: - N/A --------- Signed-off-by: npmania <np@mkv.li>
npmania created
97691c1
assistant: Remove `unwrap`s in `RecentBuffersContext` (#11938)
This PR removes the `unwrap`s in the `RecentBuffersContext` when building the message. We can just make `build_message` return a `Result` to clean things up. Release Notes: - N/A
Marshall Bowers created
7462234
wayland: Don't reinvert inverted scroll axes (#11937)
Release Notes: - Wayland: Fixed Natural Scrolling Being Wrongly Reinverted ([#11874](https://github.com/zed-industries/zed/issues/11874)).
bbb651 created
80caa74
Support setting font feature values (#11898)
Now (on `macOS` and `Windows`) we can set font feature value:
```rust
"buffer_font_features": {
"cv01": true,
"cv03": 3,
"cv09": 1,
"VSAH": 7,
"VSAJ": 8
}
```
And one can still use `"cv01": true`.
https://github.com/zed-industries/zed/assets/14981363/3e3fcf4f-abdb-4d9e-a0a6-71dc24a515c2
Release Notes:
- Added font feature values, now you can set font features like `"cv01":
7`.
---------
Co-authored-by: Mikayla <mikayla@zed.dev>
张小白 and Mikayla created
b6189b0
Add telemetry for supermaven (#11821)
Data migration plan:
- [X] Make a duplicate table of `copilot_events`
- Name: `inline_completion_events`
- Omit `suggestion_id` column
- [X-reverted-skipping] In collab, continue to match on copilot_events,
but simply stuff their data into inline_completion_events, to forward it
to the new table
- [skipping] Once collab is deployed, ensure no events are being sent to
copilot_events, migrate `copilot_events` to new table via a transaction
- [skipping] Delete `copilot_events` table
---
- [X] Locally test that copilot events sent from old clients get put
into inline_completions_table
- [X] Locally test that copilot events and supermaven events sent from
new clients get put into inline_completions_table
---
- [X] Why are discard events being spammed?
- A:
https://github.com/zed-industries/zed/blob/8d4315712bc706a9b04d9daf638b264e5789b1f9/crates/editor/src/editor.rs#L2147

This will throw off the past results for accepted / dismissed that I was
wanting to use to evaluate Supermaven quality, by comparing its rate
with copilot's rate.
I'm not super thrilled with this fix, but I think it'll do. In the
`supermaven_completions_provider`, we check if there's a `completion_id`
before sending either an accepted or discard completion event. I don't
see a similar construct in the `copilot_completions_provider` to
piggyback off of, so I begrudgingly introduced
`should_allow_event_to_send` and had it follow the same pattern that
`completion_id` does. Maybe there's a better way?
---
Adds events to supermaven suggestions. Makes "CopilotEvents" generic ->
"InlineCompletionEvents".
Release Notes:
- N/A
Joseph T. Lyons created
55f08c0
assistant: Update current project context to work with Cargo workspaces (#11935)
This PR updates the current project context to work with Cargo workspaces. Release Notes: - N/A
Marshall Bowers created
f867228
Add prompt library (#11910)
This PR adds a Prompt Library to Zed, powering custom prompts and any
default prompts we want to package with the assistant.
These are useful for:
- Creating a "default prompt" - a super prompt that includes a
collection of things you want the assistant to know in every
conversation.
- Adding single prompts to your current context to help guide the
assistant's responses.
- (In the future) dynamically adding certain prompts to the assistant
based on the current context, such as the presence of Rust code or a
specific async runtime you want to work with.
These will also be useful for populating the assistant actions typeahead
we plan to build in the near future.
## Prompt Library
The prompt library is a registry of prompts. Initially by default when
opening the assistant, the prompt manager will load any custom prompts
present in your `~/.config/zed/prompts` directory.
Checked prompts are included in your "default prompt", which can be
inserted into the assitant by running `assistant: insert default prompt`
or clicking the `Insert Default Prompt` button in the assistant panel's
more menu.
When the app starts, no prompts are set to default. You can add prompts
to the default by checking them in the Prompt Library.
I plan to improve this UX in the future, allowing your default prompts
to be remembered, and allowing creating, editing and exporting prompts
from the Library.
### Creating a custom prompt
Prompts have a simple format:
```json
{
// ~/.config/zed/prompts/no-comments.json
"title": "No comments in code",
"version": "1.0",
"author": "Nate Butler <iamnbutler@gmail.com>",
"languages": ["*"],
"prompt": "Do not add inline or doc comments to any returned code. Avoid removing existing comments unless they are no longer accurate due to changes in the code."
}
```
Ensure you properly escape your prompt string when creating a new prompt
file.
Example:
```json
{
// ...
"prompt": "This project using the gpui crate as it's UI framework for building UI in Rust. When working in Rust files with gpui components, import it's dependencies using `use gpui::{*, prelude::*}`.\n\nWhen a struct has a `#[derive(IntoElement)]` attribute, it is a UI component that must implement `RenderOnce`. Example:\n\n```rust\n#[derive(IntoElement)]\nstruct MyComponent {\n id: ElementId,\n}\n\nimpl MyComponent {\n pub fn new(id: impl Into<ElementId>) -> Self {\n Self { id.into() }\n }\n}\n\nimpl RenderOnce for MyComponent {\n fn render(self, cx: &mut WindowContext) -> impl IntoElement {\n div().id(self.id.clone()).child(text(\"Hello, world!\"))\n }\n}\n```"
}
```
Release Notes:
- N/A
---------
Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
Nate Butler and Marshall Bowers created
6237e5e
Stop sending hangs to slack for a bit (#11933)
Release Notes: - N/A
Conrad Irwin created
44105e1
Upload panics via collab instead of zed.dev (#11932)
Release Notes: - N/A
Conrad Irwin created
decfbc6
Disallow multiple save modals for the same pane item (#11931)
Fixes https://github.com/zed-industries/zed/issues/10192 Release Notes: - Fixed multiple save modals appearing for the same file being closed ([10192](https://github.com/zed-industries/zed/issues/10192))
Kirill Bulatov created
6513886
Don't scale context menus in editors with buffer font size (#11930)
With the changes in #11817, context menus within editors would get scaled by the `buffer_font_size` instead of the `ui_font_size`. This seems incorrect, as it results in context menus being sized inconsistently depending on what context they originate from. This PR makes it so that all context menus scale based on the `ui_font_size`. ### Before <img width="1474" alt="Screenshot 2024-05-16 at 2 43 19 PM" src="https://github.com/zed-industries/zed/assets/1486634/a5be8113-ae24-44ad-a2e9-61105e1fcc9e"> ### After <img width="1095" alt="Screenshot 2024-05-16 at 2 43 01 PM" src="https://github.com/zed-industries/zed/assets/1486634/3a8d51cf-fc91-4743-8f44-78344028e447"> Release Notes: - Changed context menus in editors to no longer scale with `buffer_font_size`.
Marshall Bowers created
53815af
Fix small markdown typo in Windows docs (#11888)
Fixed a small issue in the windows docs where a note wasn't displaying correctly Release Notes: - N/A
Justy created
5596a34
Wayland: Implement text_input_v3 and xkb compose (#11712)
Release Notes:
- N/A
Fixes #9207
Known Issues:
- [ ] ~~After launching Zed and immediately trying to change input
method, the input panel will appear at Point{0, 0}~~
- [ ] ~~`ime_handle_preedit` should not trigger `write_to_primary`~~
Move to other PR
- [ ] ~~Cursor is visually stuck at the end.~~ Move to other PR
Currently tested with KDE & fcitx5.
Fernando Tagawa created
fdadbc7
Add `WithRemSize` element (#11928)
This PR adds a new `WithRemSize` element to the `ui` crate. This element can be used to create an element tree that has a different rem size than the base window. `WithRemSize` can be nested, allowing for subtrees that have a different rem size than their parent and their children. <img width="912" alt="Screenshot 2024-05-16 at 2 25 28 PM" src="https://github.com/zed-industries/zed/assets/1486634/f599cd9f-c101-496b-93e8-06e570fbf74f"> Release Notes: - N/A
Marshall Bowers created
13bbaf1
Use `UpdateGlobal` accessors in more places (#11925)
This PR updates a number of instances that were previously using `cx.update_global` to use `UpdateGlobal::update_global` instead. Release Notes: - N/A
Marshall Bowers created
c1e291b
gpui: Improve `Global` ergonomics (#11923)
This PR adds some ergonomic improvements when working with GPUI `Global`s. Two new traits have been added—`ReadGlobal` and `UpdateGlobal`—that provide associated functions on any type that implements `Global` for accessing and updating the global without needing to call the methods on the `cx` directly (which generally involves qualifying the type). I looked into adding `ObserveGlobal` as well, but this seems a bit trickier to implement as the signatures of `cx.observe_global` vary slightly between the different contexts. Release Notes: - N/A
Marshall Bowers created
1b26160
Add basic proxy settings (#11852)
Adding `proxy` keyword to configure proxy while using zed. After setting the proxy, restart Zed to acctually use the proxy. Example setting: ```rust "proxy" = "socks5://localhost:10808" "proxy" = "http://127.0.0.1:10809" ``` Closes #9424, closes #9422, closes #8650, closes #5032, closes #6701, closes #11890 Release Notes: - Added settings to configure proxy in Zed --------- Co-authored-by: Jason Lee <huacnlee@gmail.com>
张小白 and Jason Lee created
90b631f
tailwind: Allow configuring custom tailwind server build (#11921)
This adds the ability to configure the `tailwindcss-language-server`
integration to use a custom build of the server.
Example configuration in Zed `settings.json`:
```json
{
"lsp": {
"tailwindcss-language-server": {
"binary": {
"arguments": [
"/Users/username/tailwindcss-intellisense/packages/tailwindcss-language-server/bin/tailwindcss-language-server",
"--stdio"
]
}
}
}
}
```
This will cause Zed to use its own Node version and run it with the
given arguments.
**Note**: you need to provide `--stdio` as the second argument!
It's also possible to use a custom Node binary:
```json
{
"lsp": {
"tailwindcss-language-server": {
"binary": {
"path": "/Users/username/bin/my-node",
"arguments": [
"/Users/username/tailwindcss-intellisense/packages/tailwindcss-language-server/bin/tailwindcss-language-server",
"--stdio"
]
}
}
}
}
```
This is *super handy* when debugging the language server.
Release Notes:
- Added ability to configure own build of `tailwindcss-language-server`
in Zed settings. Example:
`{"lsp":{"tailwindcss-language-server":{"binary":{"arguments":["/absolute/path/to/tailwindcss-language-server/bin/tailwindcss-language-server",
"--stdio" ]}}}}`
Thorsten Ball created
a414b16
python: Add highlighting to variables (#11851)
Krzysztof Witkowski created
9c02239
chat: Only autocomplete active people (#11892)
Release Notes: - chat: Updated name autocompletion to only consider active users --------- Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
Conrad Irwin and Marshall Bowers created
178ffab
theme: Properly merge `SyntaxTheme` styles to allow for partial overrides (#11911)
This PR improves the merging behavior for the `SyntaxTheme` such that user-provided values get merged into the base theme. This makes it possible to override individual styles without clobbering the unspecified styles in the base theme. Release Notes: - Improved merging of `syntax` styles in the theme.
Marshall Bowers created
4ba57d7
Make `SyntaxTheme::new_test` only available in tests (#11909)
This PR addresses a TODO comment by making `SyntaxTheme::new_test` only available in tests. We needed to make it available when the `test-support` feature was enabled for it to be used in tests outside of the `theme` crate. Release Notes: - N/A
Marshall Bowers created
f2e7c63
editor: Add Cut, Copy, and Paste actions to the context menu (#11878)
Hi, I saw someone on Twitter mentioned that missing Cut, Copy and Paste actions in the context menu in the editor block them from using Zed. It turns out that resolving this issue is simply a matter of adding these actions to the mouse context menu. To keep items in the context menu grouped, I placed them at the top of the menu with a separator at the end. Let me know if that's OK. Thanks! Here is the screenshot:  Release Notes: - Added "Cut", "Copy", and "Paste" actions to the context menu ([#4280](https://github.com/zed-industries/zed/issues/4280)).
Vitaly Slobodin created
8c681d0
lsp: Use itemDefaults if sent along with completion items (#11902)
This fixes #10532 by properly making use of `itemDefaults.data` when that is sent along next to completion `items`. With this line here we tell the language server that we support `data` in `itemDefaults`, but we actually never checked for it and never used it: https://github.com/zed-industries/zed/blob/a0d7ec9f8e70799163313767b5a8bc34d9e4aa1b/crates/lsp/src/lsp.rs#L653 In the case of `tailwindcss-language-server` that means that most of the items it returns (more than 10k items!) were missing the `data` attribute, since the language server thought it can send it along in the `itemDefaults` (because we advertised our capability to use it.) When we then did a `completionItem/resolve`, we would not send a `data` attribute along, which lead to an error on the `tailwindcss-language-server` side and thus no documentation. This PR also adds support for the other `itemDefaults` that could be sent along and that we say we support: https://github.com/zed-industries/zed/blob/a0d7ec9f8e70799163313767b5a8bc34d9e4aa1b/crates/lsp/src/lsp.rs#L650-L653 `editRange` we handle separately, so this PR only adds the other 3. Release Notes: - Fixed documentation not showing up for completion items coming from `tailwindcss-language-server`. ([#10532](https://github.com/zed-industries/zed/issues/10532)). Demo: https://github.com/zed-industries/zed/assets/1185253/bc5ea0b3-7d83-499f-a908-b0d2a1db8a41
Thorsten Ball created
9969d6c
Fix: Missing token count for GPT-4o model. (bumps tiktoken-rs to v0.5.9) (#11893)
Fix: this makes sure we have token counts for the new GPT-4o model. See: https://github.com/zurawiki/tiktoken-rs/releases/tag/v0.5.9 Release Notes: - Fix: Token count was missing for the new GPT-4o model. (I believe this should go in a 0.136.x release)
Toon Willems created
8c8c176
docs: Fix quote in default.json (#11900)
Release Notes: - N/A
Jason Lee created
58919e9
eslint: Change default configuration to fix errors (#11896)
Without this, we'd get constant errors when typing something with ESLint
enabled:
[2024-05-16T10:32:30+02:00 WARN project] Generic lsp request to node
failed: Request textDocument/codeAction failed with message: Cannot read
properties of undefined (reading 'disableRuleComment')
[2024-05-16T10:32:30+02:00 ERROR util]
crates/project/src/project.rs:7023: Request textDocument/codeAction
failed with message: Cannot read properties of undefined (reading
'disableRuleComment')
[2024-05-16T10:32:31+02:00 WARN project] Generic lsp request to node
failed: Request textDocument/codeAction failed with message: Cannot read
properties of undefined (reading 'disableRuleComment')
[2024-05-16T10:32:31+02:00 ERROR util]
crates/project/src/project.rs:7023: Request textDocument/codeAction
failed with message: Cannot read properties of undefined (reading
'disableRuleComment')
This is fixed by changing the default settings for ESLint language
server to have those fields.
I don't think we need to make these configurable yet. These are defaults
that multiple other plugins also use:
- vscode-eslint:
https://sourcegraph.com/github.com/microsoft/vscode-eslint@4d9fc40e71c403d359beaccdd4a6f8d027031513/-/blob/client/src/client.ts?L702-703
- nvim-lspconfig:
https://sourcegraph.com/github.com/neovim/nvim-lspconfig@a27179f56c6f98a4cdcc79ee2971b514815a4940/-/blob/lua/lspconfig/server_configurations/eslint.lua?L94-101
- coc-eslitn:
https://sourcegraph.com/github.com/neoclide/coc-eslint@70eb10d294e068757743f9b580c724e92c5b977d/-/blob/src/index.ts?L698:17-698:35
Release Notes:
- Changed the default ESLint configuration to include the following in
order to silence warnings/errors: `{"codeAction": {
"disableRuleComment": { "enable": true, "location": "separateLine", },
"showDocumentation": { "enable": true } }}`
Thorsten Ball created
a0d7ec9
Fix repeatedly docking project panel (#11884)
Close: #11808 , #9688 Release Notes: - N/A
CharlesChen0823 created
ba8aba4
hotfix for collab crashes (#11885)
Release Notes: - N/A
Conrad Irwin created
66e8739
assistant: Factor `RecentBuffersContext` logic out of `AssistantPanel` (#11876)
This PR factors some more code related to the `RecentBuffersContext` out of the `AssistantPanel` and into the corresponding module. We're trying to strike a balance between keeping this code easy to evolve as we work on the Assistant, while also having some semblance of separation/structure. This also adds the missing functionality of updating the remaining token count when the `CurrentProjectContext` is enabled/disabled. Release Notes: - N/A --------- Co-authored-by: Max <max@zed.dev>
Marshall Bowers and Max created
cb430fc
Autodetect parser name with prettier by default (#11558)
Closes https://github.com/zed-industries/zed/issues/11517 * Removes forced prettier parser name for languages, making `auto` command to run prettier on every file by default. * Moves prettier configs away from plugin language declarations into language settings Release Notes: - N/A
Kirill Bulatov created
52c70c1
emmet: release 0.0.3 (#11873)
Includes: #10779 Release Notes: - N/A
Piotr Osiewicz created
1651cdf
ruby: Use two spaces per indentation level (#11869)
Hello, this pull request changes the indentation level for Ruby language from 2 spaces to the most used setting in the Ruby world: 2 spaces per indentation level. This setting is mentioned in the [Ruby style guide from the Rubocop (Ruby linter and formatter) team](https://rubystyle.guide/#spaces-indentation) and/or in another popular Rubocop configuration tool - [`standardrb`](https://github.com/standardrb/standard/blob/main/config/base.yml#L233) Thanks! Release Notes: - N/A
Vitaly Slobodin created
a1e5f6b
windows: Use `DwmFlush()` to trigger vsync event (#11731)
Currently , on Windows 10, we used a `Timer` to trigger the vsync event, but the `Timer`'s time precision is only about 15ms, which means a maximum of 60FPS. This PR introduces a new function to allow for higher frame rates on Windows 10. And after reading the codes, I found that zed triggers a draw after handling mouse or keyboard events, so we don't need to call draw again when we handle `WM_*` messages. Therefore, I removed the `invalidate_client_area` function. Release Notes: - N/A
张小白 created
4ae3396
Make primary clipboard Linux only (#11843)
I guess only Linux supports the primary clipboard. Release Notes: - N/A
张小白 created
1c62839
Add missing linux dependencies for compiling openssl on Fedora (#11857)
Release Notes: - N/A
yodatak created
b7cf304
Remove 2 removal (#11867)
Release Notes: - N/A
Conrad Irwin created
247825b
Deploy install.sh to cloudflare (#11866)
Release Notes: - N/A
Conrad Irwin created
f7c5d70
macOS: Support all `OpenType` font features (#11611)
This PR brings support for all `OpenType` font features to `macOS(v10.10+)`. Now, both `Windows`(with #10756 ) and `macOS` support all font features. Due to my limited familiarity with the APIs on macOS, I believe I have made sure to call `CFRelease` on all variables where it should be called. Close #11486 , and I think the official website's [documentation](https://zed.dev/docs/configuring-zed) can be updated after merging this PR. > Zed supports a subset of OpenType features that can be enabled or disabled for a given buffer or terminal font. The following OpenType features can be enabled or disabled too: calt, case, cpsp, frac, liga, onum, ordn, pnum, ss01, ss02, ss03, ss04, ss05, ss06, ss07, ss08, ss09, ss10, ss11, ss12, ss13, ss14, ss15, ss16, ss17, ss18, ss19, ss20, subs, sups, swsh, titl, tnum, zero. https://github.com/zed-industries/zed/assets/14981363/44e503f9-1496-4746-bc7d-20878c6f8a93 Release Notes: - Added support for **all** `OpenType` font features to macOS.
张小白 created
f47bd32
v0.137.x dev
Joseph T. Lyons created
c3c4e37
Do not select target range going to definition (#11691)
Release Notes: -Fixed #11347 , do not select target range going to definition. Just place the cursor at the start of target range.
Congyu created
d3dfa91
Fix aside affecting parent popover height (#11859)
Release Notes: - Fixed the size of the completions menu changing based on the size of the aside ([#11722](https://github.com/zed-industries/zed/issues/11722)). https://github.com/zed-industries/zed/assets/30776250/c67e6fef-20f2-4dc5-92b3-09bb73f874a7 https://github.com/zed-industries/zed/assets/30776250/7467b8ee-6e66-42d7-a8cc-2df11df58c5e --------- Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
loczek and Marshall Bowers created
4ff1ee1
tasks: minor fixes to docs (#11862)
Release Notes: - N/A
Piotr Osiewicz created
1b9014b
tailwind: Allow Tailwind LS to be used in Scala (#11858)
This fixes the issue mentioned here:
https://github.com/zed-industries/zed/issues/5830#issuecomment-2111947083
In order for other languages to work, we need to pass the following
settings along to the Tailwind language server.
With the following Zed settings, it then also works for Scala:
```json
{
"languages": {
"Scala": {
"language_servers": ["tailwindcss-language-server"]
},
},
"lsp": {
"tailwindcss-language-server": {
"settings": {
"includeLanguages": {
"scala": "html"
},
"experimental": {
"classRegex": ["[cls|className]\\s\\:\\=\\s\"([^\"]*)"]
}
}
}
}
}
```
Release Notes:
- Added ability to configure settings for `tailwindcss-language-server`,
namely the `includeLanguages` and `experimental` objects.
**NOTE**: I have only tested that the language server boots up for Scala
files and that the settings are forwarded correctly. I don't have a
Scala+Tailwind project with which to test that the actual completions
also work.
cc @nguyenyou
Thorsten Ball created
f42f443
Remove stray `println!` (#11855)
This PR removes a stray `println!` left over from #11844. Release Notes: - N/A
Marshall Bowers created
a59a388
tasks: Wire through click handlers in new tasks modal (#11854)
:facepalm: Spotted by @SomeoneToIgnore Release Notes: - N/A
Piotr Osiewicz created
43d79af
metal renderer: Increase instance buffer size dynamically (#11849)
Previously, we had an instance buffer pool that could only allocate buffers with a fixed size (hardcoded to 2mb). This caused certain scenes to render partially, e.g. when showing tens of thousands of glyphs on a big screen. With this commit, when `MetalRenderer` detects that a scene would be too large to render using the current instance buffer size, it will: - Clear the existing instance buffers - Allocate new instance buffers that are twice as large - Retry rendering the scene that failed with the newly-allocated buffers during the same frame. This fixes #11615. Release Notes: - Fixed rendering issues that could arise when having large amounts of text displayed on a large display. Fixed by dynamically increasing the size of the buffers used on the GPU. ([#11615](https://github.com/zed-industries/zed/issues/11615)). Before: https://github.com/zed-industries/zed/assets/1185253/464463be-b61c-4149-a417-01701699decb After: https://github.com/zed-industries/zed/assets/1185253/4feacf5a-d862-4a6b-90b8-317ac74e9851 Co-authored-by: Antonio <me@as-cii.com>
Thorsten Ball and Antonio created