Disabling acceleration is a big feature here, again something that makes sense on a trackpad but does not on a scroll wheel. It's infuriating switching between Linux/Windows/macOS _with the same mouse_ and only macOS has acceleration. Logitech Options doesn't even give acceleration
Also along these lines of bizarre defaults, I don't remember how but I had to change key press settings to allow for repeated presses. Apparently the default behavior is to give you accent character options. Then from there I had to change the interval/initial timings to be closer to Linux/Windows as well. Of course now I'm paying the price with the dreaded repeat inputs on this keyboard
> Disabling acceleration is a big feature here, again something that makes sense on a trackpad but does not on a scroll wheel.
Ah, but it makes sense on Apple scroll wheels! I think that's why they never added a built-in option to disable it.
Nowadays the Magic Mouse doesn't even have a physical scroll wheel, but even on the Mighty Mouse, the scroll wheel was a little ball that could roll in any direction and didn't have notches, so acceleration made sense.
Acceleration + notches are what do not go together.
I think the magic mouse is treated like a trackpad under the hood so all the gestures work. If someone with a magic mouse tried to uncheck the natural scrolling box under mouse they'd be confused as to why it didn't change so that could be why the two settings are "linked".
Also there's this app called MagicPrefs that allows you to bind things to gestures, including rebinding the system ones. I use it to bind three-finger click as middle click and at this point I can't fathom not having it. It supports all kinds of Apple trackpads and the magic mouse. This implies that all touch gestures, regardless of the shape of the device, share most of the underlying code.
...right, that also makes sense with how some other tools behave. So this applies more to the Mighty Mouse, which is what the wheel acceleration curve feels optimized for IMO.
Yeah, the scroll wheel acceleration kills me - I start off scrolling just a few pixels, and then it jumps half a page, when I just wanted a few lines. I've been using a product called "USB Overdrive" which has a multitude of features for tweaking and mapping input devices, just to override the scroll wheel behavior.
Speaking of infuriating trackpad issues on macOS: Have you solved the three button problem on Linux/BSD over VNC on MacOS? I had it working on Ubuntu 14 & 16 and FreeBSD 11.3, but now it is busted on 18 and 20. So annoying.
Thank you. I've been using Scroll Reverser[1], but it hasn't been updated to fully support Catalina (it works, but the installation process was not updated to request the permissions in Catalina).
I'll check out UnnaturalScrollWheels to see if it's a good replacement.
I miss when apps like this were built as preference panes.
An app that does nothing but change an OS setting—and whose user interface exists purely to adjust those settings—does not belong in my applications folder, and certainly not in my menu bar. Such apps ought to live in System Preferences, alongside other, well, system preferences. And what do you know, Apple built a way for third party developers to do just that!
Preference panes used to be the norm, but that seems to have changed over the last decade. It pains me to admit that an app is probably the right approach nowadays, because when everyone else is doing things one way, users will expect you to do that too.
One more way that OS X's UI metaphors have regressed...
This is actually Apple's fault more than anyone. I was originally planning to release on the App Store but decided not to after thinking about the $100 a year fee to be in the developer program and the 30% cut Apple would take if it were paid, and that's assuming the app would be approved by Apple in the first place. Although I decided not to release on the App Store I want to keep the option open. Apps on the App Store need to be sandboxed, which means no preference pane.
I agree apps filling up the menu bar is annoying, so there is an option to hide it if you wish.
Looks like it, yes. I don't use any special private APIs, just the public ones that you can use in apps on the app store. They need the accessibility permission to "Control your computer". Apps like BetterSnapTool/Magnet work with the same permission. Here's the code that actually intercepts scroll events: https://github.com/ther0n/UnnaturalScrollWheels/blob/master/...
100% agreed but I finally gave in and bought Bartender to bring sanity to my menu bar and hide all of these menu bar apps. I was able to hide Notification Center as well which was a neat and unexpected bonus, but would still be better if I didn’t really need a 3rd party app to manage all these 3rd party apps that insist on living somewhere in the foreground and it’s either the menu bar or the Dock for them.
Are OS X's metaphors slipping, or are they just being folded into how developers write their apps, or consumers use them? I ask because of the iOS Settings app: it used to be that was the place one changed the settings of an app, not in the app itself. IOW, kinda like the macOS System Preferences panes...sorta.
Point is, it can appear that the OS settings pane/app/whatever is for stuff Apple controls, and the rest has to go in an app or menubar. I'm not saying it's right, I'm saying that Apple has let the messaging get really confused.
> I'm not saying it's right, I'm saying that Apple has let the messaging get really confused.
Right—part of Apple's job is to create an environment where the "correct path" is clear and developers want to follow it. Either Apple used to do a better job, or else developers did.
And, consider:
• Apple encourages developers to distribute via the Mac App Store as much as possible.
• Preference Panes cannot be sold in the Mac App Store.
• In Catalina, all Safari extensions must be installed from the App Store as individual apps.
• New Notification Center widgets are always installed as applications. Old Dashboard widgets never were.
I would say that taken together, the clear implication from Apple is that apps are the way to go. And it all comes back to the Mac App Store, which Apple wants to push that at all costs. Evidently, they either actively don't want to sell non-apps in the store, or they don't care enough to build that functionality.
There are probably times when Apple's patterns are just wrong and the community coalesces on something better—I can't think of any, but it has probably happened, or will some day. But I do not think this is one of those times, because if you step back, using an app does not make objective sense.
(P.S. It's interesting to note that Apple's own iOS apps tend to have far fewer in-app preferences, in favor of sticking stuff in the Settings app.)
> Either Apple used to do a better job, or else developers did.
A bit of both I would think. When the Mac was a more niche platform the developer community tended to be more bought into philosophy and design sensibilities around it. And as the Mac has gotten more widespread in popularity, Apple has gotten less good at planning around power-user use cases or communicating how to handle them elegantly.
> When the Mac was a more niche platform the developer community tended to be more bought into philosophy and design sensibilities around it.
I still kind of hold Apple accountable for that, though. As the platform grows, Apple has more resources they can dedicate to clarifying UI patterns, or systemic coaching via API design. But they've gone in the opposite direction.
I agree but I think the issue here is complexity. This app is built with Swift, probably because most developers prefer high-level languages like that over system-level languages like ObjectiveC. Unfortunately, OS vendors typically don’t provide interfaces for high-level languages in their OS machinery unless strictly necessary. Can you actually write a Preferences panel in Swift? I wouldn’t be surprised if the answer were “nope, Obj-C only”.
It’s not even an Apple thing, Windows has been the same for a very long time - remember how browser extensions “exploded” when Mozilla made it possible to write them in JS? IE forced you to C++, dramatically restricting the number of developers.
I wouldn't characterize Swift as "high-level" and Objective-C as "system-level." One of Swift's stated design goals is to work at all levels of the technology stack, including system programming where you need a lot of control over struct layouts and so on.
I'd agree that most of the focus has been on app development, but I just found this toy kernel written in Swift the other day: http://si.org/projects/project1/
On the Objective-C side, sure you have access to all of the low level stuff of C, but Objective-C's message passing is probably a poor choice for very low-level system programming (in the kernel, for example). Apple uses C and C++ in the xnu kernel.
Swift was also designed to interoperate with C and Objective-C APIs, so you could certainly write a preference pane in it. It even automatically generates Swiftier interfaces for APIs that follow conventions. Here's the NSPreferencePane API: https://developer.apple.com/documentation/preferencepanes/ns...
I don't know much about macOS development, 72 hours ago I had never done any at all! But as far as I can tell anything you could do in Objective C you can also do in Swift. I would have made a preference pane and would prefer it myself but I explained why I didn't in another comment. Apple kind of discourages preference panes unfortunately.
Swift is largely compatible with Objective-C; for your preference pane question the answer will certainly be yes now due to ABI stability and preference panes running out-of-process. I would expect dealing with the Accessibility API to be the more annoying part, and that only because it's a C API working with function pointers, which means you can't use blocks (which is true with Objective-C as well, but generally par for the course when working with interfaces that Apple doesn't care much for).
Can’t you interface natively with objective-c objects from swift? It’s a much smaller ABI to target than the C++ one and most languages I know have some decent bindings.
> Can you actually write a Preferences panel in Swift? I wouldn’t be surprised if the answer were “nope, Obj-C only”.
If that was the case (I don't believe it is), it would only be because modern Apple doesn't care enough about Preference Panes to add easy support. A third party Preference Pane is not any more "OS machinery" that a third party screen saver.
As someone who prefers Natural Scroll (and who understands that there are people who don't), why would someone want Natural Scroll on one interaction method and not on another? That feels like confusion waiting to happen, IMHO.
I have been looking for a solution to this problem for a very long time and my reasoning is that on a trackpad, natural makes a lot of sense intuitively, since you are "pushing" the document (page/app/whatever) the direction you want it to move.
Whereas when I am using a mouse I feel like I the document is below the mouse more or less and when I move the scrollwheel it is physically moving the document as if it was tied to the scrollwheel.
Not sure if that makes any sense, as this is just some internal feelings on it, but I have beeen manually toggling the natural scroll when i plug and unplug my mouse ever since I started using MacOs
Yeah I think the exact same way! The top of the physical wheel spins the opposite direction of the bottom of the wheel which would be "touching" the page/content. Originally I was going to just make a background script to automatically toggle the option when it detects certain USB devices (like my mouse) but I couldn't find a way to apply settings changed via the "defaults write" command without logging out and then back in. In my research I came across discrete-scroll and scroll reverser on GitHub. Discrete-scroll worked in Catalina but had no GUI, and Scroll Reverser didn't work reliably on Catalina. So I combined the ideas from both in as little Swift code as possible so that anyone using my app wouldn't need to worry about allowing the app to "control your computer".
I have to say I really appreciate this! I was going down very similar lines just last week (I had installed Hammerspoon and was experimenting with some applescript hacks, but to no avail).
Just intercepting the actual scroll and inverting it is a really elegant solution (that doesn't require a relog) which is great.
This solves one of the two biggest gripes I had about MacOs - with the other being my inablility to "pin" my dock to one of my monitors, overriding the swap functionality. Thanks!
I'm the same as you, and it also took me a while to figure out why it was. The best explanation I could come up with is that it felt like I was moving the scroll bar with a scroll wheel, while that's clearly not the case when I'm using a trackpad or touch.
honestly, if this popped up more than 2 weeks ago i'd wonder the same thing. i love the way the mac trackpad works, including the scroll direction. but i plugged a mouse in and was doing some gaming stuff. it is unintuitive as hell to have the scroll wheel go the 'opposite' way for zooming on an rts. i changed the setting for the mouse, and later when on the trackpad again, wondered why the hell it was backwards. no idea why 1 setting, in 2 locations, uses the same config value.
Natural scroll direction while using a mouse isn't traditionally how one would use a mouse - but the issue is if you set the scroll direction to change for your mouse (on a mac) it also sets it for your trackpad.
I have always used a mouse when scrolling down makes the page go down, and on the trackpad scrolling down makes the page go up. It makes sense to me somehow, probably because I'm used to the input method of a phone's scrolling and so that transfers to a trackpad naturally.
I only use trackpads on osx, but I use scroll wheels on linux and windows too. So I'm fine with whatever on the trackpad, but I need my mouse to stay consistent with the rest of the world.
I get confused about which is natural and which is normal scroll but I have subconscious muscle memory, so if this tools helps people that for whatever reason were trained to have this subconscious muscle memory / why not? It's all pretty arbitrary anyway. Aren't your eyes bolted on upside down and your brain has a layer that inverts it?
I like Natural Scroll on the trackpad because my mind somewhat subconsciously maps the page onto the trackpad. Then, scrolling on the trackpad is like dragging the page up or down with my fingers.
Mentally, the same mapping does not happen with a scroll wheel. So it’s a weird psychological block when I scroll down with a scroll wheel and the page goes up.
For me, it’s because my muscle memory for a mouse (which I use primarily on my work Windows computer, occasionally on my Mac laptop) is different than a trackpad (which I only use with my Mac laptop). Unfortunately, macOS doesn’t let you set different options for each.
Since HN users tend to be more traditional in how they expect their computers to act, I wonder, how many people turn off "natural" scrolling the second they get a new Mac?
I never understood why it was there. It makes a ton of sense for content to scroll in the direction your finger moves when your finger is touching the content, but I fail to understand why you'd expect it to move that way when using a touchpad or a mouse.
Was this done specifically for users who were coming to Mac from iPad?
Arguably, the other direction is less intuitive. When Apple introduced this, it took me a couple days to adapt, but now if I ever end up on a Windows machine with the scroll setting in "unnatural" mode, it makes no sense.
I agree. I find "natural" to be very unnatural, and it seems to be everywhere now. It drives me nuts when I help my wife with something on her laptop. When/how did this become the norm, because it seems like it was not at one time?
I suppose most computer users don't consider settings at all and just go with whatever the default is and eventually get comfortable using that, not knowing it's not "normal". But who made the change so that this became the new normal setting?
It was Apple who decided down was up one day. Nowadays on Windows with Synaptics trackpads, we have the same problem (well for me it is, as you say, you prefer it).
It made sense because it relates to PgUp/PgDn or to consider that you're pulling the scrollbar indicator down. (oh, what's that, this UI element is hidden nowadays..?).
I like natural scroll so much I even use AutoHotkey on Windows to emulate the same behavior. Unfortunately, it reverses everything, so, say, volume scroll is reversed too. I'm sure there are workarounds about that.
Unlike some comments here, when I move from TrackPad to mouse, I still think of the scroll wheel as the document, so natural scroll makes more sense for me, personally.
The only thing I would get rid of in TrackPad is the "bounce effect" when you reach the Home/End of the document. Also, many documents are perfectly fit in the app window (e.g. Preview) but still the horizontal scroll moves them around, which is annoying (try opening a new PDF in Preview and use left/right arrow keys to move to next page; it scrolls the document horizontally slightly!)
I used to use this, but I found that it sometimes got disabled when I unplugged and replugged my mouse (and always if I later got a new mouse). I eventually gave up.
Logitech Options has an option to set the scroll direction. As I switch between a trackpad and a Logitech mouse the scroll direction is always set to whichever feels ”expected” to the pointing device I’m using. It was a joyous day to discover the setting in Logitech Options. :)
I've used wheel mice on the Mac from the time the Microsoft USB wheel mouse came out, back when there was a Mac driver that controlled classic Mac apps by looking for scroll bars and sending events, licensed from an Italian developer.
I myself added native wheel support to some major Carbon apps, and convinced other engineers to do it, as I was at Microsoft MacBU at the time.
But anyway, when Apple decided that scroll wheels should work the other way around, I gave it a try. I soon acclimatized to it and never had to change the default again. I would recommend all Mac users try out the "natural" setting and see if you get used to it.
Now explain why I HAVE to invert the y-axis in Halo on XBOX (any version of either). I tried but I can not adjust to the default.
Many years ago, when I was teachin my mother how to use the computer, I noticed something that I recalled the day Apple introduced the "Natural" Scroll thing.
She was working on a Word document, so I told her that she didn't need to click the scroll bar, but to scroll directly using the mouse wheel. To my surprise, she moved the wheel in the "wrong" direction. And for some seconds she was wondering why the whole thing was "inverted". In that moment I thought that probably we were all taught "incorrectly", and maybe, just maybe, "intuitively" people will think about scrolling on the opposite way, but we ended up learning that it was not correct, adapting our minds to the already established behavior of the mouse wheel.
The truth is. I embraced with happiness the "Natural" scrolling from Apple with the touchpad and the magic mouse on macOS, but also had a hard time getting used to this behavior with a regular mouse. I've been struggling since then, and I still use the "classic" scrolling with my Windows-based PC.
Once I gave up on Scroll Revserser, I found Mos[1] as another option for this need. It just got a new v3 release and allows for toggleable smooth scrolling, as well as very granular scrolling options on top of the scroll reversing. I'm a big fan.
I used to use something like this for my mouse, but started using a trackpad full-time so I didn’t need it anymore. Recently I’ve started using a mouse again, but without something like this installed, and now I feel like I like natural scrolling for mice too :/ Must be something you get used to.
I could probably get used to it if I used only macOS, but I use Linux and Windows most of the time and switching scroll directions when I use macOS gets frustrating. That and physical scroll wheels scrolling "unnaturally" is what seems natural to me, @dashwav explains why I feel that way quite well in their reply to another comment.
On my Dell XPS running Ubuntu, I have the touch pad set to "natural" scrolling but I also use a mouse and have that set to traditional scrolling. I find I like this combination a lot, so being able to set up my Mac the same way would be great.
As for why I like them to be different, I think it's all about the tactile experience. I find using the trackpad to be very much like using a touch screen on a phone. In both cases, it's as if I'm manipulating the screen content directly with my finger. With the scroll wheel, it's a different tactile experience and the traditional behavior seems more "correct". Someone could do a nice human factors study on this.
> As for why I like them to be different, I think it's all about the tactile experience. I find using the trackpad to be very much like using a touch screen on a phone.
My personal experience is that after years of keeping the "natural" scroll setting enabled, my scroll wheel has gained some of that tactile feeling in my brain. It's like the wheel is the content, and I'm pushing it up and down with my finger.
However, it definitely took longer for this to happen than with a TrackPad.
Interesting observation. I've never taken the time to try to retrain myself to use a mouse in natural mode. This is in part due to the fact that I am a Linux system administrator and I am often working on systems that aren't mine. I think it would be very confusing if the mouse on my Linux workstation worked one way and everyone else's worked differently.
This is awesome! Thank you so much for making this!
Every day I have to relearn how to scroll when I switch back and forth from my Mac and Windows machines. It frustrated me that the scrolling direction of two completely different input mechanisms were tied together.
Do you have a URL where this is touted as "innovative", since you used quote marks? Because I believe it was introduced as a way to be consistent with iOS and how users scroll using that OS. No one was filing patents on this one, however.
Because the Moore’s law has petered out and software bloat reached unimaginable levels and is incomprehensible to its authors thus we are getting “innovations” of this sort.
Hey, did you see the new animated emoji pack the new version is shipping with? Really should check it out!
I’m a happy user of ControlPlane since many years for exactly this purpose.
> With ControlPlane you can intelligently reconfigure your Mac or perform any number of actions based on input from a wide variety of evidence sources […]
I also use Steermouse so that I can actually bind the back/forward keys to CMD+[ / CMD+], while also disabling regular pointer acceleration alongside the scroll issues.
I also don't think it runs as an accessibility service, but as a low-level driver.
I would never use this - it makes sense for the trackpad and mouse to work in the “natural” direction, just like on an iPhone and iPad screen. When I use Windows on a real PC then it confuses me, but that is rare I do that. So this makes no sense to me, but hey, whatever floats your boat ;-)
So I like Mac hardware and to this day for reasons I cannot fathom, I still consider the Macbook trackpad to be the only usable incarnation of this technology I've ever seen. This goes beyond hardware too as it seems like integration into the OS is a key factor. Touch pads still feel kludgy on Windows and Linux (to me at least). Even on Mac hardware.
But there are certain UX fails by Apple I cannot comprehend and this is one of them.
I remember when this changed. It was years ago now. Apple decided the previous way of doing things was unnatural and just reversed it. If you want it the "unnatural" way you could use a setting. But the inability to split how the trackpad worked and how a scroll wheel worked is nothing short of pigheadedness ("no, it's the users who are wrong" to paraphrase Principal Skkinner).
Sadly this isn't an isolated example.
The earlier iPads had an orientation lock physical switch on them. I love this feature. And then Apple decided this was "inconsistent" with the iPhone (which had no such switch) and removed it. I mean the switch was obviously still there but now it did something completely useless. I think it muted the iPad instead? If you wanted this you could just hold down the volume down button. Then they briefly added back the option of getting the old behaviour but that only lasted briefly before that option and ultimately the switch were entirely gone. I used the orientation lock all the time and I'm still dark about it.
Another: a Bluetooth keyboard or trackpad connected to the laptop by USB will automatically pair. Great feature. Compare this to the Bose headphones I have, which are a total nightmare as soon as you pair to more than one device to the point where I've installed homebrew packages and scripts to disconnect Bluetooth when I close the lid of my Macbook (who decided it was a good default to pair to a Macbook with the lid closed vs one with its lid open? I mean does anyone even use pairing to a closed Macbook?). The problem? There's a popup I need to dismiss saying "This trakcpad is now wirelessly connected to your computer". Great. I don't care. I don't ever want to see this message again. Is there an option for that? No!
I find full screen mode for apps great. I often have it set up so my IDE is one screen and I can swipe left and right between my main desktop and my IDE. The problem? If your mouse gets near the top of the screen a menu bar appears, often obscuring the top of your IDE so you have to walk this fine line between getting high enough on the screen but not too high.
I have a 32" 4K monitor. I'm fine with the menu being visible all the time to avoid this. Really. Why don't I have that option?
Years ago Chrome actually worked like that. Then it mysteriously disappeared. When I worked at Google I asked about this and was told something like it was considered a "bug" and it violated Apple's UI guidelines or something similar. So now we have the dumb version.
Yet another: if you have multiple monitors, one of them is the "main" display. It has the dock. If you hit the bottom of the screen on a different monitor the dock will move. You can't turn this "feature" off. The best you can do is put the dock somewhere else. I don't want the dock somewhere else.
What's really troubling about the last two is they really ignore the basic tenets of HCI in that the corners and edges of the screen are the easiest places to hit. Microsoft famously ignored this years ago when on Windows 9x the Start button was offset by a couple of pixels from the corner for no good reasons. No doubt some designer's opinionated sense of aesthetics.
So, rant aside, thanks for making this utility. I know there have been other solutions to this as well. Part of me still hopes Apple sees reason and reverses their dumb decisions here.
The difference in scrolling is quite jarring when first using MacOS after being familiar with other environments. I imagine many people googling how to fix it, only to find Apple called their way "natural scrolling" just to add insult to injury.
[Don't you people have better things to downvote?]
Also along these lines of bizarre defaults, I don't remember how but I had to change key press settings to allow for repeated presses. Apparently the default behavior is to give you accent character options. Then from there I had to change the interval/initial timings to be closer to Linux/Windows as well. Of course now I'm paying the price with the dreaded repeat inputs on this keyboard