苹果迷苹果迷  2026-11-12 19:46 苹果家园 |  隐藏边栏 |   抢沙发 |  0 
文章评分 0 次,平均分 0.0 :
导语: 免费开源的小工具,安装包只有 1.67 MB。它在访达前台把 F7 变成删除键,让剪切后的粘贴变成移动,还把切换器改成逐个窗口列出,右侧显示处理器与内存占用。三个功能都能单独关掉,关掉之后系统回到原来的样子。

PC Mode 是 GuruHat 放在 GitHub 上的免费 macOS 菜单栏工具,MIT 协议,用 Swift 写成,1.4.1 版本的安装包 PCMode-Installer.dmg 只有 1.67 MB。它只补三件事:在 Finder 里按 F7 删除文件、用 Command-X 与 Command-V 剪切移动文件、用 Command-Tab 逐个窗口切换。最新版本发布于 2026 年 10 月 24 日,与同一晚的 1.4 相隔 19 分钟,改动只有一条:把菜单栏图标换成键盘加手掌的形状,并跟随浅色与深色菜单栏。

它的做法是借 Finder 自己的快捷键把动作演出来,没有另造一套键位映射。用户在 Finder 前台按下 F7,程序替用户按下 Command-Delete;用户按 Command-X 再按 Command-V,程序把后者换成 Command-Option-V。整套逻辑停在事件拦截与转发这一层,Finder 本身没有被改动。

三处肌肉记忆,三条替代路径

从 Windows 迁到 Mac 的人,最先丢掉的往往是三个条件反射。Delete 键不再删文件,Ctrl-X 剪切文件会变成复制,Alt-Tab 只在应用之间轮换,同一个应用的两个窗口还得另找办法。

