macOS 的窗口管理逻辑能不能修改? 例如关闭当前 app 的窗口后, 我要切换到另一个 app - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanhed
V2EX    macOS

macOS 的窗口管理逻辑能不能修改? 例如关闭当前 app 的窗口后, 我要切换到另一个 app

  •  
  •   fanhed 2023-08-03 13:53:03 +08:00 2883 次点击
    这是一个创建于 802 天前的主题,其中的信息可能已经有所发展或是发生改变。

    macOS 傻逼的窗口管理就不细说了. 单独说一个 case 吧, 我经常遇到, 真的很恼火

    1. 在 Finder 中, 在当前目录临时打开一个 iTerm, 用命令行处理完一些业务
    2. 关闭这个 iterm 窗口
    3. 期切换到我正在用的 Finder 窗口, 但是并没有, macOS 会切换到我其他正在开启的 iterm 窗口

    第 3 点请问有没有办法实现我期望的逻辑? 这个问题真的很恼火, 我经常浪费大量时间处理这种 case

    第 1 条附言    2023-08-05 18:37:52 +08:00

    我用hammerspoon实现了一个替代方案, 用cmd-w关闭窗口的时候, 可以切换到前一个窗口

    hs.hotkey.bind({"cmd"}, "w", function() local win = hs.window.focusedWindow() local prevWin = hs.window.orderedWindows()[2] --win:close() -- NOTE: another window of this app will popup if prevWin ~= nil then prevWin:focus() end win:close() end) 

    流程是先切换到上一个窗口, 然后关闭需要关闭的那个窗口, UI表现上有差距, 但是最终目的是一样的了. 主要是如果先关闭当前窗口的话, 就会弹出当前窗口的app的其他窗口, 所以只能先切换再关闭. 暂时只能做到这样.

    第 2 条附言    2023-08-05 19:30:55 +08:00

    上一个实现的 hs.window.orderedWindows()[2] 经常会卡, 问题很大, 这里的实现解决这个问题

    local wf = hs.window.filter.new() local previousWindow = nil local focusedWindow = nil wf:subscribe(hs.window.filter.windowFocused, function(win) -- 将当前窗口保存为上一个窗口 previousWindow = focusedWindow focusedWindow = win end) -- 初步实现关闭窗口的时候, 切换到上一个窗口 hs.hotkey.bind({"cmd"}, "w", function() local win = hs.window.focusedWindow() local prevWin = previousWindow --local prevWin = hs.window.orderedWindows()[2] --win:close() -- NOTE: another window of this app will popup if prevWin ~= nil and win:application() ~= prevWin:application() then prevWin:focus() end win:close() end) 

    这个实现在cmd-w的时候, 几乎无缝地切换app并关闭窗口了, 只是这个前一个窗口可能会不可用. 更完善的实现就是用一个列表保存前一个窗口, 要用的时候遍历寻找第一个有效的前一个窗口

    28 条回复    2023-11-16 14:47:03 +08:00
    GuryYu
        1
    GuryYu  
       2023-08-03 14:36:30 +08:00
    可以使用 AltTab 替换掉系统默认的切换
    wsjjacky
        2
    wsjjacky  
       2023-08-03 15:18:20 +08:00
    如果你愿意尝试 bettertouchtool 的话,这个问题很好解决。将 Command+W 定义为「关闭窗口」+「打开 Finder 」即可。BTT 可以讲任意一个快捷键组合定义为几乎任意动作,只要系统支持就可以。
    Koma
        3
    Koma  
       2023-08-03 16:56:39 +08:00   2
    如果关闭当前窗口就切到其他应用,经常做 CMD+W 然后 CMD+N 操作的会疯掉
    Goalonez
        4
    Goalonez  
       2023-08-03 17:00:01 +08:00
    我现在一般把常用的软件都用 raycast 设置一个快捷键,可以实现类似 cmd+H 的效果,直接唤起或者隐藏对应窗口.
    FozillaMox
        5
    FozillaMox  
       2023-08-03 17:54:56 +08:00 via iPhone
    不能。

    macOS 的窗口管理确实拉胯。
    minami
        6
    minami  
       2023-08-03 18:59:55 +08:00   1
    之前用过一年多时间的 macOS ,总体感觉是它就没有窗口管理,它实际上就是应用管理,切到哪个应用就把哪个应用的窗口都拉出来,设计如此,要么忍要么滚了。也许可以试试 ubar ,把 dock 整体换了可以破。有些果粉就别来强调有多么好用了,真的是问就是好用,再问就是推荐一堆效率工具,太真实了
    fanhed
        7
    fanhed  
    OP
       2023-08-03 23:03:46 +08:00
    看来这个窗口管理还是一如既往地傻逼
    fanhed
        8
    fanhed  
    OP
       2023-08-03 23:04:54 +08:00
    @Koma 其实逻辑应该是, 关掉当前窗口就回到之前的窗口, 我例子只是为了简单描述 case. 反正 Windows 的窗口管理更符合直觉, macOS 的窗口管理就是答辩.
    fanhed
        9
    fanhed  
    OP
       2023-08-03 23:06:48 +08:00
    @wsjjacky 这个思路看起来可以, 我不用 bettertouchtool, 但是我用 hammerspoon, 看起来可以把 cmd+w 定义为关闭当前窗口并切换到之前的一个窗口, 我看下能否实现
    wsjjacky
        10
    wsjjacky  
       2023-08-04 00:10:24 +08:00
    @fanhed BTT 我可以吹一辈子哈哈哈!感觉苹果应该把 BTT 收编作为系统自带软件之一,真的太好用了。
    wsjjacky
        11
    wsjjacky  
       2023-08-04 00:13:32 +08:00
    @fanhed BTT 可以设置某个快捷键仅对某个特定 APP 生效,因此当你设置完之后,在别的 app 中 command+w 就仅仅是关闭当前窗口,不会自动切换到 Finder 窗口(当然如果你愿意的话也可以设置为 universal 快捷键,对所有 app 都适用)。
    FozillaMox
        12
    FozillaMox  
       2023-08-04 00:14:48 +08:00
    @fanhed 「其实逻辑应该是……」这就是你的不对了。用苹果产品就要做好改变使用习惯的觉悟。
    justaname
        13
    justaname  
       2023-08-04 06:14:06 +08:00
    @Koma 符合直觉的方式应该是关闭当前窗口就退回上一个激活的窗口,而不是打开几百年前用过的上一个同应用窗口
    seanzxx
        14
    seanzxx  
       2023-08-04 08:02:34 +08:00
    @fanhed 你是在用 Windows 的操作逻辑来操作 macOS ,但其实背后的原理并不一样。
    Windows 切换的是窗口,macOS 切换的是应用。
    Windows 很多时候关掉窗口,应用就关闭了,但 macOS 关掉窗口,应用依然在运行,哪怕一个窗口都没有,这个应用依旧处于前台活跃状态,顶部的菜单栏依旧是属于当前活跃的应用,所以你关掉了一个应用的窗口,这个应用前一个活跃的窗口就跳出来了,因为你一直都在这个应用中。

    你想当前窗口消失回到之前的应用窗口,要么可以 Cmd + Q 退出当前应用,要么可以 Cmd + H 隐藏当前应用,上一个应用的窗口就变活跃了。
    eggsblue
        15
    eggsblue  
       2023-08-04 10:39:49 +08:00
    看起来 Wins 可以增加这个功能,提供两个选项:
    1. 关闭窗口时,聚焦到上一个窗口中
    2. 关闭窗口时,如果应用没有可用其他窗口,是否关闭程序
    GabrielleBellamy
        16
    GabrielleBellamy  
       2023-08-04 11:23:25 +08:00
    四指下滑可以看到正在打开的窗口,进行同一软件内的窗口管理。这个需要在设置里打开。macOS 不是没有窗口管理,只是做得确实不够好。另外我觉得它做得不好的地方在于它不够开放,使第三方也很难弥补这些缺陷,只能勉强凑合。
    Koma
        17
    Koma  
       2023-08-04 12:20:19 +08:00
    @justaname 这又涉及到 mac 下大多 app 关闭窗口不是关闭程序的逻辑了,在这个环境下,我不认为“回到上一个同应用窗口”就是符合直觉的。
    DylanMorane
        18
    DylanMorane  
       2023-08-04 18:57:23 +08:00
    win 大多时候关闭窗口就是退出程序,mac 必须按 CMD+Q 才算彻底退出程序 关闭窗口并不等于退出程序,下面这两个快捷键可以帮助你解决这个问题:
    1 、Command-H:隐藏最前面的 App 的窗口。要查看最前面的 App 但隐藏所有其他 App ,请按 Option-Command-H 。
    2 、Command-M:将最前面的窗口最小化至“程序坞”。要最小化最前面的 App 的所有窗口,请按 Option-Command-M 。
    DylanMorane
        19
    DylanMorane  
       2023-08-04 18:59:31 +08:00
    @DylanMorane 补充一点 如果你开启了台前调度 CMD+Q 关闭掉程序后之前应用的窗口就会自动出现
    fanhed
        20
    fanhed  
    OP
       2023-08-05 13:40:15 +08:00
    @Koma 关闭窗口不关闭 app 不就是 Windows 的自带托盘标记的应用而已, 这种在 Windows 下面也是关闭窗口后就切换到之前的窗口了
    fanhed
        21
    fanhed  
    OP
       2023-08-05 13:42:40 +08:00
    @DylanMorane 这个逻辑的答辩之处是, 一般多任务场景下, 人直觉上的管理单元是窗口(不关心这个 app 开了多少个窗口), 而 macOS 的窗口管理单元在窗口之上还强加一个 app
    Koma
        22
    Koma  
       2023-08-05 14:51:43 +08:00
    @fanhed 并不一样,类似 mac 上也有驻留菜单栏的 App ,这种关闭窗口就是退回前一个应用。这一类几乎全都是这样,Surge 、BTT 、istat menu 都是。
    tbv
        23
    tbv  
       2023-08-08 13:39:08 +08:00
    典型的个人需求 > 通用需求,我不满意就否定一切…
    fanhed
        24
    fanhed  
    OP
       2023-08-10 12:22:38 +08:00
    @tokeytush 你是真的搞笑, 是否否定一切懒得讨论, 个人需求本身就是 > 通用需求的, 不然各种配置软件是用来干什么的?! karabiner-elements, hanmmerspoon, betertouchtool, moom, 诸如此类
    tbv
        25
    tbv  
       2023-08-10 13:25:42 +08:00
    @fanhed 通用需求是基础,你的个人需求不代表全部好吧,希望苹果能为你修改,这样你就不会骂他 sha bi 了
    ambition117
        26
    ambition117  
       2023-10-23 00:19:30 +08:00
    笑死,搜了一圈,果粉自适应不是说说而已
    fanhed
        27
    fanhed  
    OP
       2023-11-16 11:46:56 +08:00
    @ambition117 搞 jb 笑, 换不换只是权衡利弊而已, 换 windows 一样会遇到各种问题
    ambition117
        28
    ambition117  
       2023-11-16 14:47:03 +08:00 via iPhone
    @fanhed 不是说你。这下边不少人回复都很典。

    最后我装了 alt tab 解决这傻逼窗口管理
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     914 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:58 PVG 04:58 LAX 13:58 JFK 16:58
    Do have faith in what you're doing.
    ubao 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