Wez Furlong writes about WezTerm, his GPU-accelerated, cross-platform terminal emulator and multiplexer, and related terminal features.
Commenters recommend WezTerm as fast, easy to configure with Lua, and a strong Rust-based terminal with built-in multiplexing.
If you code in Java, and like TUI (console type applications), then you might enjoy Jexer: https://gitlab.com/klamonte/jexer
I started Jexer in 2013, and off-and-on it's gotten better. I think my favorite part has been crossing paths with other terminal emulator ecosystem folks over the last few years. This release brings a few prettified effects inspired by other projects that you are all hopefully quite familiar with (notcurses, chafa, and vtm):
* Translucent windows, including images under/over each other and text.
* Animated/pulsing text
* Animated gifs
* A new XtermVideoPlayer example that uses ffmpeg/JavaCV to play movies inside a text-draggable window. (No audio though.)
* New button styles: round, diamond, left/right arrows. The button ends and shadows are drawn with images so specific font support is not required.
* A _much_ faster and _much_ higher quality sixel encoder.
* Different window border styles: single, double, none, and rounded corners.
* A femme theme option.
Some screenshots are posted here: https://twitter.com/AutumnMeowMeow/status/1489228917030502407
It's on maven and Sourceforge.
<dependency>
<groupId>com.gitlab.klamonte</groupId>
<artifactId>jexer</artifactId>
<version>1.6.0</version>
</dependency>
Terminals that are known to work include:
* xterm https://invisible-island.net/xterm/ - X11 - Linux
* contour https://github.com/contour-terminal/contour - OpenGL - Linux, OS/X, Windows
* foot…
Thanks for giving it a try! I recently moved house and have limited mental bandwidth while I'm setting up the new place--since I don't want to drop the ball on resolving these, I'd appreciate it if you would file separate GitHub issues for those items you'd like to follow up on so that I can find and work through them as time allows!
1. Tab titles are set using escape sequences, typically OSC 0, 1 or 2. You can find examples for configuring shells to emit those online, for example: https://superuser.com/questions/84710/window-title-in-bash
Terminal.app defaults to snooping the local process list to set titles; wezterm doesn't do this as the terminal may not be local (eg: could be remote ssh or multiplexer session) and using escape sequences gives definitive control.
2. I'd love to troubleshoot this with you; please file an issue!
3. There are currently a set of open and related IME/macOS issues at the moment. You may want to try looking at https://wezfurlong.org/wezterm/config/keys.html#macos-left-and-right-option-key and fiddle with those options, but you may be left disappointed until the root of those issues are resolved!
4. This is a consequence of being a cross platform program rather than a macOS-first application. There isn't a way to keep the GUI running without any Windows today. Perhaps in the future?
I originally installed WezTerm because I switched from Kubuntu to Ubuntu and wanted some of the features of Konsole (infinite scrollback, searching the scrollback) without actually installing Konsole (I know you can install it under Gnome too, but it just felt... wrong). And yes, it instantly grew on me, although (as I can see from this article) I have barely scratched the surface of its configurability. My only complaint is that its many features are not really discoverable. Sure, the documentation is really good, and the author is very engaged and helpful, but... one example: I looked up how to select large blocks of text using just the keyboard, I did it once, said to myself "I have to remember this!", then promptly forgot it and now I'm back to selecting text with the mouse like an absolute noob because all in all for the few times I do this it's faster than googling that documentation page again...
(in case you're wondering, the page I mean is https://wezfurlong.org/wezterm/copymode.html, not https://wezfurlong.org/wezterm/quickselect.html, which sounds like what I was looking for, but is something completely different - also very handy and a great idea, but not what I was after)
Not out of the box, but I use Hammerspoon to implement a global hotkey to show WezTerm: https://github.com/jaminthorns/environment/blob/a609e81f3f4179d3c60b60bd729e6424916d3655/config/hammerspoon/init.lua#L21-L22
I don't have a keybinding to hide, but you could easily achieve that by inspecting the active window with `hs.window.focusedWindow()`/`hs.window.frontmostWindow()` and making the behavior conditional based on the application: https://www.hammerspoon.org/docs/hs.window.html#focusedWindow
In WezTerm, you can control whether the terminal is always on top with the `ToggleAlwaysOnTop` action: https://wezfurlong.org/wezterm/config/lua/keyassignment/ToggleAlwaysOnTop.html
Just wanted to note for everybody who really loves this feature. There is some options here though
Wezterm terminal supports multiplexing from the box: https://wezfurlong.org/wezterm/multiplexing.HTML
Also, there is Hyper terminal, and standalone protocol to implement multiplexing https://www.reddit.com/r/commandline/comments/q5mj11/htm_a_cross_platform_alternative_to_tmux_control/
If you know other options, please share.
I work in windows, but at home I use macos, so I stick to wezterm. I use it with single config for both platforms (config is written in Lua)
If you want to add "New Window with Profile..." to WezTerm, you can probably hack something into either `launch_menu` [1] (for starting different shells), or `augment-command-palette` [2] (for adding items to the command palette).
1. https://wezfurlong.org/wezterm/config/lua/config/launch_menu.html?h=launch
2. https://wezfurlong.org/wezterm/config/lua/window-events/augment-command-palette.html
Yeah, it takes some screwing around, but programming extremely specific features just the way you want them is peak WezTerm experience.