But the straw that broke my back with using kitty was, I'd end up encountering issues or trying to recreate some of iTerm2's features, only to end up time and again on kitty's maintainer's terse and dismissive comments.
e.g. IIRC his answer to "How do I set up tmux with kitty?" was something like "Don't, tmux is dumb" and closing it. Eventually I gave up.
Heh, I switched from Kitty to Wezterm due to the exact same types of comments from the maintainer. It's his project of course, and he's a great programmer, but some humility wouldn't hurt.
> the exact same types of comments from the maintainer.
Kovid really bugs me and is a reason I turned away from kitty too. I saw his character when looking up tmux issues. He's brash like Linus, but at least while Linus is calling you an idiot he'll tell you a better way to solve your problem. Kovid seems to think tmux is really about splitting panes and peoples' main draw to it isn't about persistence...Oh, and kitty phones home
If you want drama:
tmux:
- https://github.com/kovidgoyal/kitty/issues/391
Phone Home: - https://github.com/kovidgoyal/kitty/pull/3544
- https://github.com/kovidgoyal/kitty/issues/2481
On a side note: I really don't trust devs who reply to issues and close them. I get wanting to remove the issue from the task list, but just set up an action for stale issues (which has an added advantage of pinging the user who may have just lost the message). Otherwise let the user close because they might have follow-up questions. It's just disrespectful and always a red flag. I know lots of users are dumb (I literally just got an issue on a research project with someone asking how they fine tune our model...), but noobs are wizards in training. You don't have to be nice, but don't be mean either. Plus, you'll just piss off people who could end up helping you. And if you don't want help, I expect your project to decay when you get bored. Definitely not what I want from a terminalThe people who had to deal with the Calibre setuid binaries fiasco in 2011 would probably disagree :) ( https://lwn.net/Articles/465311/ )
For those unfamiliar, that's a window tied to a show/hide keybinding which when shown floats above all other windows, making a terminal instantly available everywhere - a feature I could live without, but don't care to. I'd love to switch for all of WezTerm's other features, but without that it's simply a nonstarter for me.
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#focusedWindo...
In WezTerm, you can control whether the terminal is always on top with the `ToggleAlwaysOnTop` action: https://wezfurlong.org/wezterm/config/lua/keyassignment/Togg...
Except, when I started using WezTerm at the start of this year... omg, this guy is absolutely fantastic.
I have read scores of his posts and he's struck the perfect tone in every single one. Love this guy, really, he's awesome.
He spent half a day debugging a rather trivial issue with me and even sent me a custom build.
MailMate: https://freron.com/
I try not to knock the guy, given that kitty and calibre in particular are amazing programs, but I still think you've gotta keep that in mind when engaging.
FWIW, his conduct on the MobileRead forums where he answers questions from newbies and enhancement requests are far more polite and charitable. His ire seems to be reserved for fellow programmers.
wait... whut? No thanks, I like to customize things
For me, I've found Kitty quite configurable enough to have everything except the remote server thing. I used this as my guide: https://www.reddit.com/r/KittyTerminal/comments/z2p2sh/ditch...
I mostly like kitty but I’ve noticed that it takes a couple seconds to start up when I put my cpu down to 400Mhz. (Which might seem like an odd thing to do, but xterm handles it fine and, hey, why do we need billions of clock cycles to start up a terminal? That’s ridiculous).
I’ve tried Kitty a few times, since it has a few features I miss in iTerm2 (e.g. the “i3-gaps” aesthetics if you set the right flags, a plaintext config that is easier to sync, and its graphics and keyboard protocols have a wider ecosystem than iTerm2’s comparable features, and the “layout” feature).
But… I generally find that iTerm2 “just works” and requires little fiddling to get all the everyday stuff to work as I want, but I’ve been down many rabbit holes with my Kitty config. For now I’ve therefore stuck with iTerm2, but imagine that a well-configured Kitty might be nicer.
Is WezTerm a good middle ground?
What problems were you encountering? It's not hard to run tmux (and use all the keybindings with it) in kitty.
Also saw Wezterm pop up last week and definitely decided I'll give it a go here soon.
(Former avid Alacritty user but needed better modifier support for remote emacs.)
Also in case you wanted to bump up the priority of that bug, he does have github sponsors enabled.
Wes is right about wezterm domains though. The native domains feature and pane support I think will meet the needs of most.
(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)
It's useful out of the box but the superpower is that you can customise the regexes it matches. I've added one that finds all the filenames output by 'eza --icons' (\p{Co} matches the icon) so I can instantly type (by using shift+the quickselect letters) any filename after doing an ls (aliased to eza).
I happened to have stumbled upon here to compare those terminals on this site: https://terminaltrove.com/terminals/
Looks pretty useful to me or anyone else that wants to compare terminals.
One big use case I have is: mosh+tmux-like functionality from my macos laptop to my work Linux machine. I always have a session running so I can do things on my work machine from my Mac. It gives a re-connectable session plus panes and tabs so I can do work when I'm away from my desk. It's top notch.
My favorite and often overlooked feature is that wezterm is fully cross os, so if you work like me in Linux, macOS and Windows, then you can just learn wezterm and be done. I even share large parts of my terminal config across os:es.
I don't have enough evidence to create a good bug report, and I WezTerm has its own terminal multiplexing server ("ssh domains"), so it's probably not important enough to fix anyway. I don't want to install the WezTerm multiplexing server everywhere, and tmux is pretty much on all of the places that I ssh into already.
Other than that, WezTerm is great!
Anyone found a good setup that works for them?
I switched to Kitty, and while it has its share of issues, at least it works.
It's the first terminal to truly replace urxvt for me in terms of support and speed. Before I was running termite and kept urxvt as a backup for some odd situations where termite got buggy.
I should wezterm another look ...
"When enabled, vertical lines of pipe characters | will be interpreted as pane dividers (as in vim or emacs) and selection will wrap at them."
(For me, it's selecting text in irc.)
edit: rough, my bad. missed the via "in irc" part.
thanks!
I had really started to feel it slow down lately. It hit the breaking point when I was cmd-tab-ing and found myself waiting for more than a second just for the terminal to appear.
Looked around, evaluated a couple alternatives and none of them quite fit my taste. One terminal required an account/login to operate, which is a big no IMO, another was written in {Java,Type}Script so simple commands like `yes` would break it due to the async nature of streams in node.js.
I really like WezTerm so far. It's quite fast, very much configurable and comes with the theme I was configuring with iTerm2 out of the box (OneDark (base16)).
My only trouble with it was in the beginning when I had to add the configs for cmd-left and cmd-right in lua config, I really hoped they'd be in there with the defaults.
Let me guess, that's wrap and Tabby or extraterm respectively?
Then again, I should probably try WezTerm first.
Emacs uses Lisp in a similar way. What other applications use a programming language for their configuration?
Neovim of course also supports Vimscript, although writing anything more complex is much nicer in Lua.
Given that I do already use a window manager like sway, is there much else worthwhile compared to any other terminal emulator?
After switching employers I no longer have a Mac to run iTerm2 in. So I decided to simply reduce the number of apps I require by running my terminal inside Emacs. The emacs-libvterm project is excellent. These days I no longer need a terminal emulator app.
Btw one gotcha on macOS during setup is that the left Option/Alt key does not emit the usual special character mappings, but the right Option key does. You can configure that too!
Cheers Wez!
Unlike OP, I hardly use WezTerms features. I have hidden the tabs away and just use the old vim+tmux combo. So my config is just 25 lines. There was no weird colour interaction issue that alacrity+vim+tmux had (and there is a famous gist for). All which is to say I didn’t have to dive deep to migrate.
This article is convincing me to give it a second look.
!= goes to weird ≠ utf8 char. I like != better!
Command-K clears the scroll back but NOT the screen.
Updates:
config.harfbuzz_features = {"calt=0", "clig=0", "liga=0"}
Command-L
^ There's a host of built-in color schemes.
Wezterm with Zellij becomes amazing with how it just simply gets out of the way, even lets you remove window decorations entirely. I've heard Wezterm has a multiplexer too, but just haven't tried it.
You're in luck, the last half the post is about that.
Video demonstrating the speedup: https://x.com/fleetwood___/status/1807772624518316495
That being said, wezterm is about the only terminal I can use now (besides putty). I'm on a cursed setup, Windows with a Linux VM and whatever terminal I use it has to be able to directly ssh into the VM (NOT via ssh.exe), otherwise there's much worse latency/quirks due to stupid Windows conpty issues.
Currently it does not annoy me too much, but when I finally have time I think I'd try to fix it.
Personally I don't notice any typing latency in wezterm. I have p10k as a zsh theme and not really any 'plugins' beyond git for the terminal and use neovim+ also pretty much just got and CoC for an editor. I don't notice any latency when typing and, while not instant, still sub 200ms startup latency.
I vaguely remember my main requirement was being able to configure CMD+D and CMD+SHIFT+D as split panes vertically and horizontally as I wasn't willing to retrain my fingers to learn new keystrokes for that. Within a version of two after I switched (back then, those were weeks or less apart), all my complaints were resolved and I never looked back.
My config is fairly minimal, but perfect for my needs. What else can one want?
I try alts when they come up since I might like to use the same thing on macOS and Linux, but I've yet to try one that both has the right features and doesn't feel sluggish.
The author is not interested in trying to fix this issue, which is totally fine, as they point out font rendering is very subjective, but I'm also not willing to use a terminal that looks worse, even though I like many other things about it better.
Besides, if you're trying another terminal it's also a great excuse to try other things too!
I'm a fan of tools like these where you compare a series of option pairs (in this case font pairs) in succession until it spits out your most preferred option: https://www.codingfont.com/
P.S.: I am temporary back to Kitty in NixOS because I recently switched from Sway to Hyprland and the current release of WezTerm seems to be having some issues in Hyprland. But will switch back once this issue is solved, I know it is fixed in the main branch for example, but I would prefer to use nixpkgs cache instead of building it from source.
In terms of use-case, I just disable all its keybindings and use it as a tmux terminal. I admit I didn't look for solutions, but I just can't go away from tmux's session restoration capabilities.
It's very much designed and built for my specific needs on my specific desktop environments, so there's no promises that it'll work for you well ... or at all.
EDIT: the command is `tmux -uCC a` to connect to a tmux session, works locally and works over ssh. spawn the tmux session normally, disconnect, then connect via command mode for best results. you can still spawn a new one with just `tmux -uCC` but i have found i can get some issues when i spawn it in command mode vs attach in command mode.
Run tmux -CC on your remote server in your iterm2 and you’ll get native windows for tmux panels
That doesn't make it perfect. Mouse themes are applied inconsistently as I use Gnome on Wayland. It also seems to be a problem when using neovim, but I can't prove it clearly enough to want to file a bug with anyone. Besides, everything I need to do still works and I rarely use the mouse unless I am copying random gobs of text.
I am sticking with wezterm for the moment. I have no reason to leave it at this point and it helped me reduce the complexity of my stack a teeny bit.
maybe less fancy/modern but absolutely rock solid every time.
environment: fedora/wayland/gnome
just throwing this out if anyone wants to test an alternative it out.
Had the opportunity to work on a project together at work some years back and I can only aspire to be 1/10th as good of an engineer as him. A true hacker.
But I hit a snag. On macOS, it's standard that in any text window, to select everything for copying, you hit Command-a.
But Command-a in wezterm just printed an "a" character. What?
I spent a while looking in the docs and issues, but couldn't figure out how to Select All.
I don't think I should have to justify it, but in case someone's wondering - it's useful if you want to search or parse an entire Terminal session using some other process (eg, grep), or edit it, or just persist it for example.
Regardless of why, "Select All" is such a standard function it felt quite strange it wasn't suported out of the box.
e.g. I want to `cat` a file to make sure i've got the right one, but I accidentally cat a full 1gb sql backup rather than the tiny 50 line script I was expecting. Sometime later, I try to select all, copy, switch application, paste for some reason but now I'm stuck waiting for 1gb to copy over
Personally I'm a bit more cautious about copying from a terminal.
Either way if that's what you really want to do, you can check the repo to see how other people scripted it into wezterm:
I use the Embark color theme, which I don't see represented on the wezterm themes page: https://github.com/dmshvetsov/wezterm-embark-theme
I also like a slowly-blinking block cursor, a specific font, ligatures etc. Feel free to raid my config: https://github.com/pmarreck/dotconfig/blob/yolo/wezterm/wezt...
I love that I can use the same config on macOS and Linux as I use both machines often.
I spend a lot of time in a terminal and just use whatever’s there. Terminal.app or gnome-terminal. Before that it was xterm. Perhaps the only customization is modifier key on Mac as meta.
Okay, maybe for just a few minutes.
That's indeed one of its best features (despite the warts of the language) as you're not as limited in what you can do vs. the data serialization alternative
The built in multiplexing is like magic.
It looks nice just as a basic setup (key = value type stuff), but you can do really complex dynamic configurations with it (like the dark-mode config in the linked article).
Hammerspoon is another, you can do so many things with it - I replicated most of Rectangle/Manget with Hammerspoon+Lua myself and now I can do the minor tweaks I couldn't do with the pre-packaged apps.
EDIT: Just installed in on my Mac and here, I can't notice any difference between kitty (my current input latency baseline) and WezTerm. Good stuff! Not sure how Windows fares nowadays, though.
The Lua configuration is very intuitive as well.
I do get some indirect crashes when Xwayland crashes, which is rare. I had to disable Wayland support in wezterm because the window decorations aren't great yet.
My window manager (Sway) already requires enough wild incantations. If any, I really appreciate simple integration in the terminal.
A little more than 'foot' but not a lot. Tabs/panes, like you say. It gives some more granularity to the organization without a lot of new buttons to push.
I've taken most of the Tilix defaults through several! Currently Kitty... though I may try WezTerm.
Ideally fuzzy search of just the commands I’ve entered and not the full scroll history as some results take many hundreds of lines.
Is there a wezterm community where I can ask this and similar questions?
I need to look into all the advanced features.
https://wezfurlong.org/wezterm/multiplexing.html
Thanks for posting
I have it in iTerm, and I don't in WezTerm.
We can blame Apple if we want, but they are not going to implement this feature for us.
Curious what sort of features and other things you look for when looking or comparing terminals like WezTerm and the like?
What are your deal breakers and must haves of a terminal emulator?
I left iTerm because I couldn't configure it to my liking, although there are certainly ways to do it, i just couldn't. iTerm2 is certainly a good enough terminal, wezterm just somehow suits my needs better.
It feels like one of these "ricer" things like opening 9 terminals just to run cmatrix and screenfetch.
Granted it’s not meant to be edited directly but rather via the GUI, but yeah it’s possible to persist it if you want.
Does it support all the configurations?
https://gist.github.com/spartanatreyu/fe6d045c3113f27acaa509...
I added back the familiar option/cmd + arrow key navigation and cmd + click hyperlink behaviour.
There's also some tweaking to make it more similar to iterm's default behaviours (e.g. don't hide the mouse when you start typing).
And finally some personal visual tweaks which you can throw out and replace with your own.
I looked at WezTerm a long while ago, didn't even realize I'd already had it starred. Will try it out again soon. It's just another one of those things, that I prefer to use the same applications (if I can) on all the platforms I use.
Yeah, iTerm2 has a lot of other fancy features, but I just rarely or never used them, so don't really feel like I miss anything.
For example, I recently reduced my terminal startup time to 1/3 what it was by putting in some optimizations. I'll be able to benefit from that for basically forever.
... Ah, you develop on Windows? This tracks, then... All productivity, no aesthetics >..<
"If you've never spent hours ricing your OS, you have no heart. If you still do, you have no brain."