gitextract_23xgv3jw/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── release.yml │ └── workflows/ │ ├── add-coauthor.yml │ ├── build.yml │ └── stale.yml ├── .gitignore ├── .swift-version ├── .swiftformat ├── .swiftlint.yml ├── .vscode/ │ └── settings.json ├── ACCESSIBILITY.md ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING-cn.md ├── CONTRIBUTING.md ├── Config.xcconfig ├── Documentation/ │ ├── Configuration.d.ts │ ├── Configuration.json │ ├── Configuration.md │ └── translate-xcstrings.md ├── ExportOptions.plist ├── LICENSE ├── LinearMouse/ │ ├── AccessibilityPermission.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets/ │ │ ├── AccentColor.colorset/ │ │ │ └── Contents.json │ │ ├── AccessibilityIcon.imageset/ │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── AppIconDev.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── MenuIcon.imageset/ │ │ │ └── Contents.json │ │ ├── Minus.imageset/ │ │ │ └── Contents.json │ │ ├── Plus.imageset/ │ │ │ └── Contents.json │ │ └── Sidebar/ │ │ ├── Buttons.imageset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── General.imageset/ │ │ │ └── Contents.json │ │ ├── Modifier Keys.imageset/ │ │ │ └── Contents.json │ │ ├── Pointer.imageset/ │ │ │ └── Contents.json │ │ └── Scrolling.imageset/ │ │ └── Contents.json │ ├── AutoUpdateManager.swift │ ├── DefaultsKeys.swift │ ├── Device/ │ │ ├── Device.swift │ │ ├── DeviceManager.swift │ │ ├── InputReportHandler.swift │ │ ├── InputReportHandlers/ │ │ │ ├── GenericSideButtonHandler.swift │ │ │ └── KensingtonSlimbladeHandler.swift │ │ ├── ReceiverLogicalDeviceIdentity.swift │ │ ├── ReceiverMonitor.swift │ │ └── VendorSpecific/ │ │ ├── BatteryDeviceMonitor.swift │ │ ├── ConnectedBatteryDeviceInventory.swift │ │ ├── ConnectedLogitechDeviceInventory.swift │ │ ├── Logitech/ │ │ │ └── LogitechHIDPPDeviceMetadataProvider.swift │ │ ├── PointerDevice+VendorSpecificDeviceContext.swift │ │ └── VendorSpecificDeviceMetadata.swift │ ├── EventTap/ │ │ ├── EventTap.swift │ │ ├── EventThread.swift │ │ ├── EventType.swift │ │ ├── GlobalEventTap.swift │ │ └── GlobalEventTapWatchdog.swift │ ├── EventTransformer/ │ │ ├── AutoScrollTransformer.swift │ │ ├── ButtonActionsTransformer.swift │ │ ├── ClickDebouncingTransformer.swift │ │ ├── EventTransformer.swift │ │ ├── EventTransformerManager.swift │ │ ├── GestureButtonTransformer.swift │ │ ├── LinearScrollingHorizontalTransformer.swift │ │ ├── LinearScrollingVerticalTransformer.swift │ │ ├── LogitechEventContext.swift │ │ ├── ModifierActionsTransformer.swift │ │ ├── PointerRedirectsToScrollTransformer.swift │ │ ├── ReverseScrollingTransformer.swift │ │ ├── ScrollingAccelerationSpeedAdjustmentTransformer.swift │ │ ├── SmoothedScrollingEngine.swift │ │ ├── SmoothedScrollingTransformer.swift │ │ ├── SwitchPrimaryAndSecondaryButtonsTransformer.swift │ │ └── UniversalBackForwardTransformer.swift │ ├── EventView/ │ │ ├── EventView.swift │ │ ├── MouseEventView.swift │ │ └── ScrollWheelEventView.swift │ ├── Info.plist │ ├── LinearMouse-Bridging-Header.h │ ├── LinearMouse.entitlements │ ├── LinearMouse.swift │ ├── Localizable.xcstrings │ ├── Model/ │ │ ├── AppTarget.swift │ │ ├── Configuration/ │ │ │ ├── Configuration.swift │ │ │ ├── DeviceMatcher.swift │ │ │ └── Scheme/ │ │ │ ├── Buttons/ │ │ │ │ ├── AutoScroll/ │ │ │ │ │ └── AutoScroll.swift │ │ │ │ ├── Buttons.swift │ │ │ │ ├── ClickDebouncing/ │ │ │ │ │ └── ClickDebouncing.swift │ │ │ │ ├── Gesture/ │ │ │ │ │ └── Gesture.swift │ │ │ │ └── Mapping/ │ │ │ │ ├── Action+Codable.swift │ │ │ │ ├── Action+CustomStringConvertible.swift │ │ │ │ ├── Action+Kind.swift │ │ │ │ ├── Action.swift │ │ │ │ └── Mapping.swift │ │ │ ├── If/ │ │ │ │ └── If.swift │ │ │ ├── Pointer.swift │ │ │ ├── Scheme.swift │ │ │ └── Scrolling/ │ │ │ ├── Bidirectional.swift │ │ │ ├── Distance+Mode.swift │ │ │ ├── Distance.swift │ │ │ ├── Modifiers+Kind.swift │ │ │ ├── Modifiers.swift │ │ │ ├── Scrolling.swift │ │ │ └── Smoothed.swift │ │ └── DeviceModel.swift │ ├── ModifierKeys.swift │ ├── ScreenManager/ │ │ └── ScreenManager.swift │ ├── State/ │ │ ├── ConfigurationState.swift │ │ ├── DeviceState.swift │ │ ├── ModifierState.swift │ │ ├── SchemeState.swift │ │ └── SettingsState.swift │ ├── UI/ │ │ ├── AccessibilityPermissionView.swift │ │ ├── AccessibilityPermissionWindow.swift │ │ ├── Base.lproj/ │ │ │ └── Main.storyboard │ │ ├── ButtonStyle/ │ │ │ └── SecondaryButtonStyle.swift │ │ ├── ButtonsSettings/ │ │ │ ├── AutoScrollSection/ │ │ │ │ └── AutoScrollSection.swift │ │ │ ├── ButtonMappingsSection/ │ │ │ │ ├── ButtonMapping.swift │ │ │ │ ├── ButtonMappingAction/ │ │ │ │ │ ├── ButtonMappingAction+Binding.swift │ │ │ │ │ ├── ButtonMappingAction.swift │ │ │ │ │ ├── ButtonMappingActionKeyPress.swift │ │ │ │ │ ├── ButtonMappingActionPicker.swift │ │ │ │ │ ├── ButtonMappingActionRun.swift │ │ │ │ │ ├── ButtonMappingActionScroll.swift │ │ │ │ │ └── ScrollingDistance+Binding.swift │ │ │ │ ├── ButtonMappingButtonRecorder.swift │ │ │ │ ├── ButtonMappingEditSheet.swift │ │ │ │ └── ButtonMappingsSection.swift │ │ │ ├── ButtonsSettings.swift │ │ │ ├── ButtonsSettingsState.swift │ │ │ ├── ClickDebouncingSection.swift │ │ │ ├── GestureButtonSection/ │ │ │ │ ├── GestureActionPicker.swift │ │ │ │ └── GestureButtonSection.swift │ │ │ ├── SwitchPrimaryAndSecondaryButtonsSection.swift │ │ │ └── UniversalBackForwardSection.swift │ │ ├── CheckForUpdatesView.swift │ │ ├── DetailView/ │ │ │ └── DetailView.swift │ │ ├── Extensions/ │ │ │ ├── NSWindow.swift │ │ │ └── View.swift │ │ ├── GeneralSettings/ │ │ │ ├── ConfigurationSection.swift │ │ │ ├── GeneralSettings.swift │ │ │ └── LoggingSection.swift │ │ ├── Header/ │ │ │ ├── AppIndicator/ │ │ │ │ ├── AppIndicator.swift │ │ │ │ └── AppPickerSheet/ │ │ │ │ ├── AppPicker.swift │ │ │ │ ├── AppPickerSheet.swift │ │ │ │ └── AppPickerState.swift │ │ │ ├── DeviceIndicator/ │ │ │ │ ├── DeviceIndicator.swift │ │ │ │ ├── DeviceIndicatorState.swift │ │ │ │ └── DevicePickerSheet/ │ │ │ │ ├── DeviceButtonStyle.swift │ │ │ │ ├── DevicePicker.swift │ │ │ │ ├── DevicePickerBatteryCoordinator.swift │ │ │ │ ├── DevicePickerSection.swift │ │ │ │ ├── DevicePickerSectionItem.swift │ │ │ │ ├── DevicePickerSheet.swift │ │ │ │ └── DevicePickerState.swift │ │ │ ├── DisplayIndicator/ │ │ │ │ ├── DisplayIndicator.swift │ │ │ │ └── DisplayPickerSheet/ │ │ │ │ ├── DisplayPicker.swift │ │ │ │ ├── DisplayPickerSheet.swift │ │ │ │ └── DisplayPickerState.swift │ │ │ └── SchemeIndicator.swift │ │ ├── HelpButton/ │ │ │ └── HelpButton.swift │ │ ├── HyperLink.swift │ │ ├── PointerSettings/ │ │ │ ├── PointerSettings.swift │ │ │ └── PointerSettingsState.swift │ │ ├── ScrollingSettings/ │ │ │ ├── Header.swift │ │ │ ├── ModifierKeysSection/ │ │ │ │ ├── ModifierAction+Binding.swift │ │ │ │ ├── ModifierKeyActionPicker.swift │ │ │ │ └── ModifierKeysSection.swift │ │ │ ├── ReverseScrollingSection.swift │ │ │ ├── ScrollingModeSection.swift │ │ │ ├── ScrollingSettings.swift │ │ │ ├── ScrollingSettingsState.swift │ │ │ └── SmoothedScrollingSection.swift │ │ ├── Settings.swift │ │ ├── SettingsWindowController.swift │ │ ├── Sidebar/ │ │ │ ├── Sidebar.swift │ │ │ └── SidebarItem.swift │ │ ├── StatusItem.swift │ │ ├── ViewModifiers/ │ │ │ └── FormViewModifier.swift │ │ ├── VisualEffectView.swift │ │ └── zh-Hant-HK.lproj/ │ │ └── Main.strings │ └── Utilities/ │ ├── Application.swift │ ├── ApplicationBundle.swift │ ├── CGEvent+LinearMouseSynthetic.swift │ ├── Codable/ │ │ ├── Clamp.swift │ │ ├── HexRepresentation.swift │ │ ├── ImplicitOptional.swift │ │ ├── SingleValueOrArray.swift │ │ └── Unsettable.swift │ ├── CustomDecodingError.swift │ ├── Extensions.swift │ ├── KeyboardSettingsSnapshot.swift │ ├── Notifier.swift │ ├── Process.h │ ├── Process.m │ ├── ProcessEnvironment.swift │ ├── WeakRef.swift │ └── WindowInfo.swift ├── LinearMouse.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm/ │ │ └── Package.resolved │ └── xcshareddata/ │ └── xcschemes/ │ └── LinearMouse.xcscheme ├── LinearMouseUnitTests/ │ ├── Device/ │ │ ├── InputReportHandlerTests.swift │ │ └── VendorSpecificDeviceMetadataTests.swift │ ├── EventTransformer/ │ │ ├── AutoScrollTransformerTests.swift │ │ ├── ButtonActionsTransformerTests.swift │ │ ├── EventTransformerManagerTests.swift │ │ ├── LinearScrollingTransformerTests.swift │ │ ├── ModifierActionsTransformerTests.swift │ │ ├── ReverseScrollingTransformerTests.swift │ │ ├── SmoothedScrollingEngineTests.swift │ │ ├── SmoothedScrollingTransformerTests.swift │ │ └── UniversalBackForwardTransformerTests.swift │ ├── Model/ │ │ ├── ConfigurationTests.swift │ │ └── Scheme/ │ │ ├── Buttons/ │ │ │ ├── GestureTests.swift │ │ │ └── MappingActionKindTests.swift │ │ └── Scrolling/ │ │ ├── BidirectionalTests.swift │ │ ├── DistanceModeTests.swift │ │ └── ModifiersKindTests.swift │ ├── UI/ │ │ ├── ButtonMappingActionBindingTests.swift │ │ ├── ModifierKeyActionPickerTests.swift │ │ ├── ScrollingDistanceBindingTests.swift │ │ └── StatusItemBatteryIndicatorTests.swift │ └── Utilities/ │ ├── Codable/ │ │ └── ImplicitOptionalTests.swift │ └── KeyboardSettingsSnapshotTests.swift ├── Makefile ├── Modules/ │ ├── DockKit/ │ │ ├── .gitignore │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ ├── DockKit/ │ │ │ │ └── DockKit.swift │ │ │ └── DockKitC/ │ │ │ ├── DockKitC.m │ │ │ └── include/ │ │ │ └── ApplicationServicesSPI.h │ │ └── Tests/ │ │ └── DockKitTests/ │ │ └── DockKitTests.swift │ ├── GestureKit/ │ │ ├── .gitignore │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ └── GestureKit/ │ │ │ ├── CGEventField+Extensions.swift │ │ │ ├── CGEventType+Extensions.swift │ │ │ ├── GestureEvent+NavigationSwipe.swift │ │ │ ├── GestureEvent+Zoom.swift │ │ │ └── GestureEvent.swift │ │ └── Tests/ │ │ └── GestureKitTests/ │ │ └── GestureKitTests.swift │ ├── KeyKit/ │ │ ├── .gitignore │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ ├── KeyKit/ │ │ │ │ ├── Key.swift │ │ │ │ ├── KeyCodeResolver.swift │ │ │ │ ├── KeySimulator.swift │ │ │ │ ├── SymbolicHotKey.swift │ │ │ │ └── SystemDefinedKey.swift │ │ │ └── KeyKitC/ │ │ │ ├── CGSInternal/ │ │ │ │ ├── CGSAccessibility.h │ │ │ │ ├── CGSCIFilter.h │ │ │ │ ├── CGSConnection.h │ │ │ │ ├── CGSCursor.h │ │ │ │ ├── CGSDebug.h │ │ │ │ ├── CGSDevice.h │ │ │ │ ├── CGSDisplays.h │ │ │ │ ├── CGSEvent.h │ │ │ │ ├── CGSHotKeys.h │ │ │ │ ├── CGSInternal.h │ │ │ │ ├── CGSMisc.h │ │ │ │ ├── CGSRegion.h │ │ │ │ ├── CGSSession.h │ │ │ │ ├── CGSSpace.h │ │ │ │ ├── CGSSurface.h │ │ │ │ ├── CGSTile.h │ │ │ │ ├── CGSTransitions.h │ │ │ │ ├── CGSWindow.h │ │ │ │ └── CGSWorkspace.h │ │ │ ├── KeyKitC.m │ │ │ └── include/ │ │ │ └── KeyKitC.h │ │ └── Tests/ │ │ └── KeyKitTests/ │ │ └── KeyKitTests.swift │ ├── ObservationToken/ │ │ ├── .gitignore │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ └── ObservationToken/ │ │ │ ├── LifetimeAssociation.swift │ │ │ └── ObservationToken.swift │ │ └── Tests/ │ │ └── ObservationTokenTests/ │ │ └── ObservationTokenTests.swift │ ├── PointerKit/ │ │ ├── .gitignore │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources/ │ │ │ ├── PointerKit/ │ │ │ │ ├── Extensions/ │ │ │ │ │ ├── Comparable+Extensions.swift │ │ │ │ │ ├── Dictionary+Extensions.swift │ │ │ │ │ ├── IOHIDElement+Extensions.swift │ │ │ │ │ ├── IOHIDServiceClient+Property.swift │ │ │ │ │ ├── IOHIDServiceClient+Service.swift │ │ │ │ │ └── IOHIDValue+Extensions.swift │ │ │ │ ├── PointerDevice.swift │ │ │ │ └── PointerDeviceManager.swift │ │ │ └── PointerKitC/ │ │ │ ├── PointerKitC.m │ │ │ └── include/ │ │ │ └── IOKitSPIMac.h │ │ └── Tests/ │ │ └── PointerKitTests/ │ │ └── PointerDeviceManagerTest.swift │ └── README.md ├── README-cn.md ├── README.md ├── Scripts/ │ ├── configure-code-signing │ ├── configure-release │ ├── configure-version │ ├── pre-commit │ ├── sign-and-notarize │ └── translate-xcstrings.mjs ├── Signing.xcconfig.tpl ├── crowdin.yml └── package.json