ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Loop for macOS:径向菜单、触发键与 URL Scheme 驱动的优雅窗口管理

Loop for macOS:径向菜单、触发键与 URL Scheme 驱动的优雅窗口管理 桌面应用【免费下载链接】LoopWindow management made elegant.项目地址https://gitcode.com/GitHub_Trending/lo/Loop点击查看免费下载Loop 是一款面向 macOS 13 及以上系统的开源窗口管理应用它用「按住触发键 移动光标」的径向菜单交互取代了繁琐的快捷键记忆同时保留了传统快捷键、鼠标拖拽、触控板手势与可脚本化 URL Scheme 等多条控制路径。本文以项目 README.md 为主线结合仓库源码URLCommandHandler.swift、LoopManager.swift、WindowDirection.swift 等系统讲解安装、触发方式、全部内置动作、URL 命令协议、主题定制与常用设置项帮助你快速上手并把这套「优雅的窗口管理」纳入自己的日常工作流。Loop 仍在持续迭代新功能与改进会定期加入以不断优化 macOS 上的窗口管理体验。目录什么是 Loop核心特性安装触发方式触发键Trigger KeyURL Scheme 命令协议内置键盘快捷键一览主题与外观定制行为设置详解高级与隐藏设置与其他窗口管理工具的对比贡献与许可什么是 LoopLoop 是一款 macOS 应用用于简化窗口管理你可以借助按下一个按键即可唤出的径向菜单轻松选择窗口摆放方向也可以按照个人偏好用自定义的颜色与设置把它调整成自己喜欢的样子。移动、缩放、排列窗口只需要几下点击或一次光标拖动为日常使用节省大量时间与精力。从代码结构看Loop 的窗口动作体系由三部分组成动作定义WindowDirection.swift 以枚举形式定义了全部窗口方向半屏、四分之一、三分之一、四分之一屏、跨屏、缩放、移动、聚焦等动作执行WindowActionEngine.swift 负责把动作实际应用到窗口上并支持对同一窗口上旧动作任务的取消与并发控制apply(context:)中按cgWindowID管理actionTasks交互编排LoopManager.swift 作为核心管理器统一串联触发键、中键点击、多点触控手势、鼠标移动观察器与窗口动作指示器。核心特性径向菜单Radial Menu径向菜单允许你用鼠标/触控板直接操纵窗口按住触发键把光标移向目标方向即可移动并缩放窗口。菜单以当前光标位置为中心展开方向与内置动作一一对应。在设置中径向菜单的「外观」与「交互」可以独立开关光标交互与菜单本身可分别禁用对应默认值disableCursorInteraction、radialMenuVisibility。状态管理由 RadialMenuViewModel.swift 承担它把「当前动作」「角度」「父级 Cycle 动作」等状态与视图分离因此同一套RadialMenuView既能用于设置预览也能用于真实操作。预览窗口Preview预览窗口让你在真正提交缩放动作之前先看到调整后的效果。预览的 padding、圆角半径、边框颜色与边框宽度都可以在设置中调整。从 PreviewViewModel.swift 的实现看预览框的位置由ResizeContext.getTargetFrame()计算得出并应用内边距且仅在动作会真正改变窗口时才显示当预览被关闭时previewVisibility falseLoop 会改为让窗口跟随光标实时移动此时「光标跟随窗口」选项不可用。键盘快捷键Keyboard ShortcutsLoop 允许你为任意按键与触发键组合绑定一个窗口操作。触发键相当于「总开关」组合键在其基础上叠加触发键本身也可以由一个或多个按键组成。从 LoopManager.swift 可以看到KeybindTrigger在获得辅助功能权限后启动并通过回调把命中的WindowAction交给openLoop(startingAction:)打开整个 Loop 交互流程同一个 Loop 会话内不同按键组合会通过changeAction无缝切换动作。动作序列Cycles与 Cycles动作序列搭配时Loop 会变得非常强大反复按下同一按键组合或反复左键点击即可在多个窗口操作间快速切换。典型用法如「上半屏 ↔ 下半屏」来回切换或「最大化 → 恢复」等。实现上Cycle 由CycleActionCoordinator负责推进LoopManager.changeAction遇到.cycle方向时会根据当前动作与canAdvanceCycle/reverse参数提出下一个动作提案Proposal并支持「Shift 被按下时反向循环」cycleBackwardsOnShiftPressed与「被打断时从头开始」cycleModeRestartEnabled等细节。仓库自带的 CycleActionCoordinatorTests.swift 与 OverlappingKeybindCycleTests.swift 覆盖了相关边界场景。收拢Stash把窗口隐藏到屏幕边缘让工作区更清爽需要时把鼠标移到屏幕边缘或使用键位绑定即可重新唤出。Stash 的核心实现是 StashManager.swift通过鼠标移动监听去抖间隔约 0.05s、显示/隐藏节流约 0.1s实现「靠近边缘自动浮现、离开自动隐藏」同一屏幕边缘可堆叠多个收拢窗口只要剩余可见区域不小于minimumVisibleSizeToKeepWindowStacked100pt光标仍能准确命中其中任意一个支持动画开关animateStashedWindows、可见留白stashedWindowVisiblePadding默认 20px与收拢后自动转移焦点shiftFocusWhenStashed。主题定制ThemingLoop 在主题上相当开放径向菜单宽度Thickness滑杆范围 10–35px、形状Corner radius30–50px与颜色完全可调可完全禁用光标交互与菜单本体可独立开关。菜单项本身也能编辑——在「Actions」列表中增删条目、调整顺序并在设置窗口中实时预览见 RadialMenuConfigurationView.swift。预览窗口可调整 padding、圆角半径、边框颜色与边框宽度相关默认值集中在 DefaultsExtensions.swift如previewPadding默认 10、previewCornerRadius默认 10、previewBorderThickness默认 4。强调色支持跟随系统、自定义颜色、渐变乃至「从当前壁纸同步取色」Sync Wallpaper由 AccentColorController.swift 与 WallpaperImageFetcher.swift 实现详见 AccentColorConfiguration.swift。安装Homebrewbrew install loop手动下载前往 Loop 的 Releases 页面下载最新.zip文件位于页面底部即可。项目要求macOS 13 及以上版本。触发方式触发键Trigger KeyLoop 依靠一个触发键来工作该键必须被按住或按下才能激活 Loop 的某些功能。唤出径向菜单按住触发键并向目标方向移动光标快捷键组合为某个按键指定动作后在按住触发键的同时按下该按键即可触发触发键设置在「设置」的Behavior行为标签页中配置触发键可以是一个键也可以是多个按键的组合。从源码看触发键的默认值是SetCGKeyCode中的kVK_Function即 Fn 键见 DefaultsExtensions.swift同一文件还定义了sideDependentTriggerKey左右侧修饰键区分、triggerDelay触发延迟默认 0、doubleClickToTrigger双击触发等选项。把 Caps Lock 设置为触发键README 给出了三种可行方案a. 修改系统设置进入 系统设置 → 键盘 → 「键盘快捷键…」在「修饰键」标签页中把Caps Lock (⇪)重映射为(^) Control对每一块已连接的键盘重复此重映射在 Loop 中选择Right Control右 Control作为触发键。b. 使用第三方应用可以使用 Hyperkey、Karabiner-Elements 等按键重映射工具来完成 Caps Lock → 修饰键的转换。若使用 Karabiner-Elements需要注意 Loop 对快速连续按键事件的处理源码注释指出 Karabiner 会把修饰键与其他按键拆分为独立的快速事件可能触发两次openLoop调用因此 LoopManager.swift 在 Loop 已打开时会改为仅更新动作而非重复打开。c. Shell / AppleScriptURL SchemeLoop 支持通过其 URL Scheme 被命令行或 AppleScript 控制详见下一节# Shell 示例 open loop://direction/right # 移到右半屏 open loop://action/maximize # 最大化窗口 open loop://screen/next # 移到下一个屏幕 # AppleScript 示例 osascript -e tell application Loop to activate osascript -e open location loop://direction/left还可以编写脚本串联多个动作#!/bin/bash # 示例先移到右半屏再最大化 open loop://direction/right sleep 0.5 open loop://action/maximize查看可用命令列表open loop://list/all # 列出所有命令 open loop://list/actions # 列出所有窗口动作 open loop://list/keybinds # 列出所有自定义键位URL Scheme 命令协议URL Scheme 的完整协议定义直接写在 URLCommandHandler.swift 的文件头注释中并且由 AppDelegate.swift 通过NSAppleEventManager注册kAEGetURL事件后路由到URLCommandHandler.handle(_:)执行。基础格式loop://command/parameters1. 窗口方向命令directionloop://direction/direction示例命令效果loop://direction/left移到左半屏loop://direction/right移到右半屏loop://direction/top移到上半屏loop://direction/bottom移到下半屏loop://direction/maximize最大化窗口loop://direction/center居中窗口底层实现会先把参数与 WindowDirection.swift 中的枚举匹配不区分大小写left/right/top/bottom会自动映射为对应的半屏动作custom...、stash...前缀会转交给 action 处理器。完整的方向清单半屏、四分之一、三分之一、跨屏等均可作为参数使用通过loop://direction/list可以列出。2. 屏幕管理screenloop://screen/command命令效果loop://screen/next移到下一个屏幕loop://screen/previous移到上一个屏幕3. 动作命令actionloop://action/action例如loop://action/maximize、loop://action/leftHalf。除了内置动作外用户自定义动作与 Stash 动作也会按名称出现在这里只要在设置中给自定义动作或 Stash 动作起了名字就可以用loop://action/名称小写调用。完整的动作清单可通过loop://list/actions获取。4. 键位绑定命令keybindloop://keybind/name例如loop://keybind/myCustomLayout。执行时会查找设置中命名的键位绑定并应用对应动作loop://keybind/list可列出全部可用键位。5. 列表命令listloop://list/typetype说明actions列出所有窗口动作按类别分组keybinds列出所有自定义键位all列出全部内容协议细节不区分大小写所有命令与参数均按小写匹配带空格参数需 URL 编码目标窗口窗口命令作用于最前端的非终端窗口源码过滤掉 Loop 自身、activationPolicy非 regular、被隐藏或最小化的窗口错误反馈非法命令如loop://invalid会返回可用命令列表缺少参数如loop://direction会返回可用方向列表不存在的键位loop://keybind/nonexistent会返回可用键位列表list类命令会把格式化结果写入临时文件loop_output_时间戳.txt并自动打开60 秒后自动清理以保证终端输出的可读性。内置键盘快捷键一览Loop 内置动作覆盖了从半屏、四分之一到跨屏、缩放、移动等完整场景分类如下类别动作常规General全屏、最大化、近似最大化、居中、macOS 原生居中、最小化、隐藏半屏Halves上半屏、下半屏、左半屏、右半屏四分之一Quarters左上、右上、左下、右下四分之一水平三分之一Horizontal Thirds右侧三分之一、右侧三分之二、水平中间三分之一、左侧三分之二、左侧三分之一垂直三分之一Vertical Thirds顶部三分之一、顶部三分之二、垂直中间三分之一、底部三分之二、底部三分之一跨屏Screen Switching下一个屏幕、上一个屏幕、左屏、右屏、上屏、下屏窗口操作Window Manipulation变大、变小、上/下/左/右收缩、上/下/左/右扩张、上/下/左/右移动更多More初始位置、撤销、自定义、循环Cycle对照 WindowDirection.swift完整的动作枚举其实还包含水平四等分FirstFourth…FourthFourth、LeftThreeFourths、RightThreeFourths、跨 Mission Control 空间NextSpace、PreviousSpace及MoveToSpace1–MoveToSpace16、缩放ScaleUp/ScaleDown、焦点导航FocusUp/Down/Left/Right、FocusNextInStack、Stash/Unstash 以及自定义与 Cycle 等均可在键位绑定与菜单中选用。动作对应的目标帧比例如右半屏x: 1/2, y: 0, w: 1/2, h: 1也由该文件中的frameMultiplyValues定义最终由WindowFrameResolver计算实际 CGRect。主题与外观定制径向菜单主题显示开关径向菜单可以整体禁用radialMenuVisibility默认开启圆角半径30–50pxradialMenuCornerRadius默认 50厚度/宽度10–35pxradialMenuThickness默认 22两项相互约束厚度必须小于圆角半径调整时设置界面会自动联动菜单动作列表可增删、排序菜单项每个菜单项支持自定义动作与 Cycle左键点击可逐步切换 Cycle 动作对应enableRadialMenuCustomization默认关闭开启后才显示 Actions 编辑区。预览窗口主题对应 DefaultsExtensions.swift 中的预览相关默认值选项默认值previewVisibility预览可见truepreviewPadding内边距10previewCornerRadius圆角10previewBorderThickness边框宽度4previewUseWindowCornerRadius跟随窗口圆角truepreviewBackgroundEnableBlur背景模糊truepreviewBackgroundAccentOpacity背景强调色透明度0.1预览框的实际布局由 PreviewView.swift 与 PreviewController.swift 渲染起始展开位置previewStartingPosition还有screenCenter、radialMenu、actionCenter三种模式可选默认actionCenter即从目标区域中心生长。强调色主题在「Accent Color」设置页可选择三种模式见 AccentColorOption.swift系统System跟随 macOS 强调色自定义Custom使用取色器指定颜色可叠加渐变useGradient与gradientColor默认渐变色为蓝色壁纸Wallpaper点击「Sync Wallpaper」从当前桌面壁纸提取主色调默认值accentColorMode .system、customAccentColor .teal。行为设置详解「Behavior」标签页实现见 BehaviorConfiguration.swift按分组提供了以下设置General通用登录时启动launchAtLogin隐藏启动startHidden隐藏菜单栏图标hideMenuBarIcon动画速度animationConfiguration默认 snappyWindow窗口将窗口移动到光标所在屏幕useScreenWithCursor默认开启拖拽后恢复窗口原始位置restoreWindowFrameOnDragPadding 配置进入 Padding Configuration 子页面按屏幕配置边距enablePadding默认关闭、padding默认零注启用「系统窗口管理器」后上述两项会被系统能力覆盖而不显示。Cursor光标光标跟随窗口移动moveCursorWithWindow需预览开启时可用缩放光标下的窗口resizeWindowUnderCursor缩放时聚焦窗口focusWindowOnResize默认开启Window Snapping窗口吸附开启窗口吸附windowSnapping默认关闭macOS 15 上若系统自带「拖到屏幕边缘平铺」已开启会提示冲突拖到顶部时抑制 Mission Control 弹出suppressMissionControlOnTopDrag默认开启Stage Manager台前调度尊重台前调度respectStageManager默认开启台前调度条带尺寸stageStripSize50–250px默认 150Stash收拢动画animateStashedWindows默认开启露边尺寸stashedWindowVisiblePadding1–100px默认 20收拢后转移焦点shiftFocusWhenStashed默认开启高级与隐藏设置除界面可见选项外DefaultsExtensions.swift 还定义了一批「隐藏设置」可以通过defaults write命令直接调整Bundle ID 为com.MrKai77.Loop例如# 手势无选中动作时隐藏径向菜单 defaults write com.MrKai77.Loop hideOnNoSelectionForGestures -bool false # 将径向菜单锁定在屏幕中心 defaults write com.MrKai77.Loop lockRadialMenuToCenter -bool true # 触发键超时秒超时自动关闭 Loop0 表示禁用 defaults write com.MrKai77.Loop triggerKeyTimeout -float 3 # 吸附阈值pt defaults write com.MrKai77.Loop snapThreshold -float 2 # 顶部 padding 忽略刘海高度 defaults write com.MrKai77.Loop ignoreNotch -bool true # 关闭自动更新 defaults write com.MrKai77.Loop updatesEnabled -bool false # 重置defaults delete com.MrKai77.Loop key其他常用隐藏项还包括paddingMinimumScreenSize应用 padding 的最小屏幕尺寸英寸对角线默认 0 表示不限制previewStartingPosition预览起始展开位置screenCenter/radialMenu/actionCentergestureTitlebarHeight手势「标题栏触发区」高度默认 50ptignoreLowPowerMode低电量模式下是否忽略影响窗口动画等enableiCloudSync是否将 Loop 设置同步到 iCloud默认开启。此外「Gestures手势」标签页支持把触控板手势滑动手势、捏合缩放等见 MultitouchTrigger.swift 及配套扩展绑定到窗口动作enableGestures默认关闭「Keybinds」标签页支持录制任意组合键、配置自定义动作与 Cycle「Advanced」中还有animateWindowResizes动画窗口缩放、disableCursorInteraction禁用光标交互、ignoreFullscreen忽略全屏窗口、sizeIncrement增减步长默认 20等选项。与其他窗口管理工具的对比README 的 FAQ 给出了一张与主流 macOS 窗口管理工具的对比表数据来自各应用官网与公开资料可能过时如有不准确之处可提交 Issue特性LoopmacOS 15Rectangle ProRectangleMagnetMoomSwishBetterTouchToolMultitouchHammerspoonYabaiAmethystAeroSpace1PieceWinsMacsyZones价格免费免费$9.99免费$4.99$15.00$16.00$14.00$15.99免费免费免费免费免费$13.99免费开源✅❌❌✅❌❌❌❌❌✅✅✅✅❌❌✅自定义窗口布局✅❌✅❌❌✅❌✅❌✅✅✅❌✅❌✅预览窗口✅✅✅✅✅✅✅✅✅❌✅❌❌✅✅❌主题选项✅❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌修饰键 鼠标✅❌✅❌❌❌❌❌❌❌❌❌❌❌❌✅修饰键 方向键✅✅✅✅✅✅✅✅✅✅❌✅✅❌✅✅修饰键 触控板✅❌✅❌❌❌✅✅❌❌❌❌❌❌❌✅触控板手势❌❌✅❌✅❌✅✅✅❌❌❌❌❌❌✅边距/Padding✅✅✅✅❌✅✅❌❌✅✅✅✅✅✅✅收拢窗口✅❌✅❌❌❌❌❌❌✅❌❌❌❌❌❌保存工作区❌❌✅❌❌✅❌❌❌✅❌✅❌✅❌✅恢复初始位置✅✅✅✅✅✅✅✅✅✅✅✅❌✅✅✅窗口置顶❌❌❌❌❌❌❌✅❌❌✅✅❌❌❌❌拖拽吸附✅✅✅✅✅✅❌✅✅✅❌❌❌✅✅❌同步调整相邻窗口❌✅✅❌✅❌✅❌❌✅✅✅✅✅❌✅动作序列Cycles✅❌✅✅❌✅❌✅❌✅❌❌❌❌❌❌跨屏移动窗口✅✅✅✅❌✅✅✅✅✅✅✅✅✅✅❌窗口间焦点切换✅❌❌❌❌❌❌❌❌✅✅✅✅✅❌✅脚本化URL/AppleScript 等✅✅✅✅❌✅❌✅❌✅✅❌✅✅❌❌从上表可以看出Loop 在「径向菜单交互」「主题定制」「动作序列Cycles」「收拢窗口」「脚本化 URL Scheme」等维度上拥有差异化能力同时保持免费开源。表中信息源自各应用官网及其他公开资料可能滞后仅供参考。贡献与许可如何参与贡献完整的贡献指南见 CONTRIBUTING.md仓库还包含 CODE_OF_CONDUCT.md 与 AI_POLICY.md许可协议本项目基于 GNU GPLv3 协议开源。通过阅读本文你应当已经掌握如何安装并配置 Loop 的触发键、如何用径向菜单与组合键完成常见窗口操作、如何通过loop://URL Scheme 将窗口管理脚本化以及如何借助主题与隐藏设置把 Loop 调校成符合个人习惯的窗口管理工具。若想深入底层可直接从 WindowDirection.swift 的动作枚举、WindowActionEngine.swift 的执行引擎与 LoopManager.swift 的交互编排三个文件开始阅读。赞分享桌面应用【免费下载链接】LoopWindow management made elegant.项目地址https://gitcode.com/GitHub_Trending/lo/Loop点击查看免费下载相关推荐Loop for Mac重新定义macOS窗口管理的优雅革命Loop for Mac重新定义macOS窗口管理的优雅革命 作为一名长期与杂乱窗口作斗争的创作者我曾经在无数个截稿日前夜面对布满屏幕的文档、参考图和聊天桌面应用Loop重新定义Mac窗口管理的智能径向菜单系统Loop重新定义Mac窗口管理的智能径向菜单系统 在数字工作时代Mac用户经常面临窗口管理的挑战——如何在有限的屏幕空间内高效组织多个应用程序传统的方法要桌面应用Loop窗口管理革命用径向菜单彻底释放你的Mac生产力Loop窗口管理革命用径向菜单彻底释放你的Mac生产力 Loop是一款专为Mac用户设计的优雅窗口管理工具它通过创新的径向菜单交互方式让窗口操作变得直观而桌面应用上一篇F´ GDS IntegrationTestAPI 详解基于标准管道的命令、遥测与事件级集成测试开发指南下一篇磁盘告急别急着加硬盘这个免费图片去重工具半小时找回几十GB空间创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表