V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Angryraven
V2EX  ›  macOS

抄一下各位 MX Master3S 的键位设置,鞠躬 🙇‍♂️

  •  
  •   Angryraven · 17 小时 29 分钟前 · 1092 次点击

    3S 用两天了还用不惯,键位设置短时间记不住,判断个人的设置不合理

    另外精度也没找准,总是比我想指的地方偏出那么一小段

    9 条回复    2025-04-27 16:14:41 +08:00
    cusuanan
        1
    cusuanan  
       17 小时 23 分钟前
    侧键 Ctrl C 和 Ctrl V
    拇指按键 Enter
    然后配合 strokesplus 使用
    peteretep
        2
    peteretep  
       17 小时 22 分钟前
    不习惯就换
    好的硬件基本一上手就知道合手的,2 天没感觉舒服,那就是型号选错了
    linxi7
        3
    linxi7  
       17 小时 15 分钟前
    https://imgur.la/images/2025/04/27/Screen-Shot-2025-04-27-at-09.29.12.png
    我用的 3 ,主要改了拇指位的自定义按键,其他全默认
    adamwang
        4
    adamwang  
       16 小时 27 分钟前
    我的是用 Mac Mouse Fix 设置,设置如下
    shigella
        5
    shigella  
       16 小时 18 分钟前

    把所有日常用的快捷键都绑鼠标上了
    3x4 的组合非常夸张 但是用惯了已经有肌肉记忆了
    1101x1
        6
    1101x1  
       15 小时 46 分钟前
    bettermouse
    Tink
        7
    Tink  
       15 小时 22 分钟前
    我是 hammerspoon 实现的

    ```
    -- 创建日志记录器
    local logger = hs.logger.new('MouseShortcuts','debug')

    -- 创建鼠标事件监听器
    -- Logitech Anywhere 2S 按键映射
    local mouseButtons = {
    left = 0,
    right = 1,
    back = 3, -- 靠后侧键
    forward = 4, -- 靠前侧键
    wheel_button = 2 -- 滚轮后边的功能键
    }

    -- 声明监听器变量
    local mouseWatcher = nil
    local scrollWatcher = nil

    -- 定义快捷键行为
    local function handleMouseButton(button, modifiers)
    -- 滚轮后边的功能键 = Mission Control
    if button == mouseButtons.wheel_button then
    hs.task.new("/usr/bin/open", nil, {"-a", "Mission Control"}):start()
    return true
    end

    -- 靠前侧键 = 返回
    if button == mouseButtons.forward then
    hs.eventtap.keyStroke({"cmd"}, "[")
    return true
    end

    -- 靠后侧键 = 前进
    if button == mouseButtons.back then
    hs.eventtap.keyStroke({"cmd"}, "]")
    return true
    end

    return false
    end

    -- 处理滚轮横向滚动
    local function handleScrollWheel(event)
    -- 使用 axis2 来监听横向滚动
    local dx = event:getProperty(hs.eventtap.event.properties['scrollWheelEventDeltaAxis2'])

    -- 输出滚轮事件日志
    if dx ~= 0 then
    logger.i(string.format("滚轮横向拨动 - 方向值: %d", dx))
    end

    -- 如果不是横向滚动,直接返回
    if dx == 0 then return false end

    -- 直接根据方向触发切换
    if dx < 0 then
    logger.i("切换到左边桌面")
    hs.task.new("/usr/bin/osascript", nil, {"-e", 'tell application "System Events" to key code 123 using control down'}):start()
    return true
    elseif dx > 0 then
    logger.i("切换到右边桌面")
    hs.task.new("/usr/bin/osascript", nil, {"-e", 'tell application "System Events" to key code 124 using control down'}):start()
    return true
    end

    return false
    end

    -- 创建监听器的函数
    local function createWatchers()
    -- 创建鼠标按键事件监听
    mouseWatcher = hs.eventtap.new({
    hs.eventtap.event.types.otherMouseDown,
    hs.eventtap.event.types.otherMouseUp,
    hs.eventtap.event.types.leftMouseDown,
    hs.eventtap.event.types.leftMouseUp,
    hs.eventtap.event.types.rightMouseDown,
    hs.eventtap.event.types.rightMouseUp,
    hs.eventtap.event.types.otherMouseDragged
    }, function(event)
    local eventType = event:getType()
    local button = event:getProperty(hs.eventtap.event.properties.mouseEventButtonNumber)
    local modifiers = event:getFlags()

    -- 转换修饰键为数组形式
    local modArray = {}
    for k, v in pairs(modifiers) do
    table.insert(modArray, k)
    end

    -- 获取事件类型的可读名称
    local eventNames = {
    [hs.eventtap.event.types.otherMouseDown] = "其他按键按下",
    [hs.eventtap.event.types.otherMouseUp] = "其他按键释放",
    [hs.eventtap.event.types.leftMouseDown] = "左键按下",
    [hs.eventtap.event.types.leftMouseUp] = "左键释放",
    [hs.eventtap.event.types.rightMouseDown] = "右键按下",
    [hs.eventtap.event.types.rightMouseUp] = "右键释放",
    [hs.eventtap.event.types.otherMouseDragged] = "其他按键拖动"
    }

    -- 输出鼠标事件日志
    -- logger.i(string.format("鼠标事件 - 类型: %s, 按钮: %d, 修饰键: %s",
    -- eventNames[eventType] or eventType,
    -- button or 0,
    -- hs.inspect(modArray)))

    -- 仅对按下事件执行操作
    if eventType == hs.eventtap.event.types.otherMouseDown then
    return handleMouseButton(button, modArray)
    end

    return false
    end)

    -- 创建滚轮事件监听
    scrollWatcher = hs.eventtap.new({
    hs.eventtap.event.types.scrollWheel
    }, handleScrollWheel)

    -- 启动监听器
    mouseWatcher:start()
    scrollWatcher:start()
    end

    -- 检查并重启监听器的函数
    local function checkWatchers()
    if not mouseWatcher:isEnabled() or not scrollWatcher:isEnabled() then
    logger.w("监听器已停止,尝试重新启动...")
    -- 停止现有监听器
    if mouseWatcher then mouseWatcher:stop() end
    if scrollWatcher then scrollWatcher:stop() end
    -- 重新创建并启动监听器
    createWatchers()
    logger.i("监听器已重新启动")
    end
    end

    -- 创建定时器定期检查监听器状态
    local watcherChecker = hs.timer.new(5, checkWatchers)
    watcherChecker:start()

    -- 初始化监听器
    createWatchers()

    -- 添加快捷键用于手动重启监听器
    hs.hotkey.bind({"cmd", "alt"}, "m", function()
    logger.i("手动重启鼠标监听器...")
    createWatchers()
    logger.i("鼠标监听器已重启")
    end)

    logger.i("鼠标快捷键模块已加载")
    ```
    Angryraven
        8
    Angryraven  
    OP
       14 小时 4 分钟前
    感谢各位回复,看我感觉这鼠标不适合我...伤脑筋
    ekikaizeng
        9
    ekikaizeng  
       10 小时 31 分钟前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:46 · PVG 02:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.