macOS 自己有一套等价操作。删除是 Command-Delete,移动文件是 Command-C 之后按住 Option 再粘贴,窗口切换要先用 Command-Tab 选应用、再按 Command-` 在同一个应用的窗口之间转。

这些操作分别落在键盘、剪贴板与辅助功能接口里,按键习惯却是连在一起的一整套。PC Mode 把这三处重新接上,每个功能在设置面板里都有独立开关,关掉之后系统行为立即回到原样。

自制对照卡:删除文件、剪切再粘贴、切换窗口、查看占用四项,分别写出 macOS 原生做法与 PC Mode 的替代做法
四处差异与 PC Mode 的替代路径(据官方说明与仓库源码整理)

它没有改写系统键位表,也没有注册全局快捷键。整个程序靠一个事件监听与一个辅助功能枚举工作,退出之后系统里不会留下改过的键位。

媒体键不是普通按键:一次 F7 要走三条通路

F7 在 macOS 上属于系统定义事件,走的是常规键盘处理之外的另一条链路。想拦下它,得从更靠下的位置接。

PC Mode 同时挂了三处监听。第一处是 NSEvent 的全局监视器,只收系统定义这一类;第二处是 CGEvent tap,插在会话级事件流的最前端,监听按下、松开、修饰键变化与系统定义事件;第三处是 IOHIDManager,匹配用途页 0x0c 的消费类控件与用途页 0x01 的键盘设备。

三条通路的存在理由并不相同。外接键盘、带多媒体键的机械键盘、以及复合设备上的消费类控件,有时只在 HID 层露头,前两条通路收不到。内置键盘的媒体键则三条通路都会报一次。

同一次按键被三条通路各报一次,就会连删三个文件。作者让三条通路共用一把按键闸门:按下时把通路名记进集合,同一次按下只放行最早的那一条,之后 0.35 秒内不再接受新的按下,松开后 0.08 秒内也不接受。按住不放产生的重复事件直接丢弃,不会因为按键时间长于去抖窗口而补触发。

程序自己发出的 Command-Delete 也会流经同一个事件流。注入时给事件打上 0x77696e32 的标记,回到回调里先查这个标记,命中就原样放行,不再进入删除逻辑,避免一次按键无限自我触发。

触发条件卡得很紧:前台必须是 Finder,并且没有按 Command、Option、Control、Shift 中的任何一个。别的应用在前台时,F7 还是 F7,音乐照常暂停。

PC Mode 设置窗口截图:Finder 区分别勾选删除键与剪切移动,Shortcut key 下拉框选 F7,Windows 区勾选逐窗口切换,PC Mode 区的菜单栏开关未勾选,底部权限行显示红点与开启提示
设置面板只有三组开关:Finder 的删除键与键位下拉、剪切移动、逐窗口切换;底部红点提示先去授权(官方截图)

Command-X 之后:剪贴板版本号只消费一次

Finder 没有 Command-X。按下它,系统什么也不做,剪贴板里也不会出现文件。要做出剪切的手感,只能把动作拆成复制、暂存、粘贴三步,还要保证这一次剪切只生效一次。

程序的做法是拦下 Command-X,记下当前剪贴板的版本号,然后向 Finder 转发一次 Command-C。真正的复制由 Finder 完成,程序只在旁边等结果。

等待是一段轮询。每 50 毫秒查一次剪贴板版本号,最多查 20 次,合起来一秒。版本号变了、并且剪贴板里能读出文件地址,就把这个新版本号记成可移动;一秒内没等到,本次剪切作废,用户按下的 Command-X 等于没有发生。

按下 Command-V 时,程序先比对版本号。一致才把按键换成 Command-Option-V 发给 Finder,那才是真正的移动;不一致就原样放行,用户粘贴的是剪贴板里别的内容。用掉之后状态立刻清空,第二次 Command-V 回到普通粘贴。

状态机里有一个代号计数。每次开始、取消、消费都让它加一,异步回调先核对代号再动作。连按两下 Command-X、或者中途切走应用,晚到的回调不会把上一次的意图写到这一次上。

作废条件写得比生效条件还多。再按一次 Command-C 这种明确的复制会取消,剪贴板被别的应用改写会取消,前台离开 Finder 会取消,设置里关掉这个功能也会取消。

自制流程卡:从按下 Command-X 开始,记下剪贴板版本号,50 毫秒一次最多查 20 次,版本号对得上才改发 Command-Option-V,换剪贴板或离开 Finder 即作废
一次 Command-X 到 Command-V 之间,版本号与轮询决定这次移动是否成立(据仓库源码整理)

Command-Tab 列到每个窗口:0.15 秒超时与后台枚举

系统自带的 Command-Tab 是应用切换器,一个应用只占一格。同一个应用开着五个窗口,得先切过去再挨个找。PC Mode 把它换成窗口列表,最小化与隐藏的窗口也在里面。

按键处理很直接:拦下 Tab 的键码 48,没按 Shift 就让计数加一,按了 Shift 就减一,用取模把序号绕回列表范围。Esc 取消,松开 Command 就提交当前选中项。

难的是枚举。程序通过辅助功能接口向每个运行中的应用要窗口列表,逐个读出角色、标题与是否最小化。任何一个应用不响应,这次调用就会挂住,而调用发生在事件回调线程上,挂住就等于整块键盘失去响应。

作者给了两道保险。每个元素设 0.15 秒的消息超时,超时就跳过这一项;整段枚举挪到后台队列,事件回调线程不再等结果。枚举没回来之前按下的 Tab 不会丢,计数照常累加,列表到达后一次算出选中项。用户在列表到达前就松开 Command,提交动作会挂起,等结果到了再执行。

面板是一个 600×420 的浮动窗口,层级放在弹出菜单一档,可以加入所有桌面空间并附在全屏应用之上。列表按最近使用排序,当前窗口排在所属应用的第一位,右侧两列显示 CPU 与内存。

选中的应用先取消隐藏,再激活,然后把目标窗口的最小化标志清掉、设为主窗口、执行一次提升动作。应用没有向辅助功能暴露任何窗口时,列表里留一条应用级条目,选中就重新打开这个应用。逐窗口切换这个方向上有不少同类作品,比如 Show Bar for Mac:让 Command-Tab 精准切换具体视窗,程序坞悬停即看微缩预览 与更早的 AltTab - 带窗口预览的macOS窗口切换神器,区别在于 PC Mode 的列表不带缩略图,只带占用数字。

PC Mode 切换器截图:列表五行分别是 Claude、Finder 的 Applications 窗口、Firefox、系统设置的设备控制与数据访问页、以及最小化的 WhatsApp Web 网页,右侧 CPU 列显示 2%、小于 1%、4%、小于 1%、10%,RAM 列显示 1.5 GB、101 MB、2.6 GB、125 MB、3.0 GB
切换器把每个窗口单列一行,右侧是应用级的 CPU 与内存合计,选中行高亮,底部提示松手即打开(官方截图)

右侧两列的数字怎么来的

1.4 版本加上 CPU 与内存,改动看起来只是两列文字,背后是一套按活动监视器口径重写的采样。

采样每 3 秒跑一次,允许 1 秒的误差窗口。程序先列出系统里所有进程,逐个取父进程号,再取 CPU 时间与物理占用。CPU 时间的单位是 mach 绝对时间,在 Apple 芯片上并不是纳秒,得按 timebase 换算成纳秒再比较。

归属是这套统计里最关键的一步。一个应用的实际占用分散在主进程、渲染进程、扩展与各种后台辅助进程上。程序沿着父进程链把每一级祖先都记成归属者,同时还调用 libsystem 里的私有符号 responsibility_get_pid_responsible_for_pid,把真正发起这个进程的应用也算进去。Safari 的网页内容进程会被算到 Safari 头上,活动监视器用的是同一个函数。

CPU 百分比按单个核心计算,用两次采样的时间差当分母,再对上一次结果做一半权重的平滑,短促的尖峰不会立刻把数字顶上去。40% 转橙色,90% 转红色。

内存的处理更保守。数字超过 1 GB 才进入候选,还要看系统的内存压力等级:正常时不标色,警告时橙色,紧张时红色。理由是 macOS 会主动把空闲内存填满,占用数字大本身并不代表出问题。这个判断也决定了显示格式,不到 999.5 MB 显示整数 MB,超过就显示一位小数的 GB。

想在菜单栏常驻看这类数字的工具另有选择,比如 ftop:Apple Silicon 上的系统监视器,一块玻璃面板可缩到菜单栏宽,只报当前状态。PC Mode 把它们放进切换器,看的时候顺手就切过去了。

它不做的事,和几个会踩到的坑

功能边界很清楚:所有动作只在 Finder 前台生效,不接管其他应用的快捷键,也不提供自定义键位映射。想改 Caps Lock、想给某个应用单独换键,这个工具帮不上忙。

权限要求不低。辅助功能用于枚举窗口与向 Finder 发送按键,输入监控用于接收系统定义事件,另外还要允许发送事件。三者缺一个,设置面板底部的状态灯就停在红点,旁边写着先去开启再重启。macOS 27 里辅助功能这一项已经改名为 Device Control and Data Access,官方截图里的提示文字就是新名字。

它和别的键盘工具会打架。作者在说明里直接写明,使用前先退出其他按键映射程序,否则同一个 F7 可能被两边各处理一次。

系统门槛是 macOS 13。安装包只从 GitHub Releases 分发,仓库里那份 dmg 就是发布件,没有走 App Store。首次打开要把应用先拖进应用程序文件夹,否则开机自启多半注册不上,macOS 还可能要求到登录项里手动放行。

窗口枚举的上限由应用自己决定。有些应用不把某些窗口暴露给辅助功能,这类窗口不会出现在列表里,程序只能退回到应用级条目。

项目本身还很年轻。仓库 2026 年 9 月 29 日建立,与 1.3 首发同一天,目前 2 个星标,还没有人复刻。源码不到 60 KB,测试覆盖按键去抖、剪切状态、键位映射、切换器序号与占用格式化几块。

安装只要三步:从 Releases 下载 dmg,把 PC Mode 拖进应用程序文件夹,打开后按设置面板里的 Manage 按钮逐项授权。三个功能各有开关,只想要 Delete 键的人可以只留第一项,其余两项关掉之后,Command-Tab 与剪贴板都回到系统原本的行为。

声明:本文来自投稿,不代表苹果家园立场,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论

表情 格式 链接 私密 签到

友情链接

    扫一扫二维码分享