3,214 karma · joined January 23, 2011
3.2.x will be focused on rendering improvements. The full change log is here: https://iterm2.com/appcasts/testing_changes3.txt
3.3, which is currently under development, is adding a Python scripting API (https://iterm2.com/python-api/) and fixing tab and window titles to make sense, plus adding a status bar.
Feature requests that are candidates for 3.4 are here: https://gitlab.com/gnachman/iterm2/milestones/8
If you have something in mind file an issue. Y'all are my PMs.
There is already support for ligatures (prefs>profiles>text>enable ligatures). The Metal renderer does not support them because that's an extra level of complexity I can't handle in the first release. It would require constructing CTLineRefs which is already the slowest part of drawing. Subpixel antialiasing also makes this really difficult, but since that's going away in Mojave I'll revisit it.
Future performance enhancements that I have in mind are: - Faster tokenization (including revisiting SIMD) - Mojave-specific optimizations (removing subpixel AA and its knock-on consequences) - Move per-frame setup work into a compute shader. This is tricky because some people have CPUs that are relatively faster than their GPUs (thanks Intel!) - Reuse the preceding frame's rendered texture when updating less than a full frame - Move work off the main thread where possible
There's also a lot of preprocessing to do before sending work to the GPU. For example, computing the color of each cell is a very complex algorithm because foreground and background colors interact with each other and also determine the font. For example, you can enable thinner strokes only when it's light text on a dark background. Work can't be sent to the GPU until the text is rendered into a texture, which means colors must be known. There's room for optimization here for common cases, but I haven't taken that on yet. My goal for 3.2 is for it to be an improvement over the legacy renderer and a solid foundation for iteration in the future.
In iTerm2's case it's because of bad decisions about a decade ago. The data model is read & written on the main thread. The main thread is solely responsible for drawing operations if you use the standard drawRect: interface on NSView. That means that a slow draw blocks it from processing more data. Other work, like reading from the socket and parsing bytes into tokens was offloaded onto other threads years ago. Unwinding all the assumptions about single-threadedness is nearly impossible. The only way to reduce the main thread's workload is to use a GPU renderer because building the data structures the GPU needs can be done off the main thread after a quick copy of the necessary state.
But the reason I’m sad is that this wonderful hack was short lived: https://docs.google.com/document/d/1vfBq6vg409Zky-IQ7ne-Yy7o...
My pet theory is that macOS is going to pull in a bunch of iOS code and iOS has never had subpixel AA.
* Core Data's generated classes are broken for one-to-many relationships
* NSTableView is a total mess. Lots of things don't work quite right. For example, calculating the correct height for a row of wrapped text is nearly impossible without hackily adding a few points here and there.
* In Metal, constant buffers over 64k get silently truncated on some GPUs.
* MTKView is half-baked. Resizing it stretches the window's contents, for example. If you don't use layers it overlaps the window's rounded corners. If you do enable layers, the framerate drops by half.
* The one field editor per window hack breaks expectations every time I use it. It should be done away with.
* NSTitlebarAccessoryViewController is officially supported but was never documented and forces the entire window to use auto layout
Please don't add any features. Just fix the garbage fire you already have rather than throwing more garbage on it.
The iTerm2 one is interesting because it came too late. Apple's patch disables Sierra's native tabbing. Version 3.1.3 did not disable it completely. I published a fix in version 3.1.4 which came out on October 22, 2017, about a month after Sierra launched. I guess they must have fixed it in a dot release of Sierra, but I won the race and got the fix out before 10.12.1 which came out on October 27.
I'm glad someone's got my back, anyway.
> According to Alana Lee, the EPA project manager for the site, the air stripper on the Netscape campus was constructed in 1989, and because of a grandfather clause, is permitted to emit 24 pounds per day of toxic material. > > The current limit for air-strippers is 1 pound per day.
As for using CPU when idle, there was a bug where a background thread was doing the equivalent of running `ps` over and over. That's been fixed in the last few versions, but please file issues for such things and I'll get to them as soon as I'm able.