Arc*_*gon 7 mouse navigation logitech-mouse macos
我对我的 Logitech MX Master 鼠标上两个侧键的行为感到困惑。在我所有的其他鼠标上,侧按钮被检测为通用的“按钮 4”和“按钮 5”。(我使用 Xcode 验证了这一点。)与 Windows 相比,OS X 似乎将这些命令视为中间点击,因此为了获得您可能期望的后退/前进行为,您需要使用 USB Overdrive 之类的工具来映射他们到?+[和?+ ]。不幸的是,此解决方法不适用于每个应用程序,并且在您触发它时会闪烁菜单栏。
同时,我的 Xcode 鼠标点击根本无法检测到 Master 上的侧按钮,但不知何故,它们几乎可以在任何带有导航栏的应用程序中使用。我已经在 Finder、Safari、系统偏好设置和 Xcode 中测试过它们。没有菜单闪烁,鼠标光标必须在由导航栏控制的窗口区域上方,这意味着有某种通用的后退/前进事件正在发送(与通常的 M4/M5 相反)。但是,我找不到 OS X 中存在的此类事件的文档。大多数 M4/M5 修复都涉及将这些按钮映射到?+[和?+ ]。
那么 Master 用这些侧键做什么,我如何在所有其他鼠标上复制相同的行为?
小智 12
VS Code 现在支持Go Back和Go Forward操作,默认键绑定分别为CTRL+-和CTRL++ 。SHIFT-
我能够通过以下方式配置 Logi Options 以使用这些快捷方式,而不会破坏其他应用程序:
All Applications-> Add Application-> Other...,然后搜索“Visual Studio Code”Keystroke assignment,按键序列与 VS Code 键绑定匹配这是后退按钮配置的样子,选择了配置文件:
完成这些更改后,前进和后退按钮可以在 VS Code 中使用,并且其他应用程序(例如 Chrome)中的导航不受影响。
我为我的所有NSWindow事件添加了一个水龙头。结果……大师正在模拟滑动事件!
NSEvent: type=Swipe loc=(252,60) time=5443.9 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 1 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5443.9 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 8 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5445.7 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 1 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5445.7 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 8 axis:0 amount=0.000 velocity={0, 0}
Run Code Online (Sandbox Code Playgroud)
好的,这很聪明,因为它基本上意味着它可以在任何支持swipeWithEvent:选择器的视图中工作。我不知道为什么这不是侧面按钮的默认行为!现在我必须弄清楚如何将此功能添加到我的其他鼠标。我不认为 USB Overdrive 可以做这样的事情......除非 AppleScript 有模拟手势的方法。
更新:我设法使用natevw的逆向工程手势模拟功能复制了这些事件,https://github.com/calftrail/Touch。可能仍然需要修复一下,但它有效!最后一步将是创建一个始终运行的应用程序,该应用程序可以处理 M4 和 M5 事件并输出这些手势。
NSEvent: type=Swipe loc=(252,60) time=5443.9 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 1 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5443.9 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 8 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5445.7 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 1 axis:0 amount=0.000 velocity={0, 0}
NSEvent: type=Swipe loc=(252,60) time=5445.7 flags=0x100 win=0x100b091f0 winNum=2014 ctxt=0x0 phase: 8 axis:0 amount=0.000 velocity={0, 0}
Run Code Online (Sandbox Code Playgroud)
更新 2:这是全局捕获 M4 和 M5 并发出滑动的视图控制器的粗略工作草图。
TLInfoSwipeDirection dir = kTLInfoSwipeLeft;
NSDictionary* swipeInfo1 = [NSDictionary dictionaryWithObjectsAndKeys:
@(kTLInfoSubtypeSwipe), kTLInfoKeyGestureSubtype,
@(1), kTLInfoKeyGesturePhase,
nil];
NSDictionary* swipeInfo2 = [NSDictionary dictionaryWithObjectsAndKeys:
@(kTLInfoSubtypeSwipe), kTLInfoKeyGestureSubtype,
@(dir), kTLInfoKeySwipeDirection,
@(4), kTLInfoKeyGesturePhase,
nil];
CGEventRef event1 = tl_CGEventCreateFromGesture((__bridge CFDictionaryRef)(swipeInfo1), (__bridge CFArrayRef)@[]);
CGEventRef event2 = tl_CGEventCreateFromGesture((__bridge CFDictionaryRef)(swipeInfo2), (__bridge CFArrayRef)@[]);
CGEventPost(kCGHIDEventTap, event1);
CGEventPost(kCGHIDEventTap, event2);
// not sure if necessary under ARC
CFRelease(event1);
CFRelease(event2);
Run Code Online (Sandbox Code Playgroud)
更新 3:我发布了一个开源菜单栏应用程序,它为所有第三方鼠标复制了 Master 的行为。它被称为SensibleSideButtons。技术细节在网站上有描述。
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |