一上午撸了个用 karabiner 通过 shift 切换中英文的脚本,有个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
freewarcraft
V2EX    macOS

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

  •  
  •   freewarcraft 2015 年 9 月 1 日 4536 次点击
    这是一个创建于 3890 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第一次用,结果默认选项里好像没这个功能,于是自己撸一个,研究了老半天 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 年 9 月 1 日
    注意,代码中“ holdingkeytokey ”前面的 2 个“_”和后面的一个“_”黏贴进来以后被删了,用的时候记得加上。。。
    freewarcraft
        2
    freewarcraft  
    OP
       2015 年 9 月 1 日
    噢,原来是 markdown 的问题,现在代码显示没问题了
    Sylv
        3
    Sylv  
       2015 年 9 月 1 日 via iPhone
    用手机看代码不方便,所以没细看你的配置代码。
    我同样也是自己用 karabiner 研究出了用 shift 来切换输入法的方法,用了好几个月了,挺顺手的,没什么问题。
    这贴的 17 楼有我的配置代码,你可以参考下:
    /t/205046
    Sylv
        4
    Sylv  
       2015 年 9 月 1 日 via iPhone
    粗略看了下,你的问题可能是因为用了 __HoldingKeyToKey__ 命令导致的,应该这个命令就是这么设计的,你像我一样改用成 __KeyOverlaidModifier__ 命令来实现应该就不会有这个问题了。
    freewarcraft
        5
    freewarcraft  
    OP
       2015 年 9 月 1 日
    @Sylv 用了你写的配置,真是太方便了,感谢感谢,看来是我造轮子了。。。
    ewBuyVmLZMZE
        6
    ewBuyVmLZMZE  
       2015 年 9 月 1 日
    ……好冷的实现,但是我已经习惯了 Command + Space
    zander
        7
    zander  
       2015 年 9 月 1 日
    按 caps lock 就可以切换到英文模式吧。
    莫非把 caps lock 变成 control 了?
    pheyer
        8
    pheyer  
       2015 年 9 月 2 日
    可以把 caps lock 设置为切换中英文的快捷键,要不然找一个支持 shift 切换中英文的输入法不就是了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2806 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 08:32 PVG 16:32 LAX 01:32 JFK 04:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86