sedwards2009 / extraterm

The swiss army chainsaw of terminal emulators
https://extraterm.org
MIT License
2.49k stars 115 forks source link

Replace Electron UI with Qt #348

Open sedwards2009 opened 3 years ago

sedwards2009 commented 3 years ago

Here are some technical details about how this transition is going to work.

The core language used will remain TypeScript/JavaScript running on the fast V8 engine via nodejs. This is good news and means that large chunks of the Electron based Extraterm version can be moved straight over and to the Qt version. I'll be using NodeGui as the bindings connecting V8 to Qt's libraries. Qt is a very mature set of libraries, but it is very C++ oriented which makes connecting to other languages difficult. NodeGui itself though isn't mature and hasn't reached a stable version 1.0 yet. Normally this would be a showstopper but I have an ace up my sleave as I've worked with Qt in the past and also have a quite a lot of experience with connecting Qt related classes to other languages like Python and JavaScript. To NodeGui's credit, it is a fairly simple binding of C++ to V8 which makes some smart trade offs regarding how to connect Qt to JS while avoiding the tarpit of trying to replicate all of Qt's C++ API. NodeGui is quite easy to get hacking on and I've already submitted a number of PRs to NodeGui to expand it.

Here are some random thoughts about certain features and what will happen to them. Many are high priority, some will be put in the freezer šŸ§Š for later, and some will be axed šŸŖ“.

I'm open to feedback about this list and its order.

MostHated commented 3 years ago

One feature I would like to throw into the list of "eventually's" is some sort of enhanced file management, to see the local files and remote files to down/upload to the remote pwd. I am definitely interested to see what you have planned overall with the new UI. I just hope it feels and acts as "modern" as extraterm does. I made an addon for a 3d application called Houdini using Qt and I felt it always felt sort of... rigid? hard to explain, I guess.

Searcher ![image](https://user-images.githubusercontent.com/3442753/123573209-21abbe80-d793-11eb-9e33-b31613a024f8.png)

It could be, though, because it was Qt with Python, but I guess Qt is Qt when it comes to the actual interface objects and such. Either way, I am sure it will be good.

zakius commented 2 years ago

regarding splits and panes I expect people may want to use them with toggle window hotkey, in such case relying on system window manager wouldn't work

ashb commented 2 years ago

He @sedwards2009 I've been watching this QT work eagerly, is it at the stage now where you would like bug reports of things I notice that don't work right? (For example, I've noticed problems with using "cmd"/super as a keyboard shortcut modifier on Linux)

Edit: the fix for it appears easy enough, so I opened a PR https://github.com/sedwards2009/extraterm/pull/379

sedwards2009 commented 2 years ago

@ashb Yes, for a lot of the basics which have been in there a while, it is a good time for bug reports.

creativeworkssystems commented 1 year ago

I installed the QT version last night on a new machine, and I've noticed it' doesn't like starting after a crash, every time it crashes, the only way to make it start again is to completely delete the config folder even returning a previous config won't make the app start again, it has to be removed.

sedwards2009 commented 1 year ago

@creativeworkssystems Which OS are you using?

creativeworkssystems commented 1 year ago

Windows 11, latests updates installed. ETQT v 65.0

sidenote : hate not having accoutn switching on github, I end up commenting with a work account half the time :P

mzjp2 commented 1 year ago

It's a shame that split panes are going to be axed (is this definite?). I looked at this project because it was meant to be my iterm replacement on Ubuntu after wezterm was too slow (needs hardware acceleration), but the lack of splits is a deal breaker for me :(

sedwards2009 commented 1 year ago

@mzjp2 Split panes aren't totally out of the question, but they are somewhat low on the list compared to better support for multiple windows and moving tabs in and out of windows. I'm open to "cheap" ways of adding splits and panes back in. Something like https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System might be a solution, and it might also help handle the cases of moving tab in/out of windows (which is high on the TODO list).

sedwards2009 commented 1 year ago

FYI, for the next release I'm working on applying Qt Advanced Docking System to Extraterm. It will mean that having an option for windows without the native title bar won't be possible any more though. But that is an acceptable trade off.

MostHated commented 1 year ago

I dunno, I hate the stock titlebar, and I like using this because it doesn't have it.

sedwards2009 commented 1 year ago

@MostHated I'm pretty deep into the Qt Advanced Docking System related work. I did notice that on Linux at least there is some support for a custom window title bar. As long as you're on Linux then there is some hope.

MostHated commented 1 year ago

I am indeed, pop_os. At the same time, though, I am just one fella. I would say it is really worth it for one person, if it is a huge undertaking.

sedwards2009 commented 9 months ago

@MostHated FYI, it has taken a while to get to, but I'm working on the custom window decorations. It should work on Windows too. On Linux with Wayland at least you're kind of encouraged to do your own window decorations because Wayland doesn't really support the concept of "native" or server side decorations.