13 ms·
Wezterm – A GPU-accelerated cross-platform terminal emulator and multiplexer
- akvadrako 6y agoVery nice that this supports ligatures which is what I've been missing from alacritty.
- ninjin 6y agoYes, looking like Alacritty is far from supporting it as well [1]. Not that it usually bothers me and I really do not care for ligature-based coding fonts, but it can pop up in e-mails and filenames for things like umlauts. [1]: https://github.com/alacritty/alacritty/issues/50 https://github.com/alacritty/alacritty/issues/50
- imhoguy 6y agoUmlauts? How come one needs ligatures for umlauts as they are independent characters with own Unicode or even old ASCII set codes[0]. [0] https://resources.german.lsa.umich.edu/schreiben/unicode/ https://resources.german.lsa.umich.edu/schreiben/unicode/
- ninjin 6y agoYou do not need ligatures for umlauts, but that does not stop the odd software (or maybe user?) here and there refusing to do it the “sensible way”.
- hibbelig 6y agoI believe that Unicode has multiple representations for Latin characters with diacritics: ä can be represented as a single character, but it can also be represented as two characters, “a”, plus “add two dots to the previous character”. You can convert between these forms.
- square_usual 6y agoNo knock on people who spend their time working on Free Software, but I genuinely don't understand why discussion threads turn sour so quickly when it comes to terminal emulators and ligatures. Both in the linked thread and in the case of libvte [1] (a terminal emulator widget used in tons of popular emulators) the maintainers seem to be aggressively against ligatures. It's a shame because I can't find a single terminal emulator on Linux that is as usable as iTerm2, and not having ligatures is the biggest knock against most of them IMO. 1: https://bugzilla.gnome.org/show_bug.cgi?id=584160 https://bugzilla.gnome.org/show_bug.cgi?id=584160
- thristian 6y agoMost terminal emulators date back to a time when one byte of input occupied one character-cell on-screen. Since Unicode arrived with combining characters, terminals have adapted to N bytes of input occupying one character-cell, or under special circumstances (Chinese characters, emoji) two character-cells. Proper ligature support requires terminals to support N bytes of input mapping to M character cells... and unlike the N:1 or N:2 cases, the N:M case doesn't allow a hard-coded list of how many cells an input string covers, it varies from font to font. And that risks software designed for one font breaking in a terminal that uses a different font, if it has a different set of ligatures, or the ligatures are different sizes.
- wezfurlong 6y agoYeah, this stuff is hard. The approach used in wezterm is to use unicode graphemes for cells, and use the unicode width of the grapheme to decide whether a given cell is double-width. Ligatures are handled at rendering time, partly because the terminal emulation and model layer doesn't know about fonts (it can run "headless" in a multiplexer where there are no fonts), and partly because the shaper library doesn't output information about cells but rather about which glyphs to render in which positions--that information doesn't easily map to the terminal cell model. For extra pain, some font designers have ligatured sequences that map to a single glyph that may be several cells wide, while others use alternative glyph fragments for each component of the ligature, and others may emit two blank glyphs, followed by a triple wide glyph with a negative x offset of almost two blank glyphs in width. It's difficult to map this information to cells.
- caslon 6y ago...does that font used for comments in the screenshot seem like visual terrorism to anyone else? Cursive might be fine on its own, and print is definitely the standard, but haphazardly mixing cursive and print is alarming.
- vajrapani666 6y agoSeems the intent is to clearly separate commentary from code. I could see that being intentional, imagine cursive annotations on a printed document.
- caslon 6y agoIt's not actually cursive though! It's seemingly-random cursive/print mix.
- alpaca128 6y agoHow is cursive for lowercase and normal italic for uppercase random? That said it's a font thing, others may do it more consistently if you're into that.
- caslon 6y agoIt's not cursive for lowercase. Look at "which." The glyphs are just randomly cursive or print. I wasn't complaining about serifs, I was complaining about randomly mixing cursive and print.
- brundolf 6y agoI've seen this style used to raise the contrast between comments and otherwise. Though I am surprised it works in Vim given that most terminals can't render multiple fonts at once. Are there control characters for that?
- ZekeSulastin 6y agoIIRC the monospace font itself would have the cursive characters as its "italic" typeface, then the terminal would just need to be sent the control characters for italic text (i.e. https://rubjo.github.io/victor-mono/ https://rubjo.github.io/victor-mono/)
- trynton 6y agoLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- hedora 6y agoWhat brand of laptop?
- trynton 6y agoLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- kamranjon 6y agoI think maybe this might be pretty good evidence that this is gpt3 ^ I've played around quite a bit with gpt3 and it does this sort of thing all the time where it won't actually directly answer a question, kinda skirt around it cause it's a stochastic parrot.
- trynton 6y agoLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- 7e 6y agoIt renders Pragmata Pro Mono Liga much worse on Linux than Tilix does. Otherwise, I’d give it a shot.
- Geezus_42 6y agoHow does this differ from other GPU accelerated terminals, i.e. alcritty, Windows Terminal, etc?
- gregwebs 6y agoKitty as well.
- hojjat12000 6y agoAFAIK Alacritty is not a multiplexer. Using something like tmux in Alacritty, makes the output slow (because tmux has its own buffer etc). I'm hoping that this doesn't have that issue because it is also a multiplexer. Another issue I have with Alacritty is that it looks ugly on Wayland (because of lack of user window decoration), I'm not sure if this has somehow solved that issue (building against gnome or something). I love Alacritty, but for my setup it doesn't work. Looking really hard for a fast and snappy replacement.
- vladvasiliu 6y agoA quick glance at the docs tells me this implements its own multiplexing all the way down, as opposed to integrating with tmux like iterm2 does. The downside is that this requires installing the multiplexer on the remote machine, whereas iterm works with the much more prevalent tmux install. Not sure what this means in terms of performance, I've never had any issues running remote tmux in alacritty or in iterm (via `tmux -CC`). I don't have any use for running tmux locally, but I would sure love to be able to have actual windows for remote sessions (I use i3 and would prefer to manage all windows through that).
- wezfurlong 6y agoFWIW, wezterm is very slowly building support for `tmux -CC` as well: https://github.com/wez/wezterm/issues/336 https://github.com/wez/wezterm/issues/336
- Cloudef 6y agoAlacritty should support window decorations on wayland. What compositor are you using? Note that alacritty prefers server-side decoration, but some compositors don't implement it like GNOME's mutter[1], in that case it will draw its own decorations. 1: https://gitlab.gnome.org/GNOME/mutter/-/issues/217 https://gitlab.gnome.org/GNOME/mutter/-/issues/217
- ipsum2 6y agoFeels snappier than iterm2 and Hyper, the latter supposedly being hardware accelerated through WebGL. Nice!
- floatingatoll 6y agoI see perfect 256colors test results for foreground and background. Very nice, author.
- mpd 6y agoIt's working for 24-bit color as well.
- akdor1154 6y agoOo, both X11 and wayland support. Will try.
- prabir 6y agoI have been able to completely replace tmux with wezterm on Linux and Mac and love it. It even works on Windows and have been able to port tmux bindings . https://github.com/prabirshrestha/dotfiles/blob/master/.config/wezterm/wezterm.lua https://github.com/prabirshrestha/dotfiles/blob/master/.conf...
- djeiasbsbo 6y agoBut why would that be beneficial? Having the terminal multiplexer "in th shell" seems so much more convenient. I use Alacritty and tmux but I always open tmux anyway.
- drdec 6y agoI feel like I am missing something - does wezterm support functionality equivalent to tmux's sessions? I'm guessing that domains are the wezterm concept but I don't see how to switch or detach from a domain.
- globular-toast 6y agoAm I the only one who doesn't use terminal multiplexing? I used to use screen back when I would have eternal shells open on remote systems via SSH, but why would I need to do this locally when I have a window manager?
- em-bee 6y agoi set up each of my terminals with a specific purpose. they all live in a different directory and stay there (or switch to subdirectories and back). say for example a terminal for each project i am simultaneously tracking, or each long-term task. as a result i have dozens of terminals. but, i never work on more than one project or task at a time. so there is really no need for more than one terminal-window to be on my screen at any one time. on other words, using tmux locally helps me avoid clutter on my desktop.
- minusf 6y agoi guess it really depends on how good your WM is. fundamentally it is very easy to recreate a tmux-like workflow in a terminal emulator that has windows and tabs. so why invest the time to learn tmux? if for nothing else, it's a much nicer nohup(1). because once i learnt it, it doesnt matter which terminal emulator i use, i have a full window manager solution _anywhere_. but it's not a zero sum game for me, i have multiple windows to multiple hosts, not one giant tmux mess. in those windows i have tmux'ed sessions, which makes working on a given host much nicer for me.
- Exuma 6y agoWhat theme is that?
- imposterr 6y agoI don't see it anywhere else on the web so it might be specific to Wezterm, but they seem to call it "Batman". https://github.com/wez/wezterm/blob/a034730373c341aa078765c081fcb32168b1974f/assets/colors/Batman.toml https://github.com/wez/wezterm/blob/a034730373c341aa078765c0...
- wezfurlong 6y agoThe terminal theme in that screenshot is the builtin wezterm defaults which are a minor evolution of the "Wez" theme that I uploaded to a random wiki years and years ago, and which found its way into the https://github.com/mbadolato/iTerm2-Color-Schemes https://github.com/mbadolato/iTerm2-Color-Schemes collection and is now also available as a selectable theme in wezterm: https://wezfurlong.org/wezterm/colorschemes/w/index.html#wez https://wezfurlong.org/wezterm/colorschemes/w/index.html#wez (that's NOT the same as wezterm's defaults, but it is very similar!) The colorscheme used in vim in that screenshot is my personal vim colorscheme which is leaning on the terminal color scheme, with the doc comment color explicitly selecting that orange color, for its added visual terror factor. (Really, I just like my Rust doc comments to be rust colored).
- wezfurlong 6y agoIf you're looking for the precise colors in wezterm's defaults, they're here: https://github.com/wez/wezterm/blob/main/term/src/color.rs#L112-L210 https://github.com/wez/wezterm/blob/main/term/src/color.rs#L...
- kdmytro 6y agoIs there benefit from using one of these GPU-accelerated terminal emulators on a laptop with integrated Intel graphics?
- vletal 6y agoI've just tried it on 2014 MacBook Pro with Intel Iris GPU. It seems it bit more sluggish than the built in Terminal app. No hard numbers, yet simply resizing a window is visibly slow or "accidentally" catting 100k line txt file in the terminal takes several seconds. Both is instant in iTerm and Terminal on my machine.
- noisy_boy 6y agoI tried it out just as an terminal emulator and it looks quite nice. I noticed that the startup time is a bit high when using appImage - much snapper once you build it from source. Though will continue to use Tilix as it is as snappy (not a multiplexer) + has buttons for vertical/horizontal splitting/tabs. [0]: https://wezfurlong.org/wezterm/install/source.html https://wezfurlong.org/wezterm/install/source.html [1]: https://gnunn1.github.io/tilix-web/ https://gnunn1.github.io/tilix-web/
- rcarmo 6y agoHmmm. Sixel graphics support, I see. That’s something I wish was more readily available everywhere.
- Mic92 6y agoSince it uses its own ssh library I assume it won't support ssh agent/unix socket forwarding this way?
- wezfurlong 6y agoit uses libssh2; agent authentication is supported, but libssh2 doesn't currently support agent forwarding: https://github.com/libssh2/libssh2/issues/535 https://github.com/libssh2/libssh2/issues/535
- jcoscolla 6y agoI have to say this terminal surprised me. Feels really fast (faster than kitty) and have some features I was missing. I will give it a fair trial
- petepete 6y agoFaster than Kitty takes some doing, definitely going to give it a try too.
- minusf 6y agoi would not make sweeping statements like that... here is my non scientific benchmark, latest macos: new wezterm window: `find /`: 70% CPU new kitty window: `find /`: 30% CPU the kitty window is visually faster as well...
- CIAvash 6y agoWezterm, like Alacritty doesn't support RTL languages.
- spoiler 6y agoCould you provide a screenshot of a RTL terminal? I wasn't aware people use those. Probably showing my own ignorance here, but when would you need to use it. Also, I'd assume this has nothing to do with terminal emulator (might be a wrong assumption). I thought the shell/TUI just has to position the cursor on the right hand side and emit the correct Unicode?
- CIAvash 6y agoCurrently I'm aware of two terminal that support RTL languages, Konsole and gnome-terminal. The terminal itself doesn't need to be RTL, but the text that is entered or printed. Here's screenshots of Konsole and Alacritty: https://imgur.com/a/x8Zy6ug https://imgur.com/a/x8Zy6ug
- CIAvash 6y agoI'm not very knowledgeable on this. But, a program that wants to support RTL languages, in this case a terminal, needs to support bidirectional text and text shaping.
- ficklepickle 6y agoMoment of shame. I don't understand terminal multiplexers. I just open a new terminal and SSH in again if need be. Keyboard shortcuts to arrange the windows.
- irq 6y agoYou’re taking advantage of modern UI tools and modern levels of screen resolution and not intentionally recreating the old way of interacting with multiple terminals simultaneously. Literally no shame in that. GUIs with multiple windows and tabs were invented for a reason.
- coldtea 6y agoThat's not the benefit of terminal multiplexers people use them for ...
- irq 6y agoI know dozens of engineers that maximize one single native OS terminal window and use tmux or screen inside of it to divide it into more “windows” (which are not OS native and just basically ascii frames). Yes there are other benefits too, and I use screen for those uses, but that’s not what OP was talking about.
- lewispollard 6y agoMain feature for me is that I can have a few terminal windows/panes open, close the terminal, and open it back up later to the same tabs and panes still running. Or, I can open a terminal on any virtual desktop and get the same terminal on all of them. I work with a few different hosts on SSH and having an active connection for each as a labelled window (tab) in the terminal itself that I can just open up a terminal anywhere to come back to is great. Personally I use the `tmuxinator` helper tool[^1] that allows you to create configurations as json files to be launched/attached to with short aliases (eg `mux s myconfig`) [1] https://github.com/tmuxinator/tmuxinator https://github.com/tmuxinator/tmuxinator
- eptcyka 6y ago
- k4Y14Te3ZL 6y agoI just saw this and after a quick checkout of the latest release (which is what I can quickly install), I feel a bit disappointed. Here is yet another GPU-accelerated terminal that claims to be a VT500 (judging by its Device Attributes report), sets TERM to xterm-256color, while having holes in basic VT100 support (just ran VTTEST in it and saw glaring issues, need not look further than basic VT100 tests, TAB setting/resetting, cursor save/restore). Please note that I am not attacking wezterm here, my criticism is aimed to be constructive because terminals are important. I think wezterm is a very cool project, and I wish all the best to it, but why not make a terminal that actually (correctly) implements those escape sequences? (We are talking about a couple dozen controls here.) Given the development history (3+ years, 3k+ commits) I would say that this is not a resource issue but a prioritization issue. For an example of a GPU-accelerated terminal with much less polish, less unicode/ligature support and less portability, but one that takes fundamental correctness very seriously (coupled with excellent performance and very low latency) in a tenth of the source code and (presumably) a mere fraction of development resources spent on it, take a look at zutty. Note, if you like wezterm, you will probably NOT want to switch to zutty, because it's a much more basic program.
- snvzz 6y agozutty is great, and I would use it if it did support double-width characters (needed for CJK, which I need). Alas, it does not.
- wezfurlong 6y agoThanks for the feedback. Please keep in mind that this project is a free time project, so when you make a generalization that my priorities are wrong and that I have lots of resources, you're a bit off base. I've run vttest a few times; one of the biggest issues I have with it is that it isn't a unit test. It relies on a human to know what looks correct and know from what is on the screen what it was trying to do. If you can concisely describe specific conformance issues, then I'd really appreciate it if you could file a github issue for each one. Please don't just file an issue that says "run vttest", as that isn't very actionable.
- 6y ago
- traceroute66 6y agoForgive me as it's not my area of expertise, but why does the world even need a GPU-accelerated terminal emulator ?!? Surely even the worst of the worst motherboard embedded graphics can cope with displaying some text in a window ? Its something computers have managed to do since their invention ?
- dmos62 6y agoI would like to know this too. GPU accelerated terminals are growing in number so there must be a use case. I'm an avid terminal user, but I've never discovered this.
- hutrdvnj 6y agoDisplaying terminal output nowadays is more complex than 30 years ago. Today you want to be able to render high dpi text on a 4k display, possibly on multiple monitors in multiple terminals at the same time. And you better have more than 240 FPS (terminal render updates per second), because some displays run at 240hz or higher and you don't want your terminal to produce flicker on your screen.
- traceroute66 6y ago@hutrdvnj I'm sorry, what ?! I use SSH a lot every single day. Not once have I thought "sheesh, this is slow". Before SSH became the default, I spent even more of my life on Telnet. Same again, never had a problem. I also sometimes do console connections to switches and routers. The only lagging I've ever seen in a terminal window is when I've been on the end of a poor internet connection ! And yes I've done it on 4k displays and multiple monitors and multiple terminals. I've never observed any flicker either (and yes I use non-standard "modern" fonts). I've never had problems with Microsoft Word or Notepad either ! I'm sorry but I fail to see why a terminal emulator needs the same power as Photoshop or your favourite game. Frankly I would put a GPU-accelerated terminal emulator in the category of "product solving a problem that doesn't need to be solved".
- 6y ago
- jstimpfle 6y ago... implemented in Rust!!! Having skimmed through quite a few Rust projects on Github lately I am overwhelmed by the amount of code in them. I feel lost looking at any random file, it's too OOP-y for me, I can't really see what it's doing. I start to feel a little insecure about my own abilities, I've mostly focused on building small components or little systems from the ground (in C) up with minimal or no libraries. That works and is rewarding, until the project becomes unmanageable because of some aspect that I'd done poorly, and I start a new project that focuses on exploring the particular kind of subsystem that I didn't know how to do properly. It also seems like the following is a pattern. I checked out that intimidating Rust project using git. It's something like 50MB to download. Then I run "cargo build". I wait 5-10 minutes and it is still "fetching". At some point, it goes on to compile 550 (!) transitive dependencies. A little while later, the build failed, could not compile libc, unicode-xid, cfg-if, proc-macro2. Not sure, maybe I have the wrong version of "cargo" installed? I get back to my small current hobby project, which is somehow more rewarding to me since I can still check it out on a fresh Linux or Windows box, run "build.sh" and run it. That whole process can complete in 20 seconds. Am I too stubborn? Or should a terminal emulator really be not such a massive project? (No offense meant).
- bew 6y agoYou need the latest stable version of rust/cargo (1.51, released last week) to compile the master version of wezterm iirc
- roblabla 6y agoI really wish every rust project had a `rust-toolchain` file checked in[0]. This would cause rustup to automatically select the correct version of rust to use to build the project, thus making it easier to reproduce the build. [0]: https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file https://rust-lang.github.io/rustup/overrides.html#the-toolch...
- wezfurlong 6y agoWould you like to submit a PR to add a suitable version of that file to wezterm? FWIW, in my experience so far with wezterm, most people that have run into issues with old rust versions are not running rustup at all, so I feel like something rust/cargo should also have a mechanism to specify an appropriate version.