macOS 可以按住 ⌘ 然后不断的 Tab Q 快速关闭程序,终于发现一个 agent 流畅运行以外的亮点…

macOS 可以按住 ⌘ 然后不断的 Tab Q 快速关闭程序,终于发现一个 agent 流畅运行以外的亮点…

Mac的 cmd + grave 也挺好用的,也就是 Exposé

win下得用 ahk 实现,我也写了个,分享下

#Requires AutoHotkey v2.0

; === 无下沉效果的窗口切换器 ===
; 
; 实现原理:
; 1. 获取当前应用的所有窗口,并按ID排序以创建稳定的循环顺序
; 2. 找到当前窗口在列表中的位置,计算下一个窗口
; 3. 使用 try-catch 包裹所有可能出错的操作,确保脚本永不崩溃
;
; 这是"窗口不下沉版本",当前窗口不会移到底部

!`::{
  try {
    ActiveProcessName := WinGetProcessName("A")
    windowList := WinGetList("ahk_exe " ActiveProcessName)
    
    ; 窗口数量检查
    if windowList.Length <= 1
      return
    
    ; 对窗口ID排序,创建稳定顺序
    BubbleSort(windowList)
    
    ; 找到当前窗口位置
    activeId := WinGetID("A")
    activeIndex := 0
    for i, hWnd in windowList {
      if (hWnd = activeId) {
        activeIndex := i
        break
      }
    }
    
    ; 如果没找到当前窗口(理论上不应该发生),从第一个开始
    if (activeIndex = 0)
      activeIndex := 1
    
    ; 计算下一个窗口
    nextIndex := Mod(activeIndex, windowList.Length) + 1
    
    ; 尝试激活下一个窗口,如果失败就尝试下下个,以此类推
    attempts := 0
    while (attempts < windowList.Length) {
      targetIndex := Mod(activeIndex + attempts, windowList.Length) + 1
      try {
        WinActivate(windowList[targetIndex])
        break  ; 成功激活,退出循环
      } catch {
        ; 这个窗口激活失败,尝试下一个
        attempts++
      }
    }
  } catch {
    ; 捕获所有其他错误,什么都不做,静默失败
    ; 这样即使出现任何意外情况,脚本也不会崩溃
  }
}

BubbleSort(arr) {
  n := arr.Length
  loop (n - 1) {
    i := A_Index
    loop (n - i) {
      j := A_Index
      if (arr[j] > arr[j + 1]) {
        temp := arr[j]
        arr[j] := arr[j + 1]
        arr[j + 1] := temp
      }
    }
  }
}

Win 何必 Cmd + ~,不合并任务栏不香吗?Mac 的这点深恶痛绝,怀念 Win 的任务栏

这个可能就纯使用习惯了。因为我长期在用Win 10,反而Win 10好像是合并,就是想让多屏幕用不同的任务栏,反而很难实现。我不知道具体是什么场景,反正如果开非常大量的应用。我的任务栏一般有两三页,所以说非常希望不合并。Mac我记得也有解决这个问题,如果你只是怀念Windows的Alt加Tab GitHub - lwouis/alt-tab-macos: Windows alt-tab on macOS · GitHub 应该是这个

就是我觉得expose这个功能还是挺香的,不然怎么在多个同应用窗口之中切换呢?Windows原生应该是没有一个很好的快捷键操作逻辑吧

感谢推荐,不喜欢循环切换这种操作,喜欢快捷键直达或者在任务栏上点,mac 不但没有任务栏,还加一个无法处理掉的标题栏,怨念

确实,Mac想隐藏的操作逻辑就只有全屏了。但是全屏又是一个比较重的操作,这块确实win更灵活一点