zed-industries / zed

Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
https://zed.dev
Other
47.27k stars 2.73k forks source link

Feature Request: Make UI more customizable #14602

Open alexlnkp opened 2 months ago

alexlnkp commented 2 months ago

Check for existing issues

Describe the feature

I think others would agree that having a more customizable UI is something that a lot of people want. As a user, I'd love to be able to customize my IDE, not by just adding NEW stuff, but by modifying what existing stuff I would, and wouldn't like to keep. Case and point, I think a lot of people can agree with me on the fact that not even half of Zed users are using it solely because it has chatgpt/LLM/copilot built-in. In fact, I'd argue that it's just pure bloat that shouldn't be included by default. However, this feature request is more about general customization and modification of the IDE users can perform, like hiding specific buttons, displaying more/less info on the dock, replacing hamburger menu with something else, etc.

The way I think would be the best to implement that is doing it the way VSCode/VSCodium does it, by just having options on what to display where. Of course you could go and do it in fancier way, for example: like Librewolf, which allows users to build/modify the UI on-the-spot by clicking a single button and then just drag-n-dropping stuff the user wants to keep or discard.

If applicable, add mockups / screenshots to help present your vision of the feature

Let's say, I'd like to change this default UI layout 1

Maybe I, the user, would like to change the UI to not have a seemingly redundant panel below the file tabs/buffers, like so 2

Not all of the users would like these buttons either, since those perform the same action as some hotkeys, which means that those who use keyboard for navigation will still be forced to stare at these image

So, let's say a user would also want to get rid of those, here's my proposition on the look 3

Now, displaying the name of the file opened TWICE seems a bit excessive for my taste, especially when only a SINGLE file is opened. Let's say, for cases when just ONE file is opened, it will only be highlighted in the tree-sitter. This will make the UI look more clean, in my opinion 4

Let's take a look at these buttons in the now empty panel which is supposed to display opened tabs/buffers. All of these (except the last one) have hotkeys that can be used instead of manually clicking on them with a mouse, which is much more appealing to me personally; therefore, I believe there should also be options on configuring those as well, as I don't see any scenario in which I'll use these buttons instead of regular hotkeys on a keyboard. image

The last button in particular seems to be completely useless for someone like me, and the hotkey under which it is bound genuinely confuses me 5

Now, the last bunch are probably the less significant ones, but that doesn't mean they should be ignored. For instance, the hamburger menu contains only the commands which can also be executed by simply using command palette (CTRL+SHIFT+P OR F1), therefore, having an option to simply hide it would also be very nice. image

Now we can notice another problem with repetitiveness! The project's name is repeated twice! I understand the idea behind showing opened projects as a folder within the tree-sitter, however if You are working on a single project at a time, with only the single project open, this just seems extremely redundant. So ONLY FOR CASES WHEN JUST A SINGLE PROJECT IS OPENED, displaying project as a folder in the tree-sitter doesn't make too much sense. I believe changing the way projects are shown in the tree-sitter to be like this will look more clean for people that work on one project at a time image

Now, if we can get rid of the three buttons (the ones on the tabs dock), we can consider working on the open tabs/buffers dock. We could theoretically embed it within the top most dock, which would save a lot of space 7

We could also add an extra touch of centering the project name, just as a flex image

Now, all of this can only be possible if UI customization becomes a thing, which I hope eventually does. I personally would prefer working in the mocked up version of the Zed made by me more than I'd prefer working in the stock UI version. Just as a finishing part, here's the before and after the "customization" of Zed I'd personally perform if I could:

Conclusion

While in reality I barely touched on customization possibilities that I and others would enjoy to have, I believe it is a valid thing to want in an IDE, even if the customization ends up just being able to hide the stock buttons or re-arrange them, which still would be a huge plus, since as I explained earlier, some of the stuff just seems redundant and some features are used by just a handful of others, such as the LLM/copilot thing, which, mind you, constantly takes some portion of your IDE (no matter how small it is), despite You possibly not even planning on ever using it.

notpeter commented 2 months ago

There's a lot here. Filing as a single issue makes it difficult to parse, but as I read it you're requesting (at least) the following:

We currently support the following in your settings.json:

  "toolbar": {
    // Whether to show breadcrumbs.
    "breadcrumbs": false,
    // Whether to show quick action buttons.
    "quick_actions": false,
    // Whether to show the Selections menu in the editor toolbar
    "selections_menu": false
  },

I think some of your ideas could be implemented as additional settings options for hiding toolbar icons, while others are less likely to be implemented (hiding the hamburger, centering the workspace indictor/selector, etc).

You may be interested in:

P.S. When referring to the "project panel" you incorrectly used the phrase "tree-sitter" (understandable, they are both "trees") but that's a whole different thing.

bbb651 commented 2 months ago

Hiding forward/back already exists as well, you can set tab_bar.show_nav_history_buttons to false.