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

一上午撸了个用 karabiner 通过 shift 切换中英文的脚本,有个问题

  •  
  •   freewarcraft · 2015-09-01 14:54:51 +08:00 · 3938 次点击
    这是一个创建于 3405 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第一次用,结果默认选项里好像没这个功能,于是自己撸一个,研究了老半天 sample 才明白

    我的 mac 就中英 2 种输入法,另外双击左右 cmd 都是激活 alfred 。

    代码如下:(强迫症请无视里面的 begin 和 end ,可以删掉的。。。)
    <item>
    <name>Switch_Chinese_English</name>
    <appendix>Switch_Chinese_English</appendix>
    <identifier>private.switch</identifier>
    <autogen>__HoldingKeyToKey__
    KeyCode::SHIFT_R,
    @begin
    KeyCode::SPACE, ModifierFlag::COMMAND_L, ModifierFlag::OPTION_L,
    @end
    @begin
    KeyCode::VK_NONE, KeyCode::SHIFT_R,
    @end
    ThresholdMillisecond::RawValue::150,
    </autogen>
    <autogen>__HoldingKeyToKey__
    KeyCode::SHIFT_L,
    KeyCode::SPACE, ModifierFlag::COMMAND_L, ModifierFlag::OPTION_L,
    KeyCode::VK_NONE, KeyCode::SHIFT_L,
    ThresholdMillisecond::RawValue::150,
    </autogen>
    </item>

    说明:
    按左右 shift 都可以切换中英文输入法,和 win 一样
    按住 shift 的功能不变
    因为我切换语言的快捷键是 cmd +空格和 alt + cmd +空格(反向),所以代码里用 cmd +空格时,连按 shift 会呼出 alfred ,改为 alt + cmd +空格就不会了。

    一个问题:
    现在我把按键时间设为 150ms (再短就容易出现超时),也就是说按下 shift 然后松开要在 150ms 内完成,才会切换输入法,超时后就变为长按 shift 的效果。
    但是在按下 shift 的 150ms 内再按其他键(即要的是长按 shift 效果而非切换输入法效果),会导致 shift 键的 holding 状态被打断而变成切换输入法。
    这个问题能解决吗?
    8 条回复    2015-09-02 14:17:33 +08:00
    freewarcraft
        1
    freewarcraft  
    OP
       2015-09-01 14:59:40 +08:00
    注意,代码中“ holdingkeytokey ”前面的 2 个“_”和后面的一个“_”黏贴进来以后被删了,用的时候记得加上。。。
    freewarcraft
        2
    freewarcraft  
    OP
       2015-09-01 15:01:46 +08:00
    噢,原来是 markdown 的问题,现在代码显示没问题了
    Sylv
        3
    Sylv  
       2015-09-01 15:15:36 +08:00 via iPhone
    用手机看代码不方便,所以没细看你的配置代码。
    我同样也是自己用 karabiner 研究出了用 shift 来切换输入法的方法,用了好几个月了,挺顺手的,没什么问题。
    这贴的 17 楼有我的配置代码,你可以参考下:
    /t/205046
    Sylv
        4
    Sylv  
       2015-09-01 15:21:31 +08:00 via iPhone
    粗略看了下,你的问题可能是因为用了 __HoldingKeyToKey__ 命令导致的,应该这个命令就是这么设计的,你像我一样改用成 __KeyOverlaidModifier__ 命令来实现应该就不会有这个问题了。
    freewarcraft
        5
    freewarcraft  
    OP
       2015-09-01 16:05:44 +08:00
    @Sylv 用了你写的配置,真是太方便了,感谢感谢,看来是我造轮子了。。。
    ewBuyVmLZMZE
        6
    ewBuyVmLZMZE  
       2015-09-01 17:04:56 +08:00
    ……好冷的实现,但是我已经习惯了 Command + Space
    zander
        7
    zander  
       2015-09-01 18:10:06 +08:00
    按 caps lock 就可以切换到英文模式吧。
    莫非把 caps lock 变成 control 了?
    pheyer
        8
    pheyer  
       2015-09-02 14:17:33 +08:00
    可以把 caps lock 设置为切换中英文的快捷键,要不然找一个支持 shift 切换中英文的输入法不就是了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4580 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:56 · PVG 17:56 · LAX 01:56 · JFK 04:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.