Personally, the lack of scrollback and tabs is a dealbreaker for me. I know that I'm supposed to use tmux for that, but I can never remember how tmux scrollback and tab switching work without thinking about them. Plus I rely heavily on mouse selection of multi-screen text in the scrollback buffer. So I'm unlikely to be part of your target audience. (However, I could live without GUI config and menus, because I configure my terminals once every few years at most.)
Also, a silly question: Do you support color emoji in the Terminal? I've never quite managed to get it working on Linux.
Completely understandable. This decision was expected to be polarizing.
> Do you support color emoji in the Terminal? I've never quite managed to get it working on Linux.
Not yet. Fallback fonts, wide chars, and a number of other font rendering items are part of the 1.0 milestone.
This will be available also on Windows?
The project being OK with polarizing decisions (instead of listening to the community and discussing it) is the dealbreaker for me.
It's OK to build opinionated software, but not at such basic level.
Um... that's kind of a deal breaker to me. Really no scrollback at all?
(edit) from the project's github page in fact
The simplicity goal means that it doesn't have many features like tabs or scroll back as in other terminals. Instead, it is expected that users of Alacritty make use of a terminal multiplexer such as tmux.
This approach also means you can't do anything interesting like what Terminal.app does with detecting prompts, marking them, and letting you jump back to them (or clear history back to them).
This approach could be excused if the terminal actually natively integrated with tmux, thus providing its own gui splits/tabs that represent tmux's panes/windows, but it doesn't sound like it does that.
Also, some terminal emulators (iTerm2 on Mac) let you disable mouse grabbing by holding a special key while clicking, maybe Alacritty could implement something like this?
For example, here's my mouse-related tmux config:
set -g mouse on
# enter copy-mode by scrolling, but don't select the pane
# The usage of #{mouse_any_flag} just forwards mouse events when in a fullscreen app that wants them
bind -n WheelUpPane if -F -t = "#{mouse_any_flag}" "send-keys -M -t =" "if -F -t = '#{alternate_on}' 'send-keys -t = Up' \"if -F -t = '#{pane_in_mode}' '' 'copy-mode -e -t ='; send-keys -M -t =\""
bind -n WheelDownPane if -F -t = "#{alternate_on}" "send-keys -t = Down" "send-keys -M -t ="
# Start copy-mode with PageUp
# For PageDown, if we're not in copy-mode, discard it
bind -n PageUp if -F "#{alternate_on}" "send-keys PageUp" "copy-mode -eu"
bind -n PageDown if -F "#{alternate_on}" "send-keys PageDown" "if -F '#{pane_in_mode}' 'send-keys PageDown'"However, some people complain about mouse issues. I would suspect that some terminal emulators are trying way too hard to properly handle mouse events.
As far as I can tell, using Tmux's scrollback instead has no downsides of note, but some _very_ significant upsides. For example, (1) shared buffer between terminal windows, and (2) copy/paste modes that are usable with Vim shortcuts.
I'm not saying this is necessarily a bad thing (haven't tried it), I'm just saying this is the way to get my scrollback... uh... back.
Might as well ship the terminal with tmux as a hard dependency and launch a tmux child process by default.
Yeah, but it's not as bad as it sounds once you "move down a layer" and treat Tmux like your terminal manager rather than your terminal. When I need to a new shell, I don't open a new terminal window; instead I open a new Tmux "window" (the spiritual equivalent to a tab) and do the work there. I keep the same two terminal windows open with nested Tmux sessions for months at a time. By extension, opening new Tmux sessions is also an extremely rare event because the ones I already have are persistent.
> Might as well ship the terminal with tmux as a hard dependency and launch a tmux child process by default.
I think it's still nice to leave some room for customization here. Screen is still a pretty good Tmux alternative for example (in fact, five years ago you would have said that Tmux was a screen alternative rather than vice versa), and some people might prefer to use that instead.
This definitely is a polarizing design decision, but one I support.
That said, I really wanted to build this exact same project at some point, so maybe seems like a feature that could be added in a fork :)
One feature that I really miss in rxvt is an easy/fast way to change the color scheme, or at least reverse colors (like with xterm, which if correctly configured it's just ~3 times slower than urxvt). This is something really important when your screen receives direct sunlight.
Specifically this. Without being above-average proficiency with X, the format and available options are likely to be difficult to figure out.
> "GUI-based configuration is unnecessary", so how exactly is Alacritty easier than urxvt
The config file is well documented and in a human-friendly format. Most flags will also take effect immediately without restarting the program.
> One feature that I really miss in rxvt is an easy/fast way to change the color scheme, or at least reverse colors (like with xterm, which if correctly configured it's just ~3 times slower than urxvt). This is something really important when your screen receives direct sunlight.
You could have two `colors` sections in the config file and just uncomment one or the other. Not quite as convenient I suppose. One thing I'm considering as a key-binding option is to exec a command. This could be anything like `sh swap_config.sh` and then you could bind it to whatever you like.
This would be pretty awesome. I definitely would love to have that as a feature, assuming it's not excessively difficult to implement.
# in ~/.inputrc
$if Bash
# <f12> - find this with "<Control-v>{KEY}"
"\e[24~": "sh \"${HOME}\"/path/to/swap_config.sh
"
# (the newline is included, which is
# usually bound to accept-line)
$endif
The string indicating the key to binding to (left of the ":") can change depending on the environment (terminal, os, etc), so use <Control-v> to investigate what is actually being sent by the terminal into readline.I don't know whether to throw money at you or tell you to get off my lawn.
For now I will wish you a very happy new year and you can have a free rsync.net account if you want.
BUT I RESERVE THE RIGHT to shoo you from my lawn once I figure out what is going on here. With your GPU accelerated terminal emulator? Christ.
Kids these days with their Rock and Roll music and their 144FPS terminal emulators.
In a multi-pane tmux window with vim, performance issues start to become noticeable. Many people I've talked to have experienced a situation where a bunch of output is being written to the screen, they panic to hit C-c, and then all you can do is wait for it to finish. This just isn't an issue with Alacritty.
Alacritty is about having tools that don't get in your way and don't distract you from what you're trying to accomplish.
It could be that the emulator is not handling inputs fairly: maybe it tries to process all available input from the pseudoterminal before processing the next batch of keyboard input. Or it could be that the pseudoterminal (kernel driver) is not configured to send the signal as expected. Or it could be that the process you're trying to interrupt is not responsive to the signal.
I maintain a terminal emulator that is not optimized at all and I just tested interrupting a process that was dumping one gigabyte of text to the screen. The interrupt was handled instantaneously.
Which one do you use ?
Does this emulator solve my problem?
I've found syncing makes a huge difference to IO perf in Windows, e.g. `_getc_nolock` is much faster than `getc`. (Assuming of course that you can get away with it.)
These have little effect, also omitting std::endl has little effect. The effect is somewhat mitigated by buffering, so that if the time between subsequent st::couts is large, you won't see the runtime overhead.
However, keeps being slower that any tty on any *nix. Sometimes fish autocomplete hangs for a few seconds when on the same machine running ubuntu fish autocomplete always is instantaneous. I don't know if it's related to something about the tty emulator or something weird on cygwin.
It's not so much that this is 'fast' (because even gnome-terminal which is not what I'd call crazy fast is 'fast enough' most days), but that it's much more responsive as a result. By locking the terminal refresh to your screen refresh rate and only rendering 'current' data this removes a lot of headaches you can run into with other terminal emulators (like the aforementioned cat of a 1GB text file).
I'll be giving Alacritty a try shortly - if it does what it says on the tin, it's exactly what I've been looking for.
On the mac side I had other performance issues with Terminal.app (particularly when using all of widescreen + tmux - lots of flicker during move/refresh operations). iTerm2 did well for me though, iirc.
Beyond that, it has a ton of features - none of which I use since I manage my sessions with tmux. So I guess it's mostly a matter of not wanting a sledgehammer when the right tool is a finishing hammer?
However, a terminal emulator + X11 and so on can eat a bit of a CPU with noisy processes, eg. the output of mpv eats maybe 5-10 %, because it updates every(?) frame, so maximum work for the whole display stack. Getting the terminal emulator out of sight can get a bit more battery life in these cases.
(Somewhat related: If you have infinite scrollback it turns out that /tmp is actually very finite and can be filled by the wrong command with a couple dozen MB/s.)
Not trying to be discouraging just something to keep in mind if that's a direction you want to go. Pretty excited to see a GPU + Rust based stuff making it out into the wild.
With a modern discrete GPU card wouldn't the texture atlas just end up in it's VRAM as cards these days commonly have >1GB of VRAM?
(Sorry if this is a stupid question, still trying to grok opengl)
Most font renderers I know do a tiered LRU cache of 3-4 texture "pages" which hurts your drawcall batching but tends to be a nice tradeoff in texture usage.
Valve uses the first, very few people use the second because of patent issues. They're more computationally expensive in some cases so there's always tradeoffs to be made depending on your hardware.
[1] - http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_...
[2] - http://http.developer.nvidia.com/GPUGems3/gpugems3_ch25.html
It's pretty large.
can it handle zalgo?
I am a heavy tmux + vim user, developing on a remote server. So, I have all my dev sessions always running and can access them on any client. I never needed scrollback or tabs in my terminal. tmux has it all. Excellent window and pane management + scrollback included.
And even on a remote connection I feel speed differences between terminal emulators as I wrote in another post. So, there is a strong need for such a product and great that somebody is innovating a console app in a time of locked-down fancy touch devices.
Well done and keep on going. Don't be intimidated by different requirements. Your product strategy is right (at least for me).
I tested on my laptop (a ThinkPad X250) and alacritty is slower than xterm. xterm can display find / at 80x24 in 11 seconds, but alacritty takes 17 seconds or more, depending on how large the window is (smaller seems to be slower) and whether it's on-screen or not (off-screen seems to be slower).
terminator: 0m58s
alacritty: 2m46s
Up to date Arch Linux.
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
OpenGL core profile version string: 3.3 (Core Profile) Mesa 13.0.3
edit2: there is a bug report tracking this issue here: https://github.com/jwilm/alacritty/issues/125
Can report find / works very quick on macOS (so quick, it is unreadable), and Fish works as well. Just the Rust install assumed I was using Bash.
Possible bug: on macOS when I minimize Alacritty, and I put it on focus again, it tries to select text. Strangely, not always.
Multibyte characters are 100% supported, but only if they are available in the chosen font. The fallback fonts feature will resolve this issue for you.
> Possible bug: on macOS when I minimize Alacritty, and I put it on focus again, it tries to select text. Strangely, not always.
Definitely a bug, and it's one that I knowingly shipped with (usually I just resize my terminal once and then it's static). The events triggering selection seem to work slightly different on macOS than Linux. The issue should be easy to resolve, but this comes down to making time.
How do I enable this feature?
The characters and ⑂ don't work in Menlo.
and do work in Cousine for Powerline font.
In Terminal.App and iTerm2 this works in both fonts. Do those applications also have a fallback fonts feature?
Is there a way to command the terminal to enter/exit full screen mode (like iTerm2 has)?
Control sequences work - ie I can exit with C-x C-e.
Works fine in regular Mac OS X terminal.
Any suggestions appreciated. Looks like an awesome project!
Looks interseting!
(Yes, I know tmux and screen exist, I just prefer GUI splitscreen)
withoutboats and I are hopefully going to collaborate and add notty protocol support to Alacritty. This should make text splits as performant as GUI splits.
The notty screen splitting protocol should support a "GUI" interface shared by a single process, solving this problem.
I don't remember major perf issues using vim within screen, I'm afraid to use Alacritty and then never be able to come back to my past setup :)
Just a few weeks ago I accidentally ran a command on a remote machine that generated so much spew in the few seconds it ran before I hit control-c that it took 5 minutes to scroll through before I could do anything else.
But yes, you probably want to avoid that much text spew even if your terminal is super fast.
But, the point is that sometimes it's a huge cost, and the rest of the time it's a tiny continuous slowdown.
This initial release should be considered to be pre-alpha
software--it will have issues. Once Alacritty reaches an
alpha level of readiness, precompiled binaries will be
provided for supported operating systems.
[1] https://github.com/jwilm/alacrittyBrowsing the sources it looks like you're re-implementing a non-trivial part of it.