Per-pixel smooth scrolling in Terminal
| Originator: | jaden.geller | ||
| Number: | rdar://33144063 | Date Originated: | July 5 2017 |
| Status: | Resolved: | ||
| Product: | Product Version: | ||
| Classification: | Reproducible: |
Area: Terminal Summary: It would be very, very useful to allow per-pixel smooth scroll in Terminal app. Currently, scrolling in terminal is line-by-line, which feels second-class and out of place with other macOS apps. Given certain editors (like Emacs) are nearly necessary for certain use cases (e.g. Proof General), it would be nice if they could scroll smoothly. Otherwise, it is difficult for eyes to track the position of the content as it scrolls. Steps to Reproduce: Scroll Expected Results: Smooth, "buttery" per-pixel scrolling like in Safari, Finder, Calendar, Mail, Xcode, TextEdit, etc. Observed Results: Clunky, jittery per-line scrolling that is nearly impossible to visually track Version: All versions Notes: Configuration: All configurations
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!
My reply:
Thank you for the thoughtful reply!
I’m interested in the sort of native scrolling that exists in all other apps. I don’t imagine “fine scrolling” would fit my use case. I worry it would feel uncanny and distracting. I mainly just want the content to track my fingers on the touchpad as I move them. Right now, it jumps line by line, making it hard to visually follow content.
I had guessed that Terminal scrolling and Emacs scrolling might be unrelated, but I wasn’t entirely sure. If native smooth scrolling were added to Terminal, would it be possible to build a terminal application that took advantage of this capability somehow? Or are these sorts of interactive environments, without some sort of scroll view API, destined to implement scrolling logic on their own?
Thanks again!
Engineering reply:
"Terminal view scrolling and Emacs scrolling are independent things. Emacs inside a terminal is only going to scroll whole lines. Terminal could scroll its view by pixels when the user scrolls using the scrollbar or a pointing device, but that won't make programs inside the terminal scroll by pixels. Emacs will still draw and scroll its content by whole lines, and content output by the shell or programs like
lsandcatwill still travel up through the terminal screen by whole lines.Some hardware terminals support a feature called “fine scrolling” in which they animate the lines up/down by pixels to the next whole-line position. That is less likely to be something that full-screen applications like Emacs and Vim can take advantage of, because despite appearances they do not necessarily tell the terminal to scroll the content as a contiguous rectangle when they scroll their displays—they use optimized approaches to update the terminal screen with as few changes as possible, often redrawing rather than telling the terminal to scroll the content.
Exactly which kind of scrolling are you referring to? You, the user, scrolling the terminal view to see the scrollback above the terminal screen, or “fine scrolling” for the character cells within the terminal screen as content makes its way upwards towards the top of the screen?"