干掉 MAC 系统的 ctrl + click = right click(包括支持 idea 下 ctrl+click 跳转定义处功能) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
perfee
V2EX    macOS

干掉 MAC 系统的 ctrl + click = right click(包括支持 idea 下 ctrl+click 跳转定义处功能)

  •  1
     
  •   perfee 2020-11-22 22:55:29 +08:00 2292 次点击
    这是一个创建于 1791 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MAC:“用户你好,我是你爹”。 “如果你不用 mac 鼠标,那最好不要用外设鼠标了,因为我规定 ctrl+click = ight click” 。。。。

    说下背景:

    我是个软粉,酷爱 windows 。所以日常常用快捷键都是 win 风格,尤其是 IDE 中,ctrl + click 调转到代码定义处,早形成了肌肉记忆。你让我改?改是不可能改的。

    无奈公司发 mac 电脑,看着同事都用 mac,我把 mac 扔一边吃灰,继续用着我的 surface 写代码。过了一年多,我觉得每天上下班拿电脑有些累,那能不能用着 mac,还使用着 win 风格的快捷键?我开始尝试了。 平时常用的 ctrl+c,v,a,z,s 等等,这些都好办,搞一个全局的映射就好了嘛(这里推荐免费神器 Karabiner: https://github.com/pqrs-org/Karabiner-Elements )。 另外 cmd,alt,fn,ctrl 键盘位置互换,mac 也提供的有这个功能。用外设的时候可以根据外部键盘互换一下。

    好了,开始进入正题:

    MAC 上的 ctrl + click = right click 这个设定十分恶心,我是无论如何也不接受这个设定的。 上 Karabiner 代码,把 ctrl + click 改成 ${ 当前是 idea 吗 ? (ctrl + B) : click}. 这个代码既全局屏蔽了 ctrl + click = right click 的设定,也能在 idea 上正常工作,让其实现跳转到定义处功能。 //代码明天上班后贴上来。

    另外我还想到了在 mac 神器 iterm2 上,实现右键复制,右键粘贴的功能,就像 windows terminal 上行为一样吗,明天开始写 script 实现它。

    第 1 条附言    2020-11-25 22:33:33 +08:00

    附上 karabiner 修改 idea ctrl+click (ctrl+alt+click 的未实现,不过如出一辙,把代码改下就可以实现 ctrl+alter+click 避免出现右键菜单的功能)代码:

    { "title": "Ctrl Click On Idea", "rules": [ { "description": "Ctrl Click On Idea", "manipulators": [ { "type": "basic", "from": { "pointing_button": "button1", "modifiers": { "mandatory": [ "left_control" ], "optional": [ "caps_lock" ] } }, "to": [ { "pointing_button": "button1" } ], "to_delayed_action": { "to_if_invoked": [ { "key_code": "b", "modifiers": [ "left_control" ] } ] }, "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "^com\\.jetbrains\\.intellij" ] } ], "parameters": { "basic.to_delayed_action_delay_milliseconds": 10 } } ] }, { "description": "Disabled Ctrl + Left", "manipulators": [ { "type": "basic", "from": { "pointing_button": "button1", "modifiers": { "mandatory": [ "left_control" ], "optional": [ "caps_lock" ] } }, "to": [ { "pointing_button": "button1" } ] } ] } ] } 

    导入到 karabiner 中即可。

    第 2 条附言    2020-11-25 22:34:02 +08:00
    **下面是 iterm2 上,实现选中后右键复制,右键粘贴的代码:**
    ```
    #!/usr/bin/env python3.7

    import iterm2

    async def main(connection):
    app = await iterm2.async_get_app(connection)

    @iterm2.RPC
    async def smartCopyAndPaste():
    window = app.current_terminal_window
    if (window is None): return
    tab = window.current_tab
    if (tab is None): return
    session = tab.current_session
    if (session is None): return
    selection = await session.async_get_selection()
    text = await session.async_get_selection_text(selection)

    if ((text is None) or (len(text) == 0)):
    await iterm2.MainMenu.async_select_menu_item(connection, "Paste")
    return

    await iterm2.MainMenu.async_select_menu_item(connection, "Copy")
    await session.async_set_selection(iterm2.Selection([]))

    # Remember to call async_register!
    await smartCopyAndPaste.async_register(connection)

    iterm2.run_forever(main)
    ```
    把上述代码导入到 iterm2 的 script 中,然后绑定一个快捷键(假定是 **ctrl+alt+m**) 来执行这个 smartCopyAndPaste() 方法,最后用 karabiner 设置在 iterm2 上把右键映射为 **ctrl+alt+m**。
    这样点右键等同于执行上述代码,就实现了:
    右键 -> 有选中文本吗 ? (复制&取消选中) : 粘贴。
    的效果
    第 3 条附言    2020-11-25 22:41:56 +08:00

    上边 iterm2 的 python 代码缩进坏了,因为我发布的时候忘记选择 markdown 了。这里补一下吧,万一真有人要用呢,也算是个小小的分享了。

    #!/usr/bin/env python3.7 import iterm2 async def main(connection): app = await iterm2.async_get_app(connection) @iterm2.RPC async def smartCopyAndPaste(): window = app.current_terminal_window if (window is None): return tab = window.current_tab if (tab is None): return session = tab.current_session if (session is None): return selection = await session.async_get_selection() text = await session.async_get_selection_text(selection) if ((text is None) or (len(text) == 0)): await iterm2.MainMenu.async_select_menu_item(connection, "Paste") return await iterm2.MainMenu.async_select_menu_item(connection, "Copy") await session.async_set_selection(iterm2.Selection([])) # Remember to call async_register! await smartCopyAndPaste.async_register(connection) iterm2.run_forever(main) 
    4 条回复    2020-11-25 22:39:50 +08:00
    kingfalse
        1
    kingfalse  
       2020-11-23 08:53:20 +08:00 via Android   4
    建议别折腾了,直接装 windows
    perfee
        2
    perfee  
    OP
       2020-11-25 22:23:42 +08:00
    @kingfalse 公司电脑,安全组的人天天监控着,动不得啊。

    已经折腾完毕了,基本上所有操作都保持和 windows 上一致了。
    全局替换了 ctrl+c,a,z,v,x -> cmd+c,a,z,v,x
    idea 所有快捷键和 win 完全一致
    alt+tab 已找到替代软件
    连 iterm2 上的右键复制,右键粘贴都让我给写脚本实现了,目前保持和 windows terminal 完全一致。
    叉会儿腰。
    perfee
        3
    perfee  
    OP
       2020-11-25 22:37:50 +08:00
    我认为基本上 mac 上所有的快捷键问题都可以用 karabiner 搞定,就是有的需要自己写一点脚本,官网文档很全,都有 demo 。
    另外 iterm2 真是个神器,写代码可以定制超多功能,基本上可以做到随心所欲了。
    最重要的是这两个东西都是免费的。
    perfee
        4
    perfee  
    OP
       2020-11-25 22:39:50 +08:00
    上边 iterm2 的 python 代码缩进坏了,因为我发布的时候忘记选择 markdown 了。这里补一下吧,万一真有人要用呢,也算是个小小的分享了。

    #!/usr/bin/env python3.7

    import iterm2

    async def main(connection):
    app = await iterm2.async_get_app(connection)

    @iterm2.RPC
    async def smartCopyAndPaste():
    window = app.current_terminal_window
    if (window is None): return
    tab = window.current_tab
    if (tab is None): return
    session = tab.current_session
    if (session is None): return
    selection = await session.async_get_selection()
    text = await session.async_get_selection_text(selection)

    if ((text is None) or (len(text) == 0)):
    await iterm2.MainMenu.async_select_menu_item(connection, "Paste")
    return

    await iterm2.MainMenu.async_select_menu_item(connection, "Copy")
    await session.async_set_selection(iterm2.Selection([]))

    # Remember to call async_register!
    await smartCopyAndPaste.async_register(connection)

    iterm2.run_forever(main)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     897 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 20:00 PVG 04:00 LAX 13:00 JFK 16:00
    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