Tinycast Palette 完全指南:单窗口启动器的键盘导航、屏幕栈与外观定制 📅 发布时间:2026/9/20 7:24:54 👁 浏览次数: Tinycast Palette 完全指南单窗口启动器的键盘导航、屏幕栈与外观定制【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycastTinycast 是一个原生 macOS 启动器应用而它的整个交互都发生在一个浮动的调色板Palette窗口中启动器是根屏幕其余所有功能AI 对话、剪贴板历史、计算器历史、Emoji、文件搜索等都是从它打开的屏幕。本文以 Tinycast 官方文档为骨架结合仓库源码Tinycast/Palette 目录与 AppSettings.swift深入讲解这个调色板窗口的键盘导航体系、Tab 三屏循环、屏幕栈机制、打开位置控制、外观设置与输入源切换读完你就能像快捷键专家一样驾驭 Tinycast并理解其背后的实现原理。一个面板承载一切Tinycast 的单一窗口哲学Almost everything Tinycast does happens in one floating panel. 几乎 Tinycast 的所有功能都发生在同一个浮动面板中。每个功能要么是启动器launcher即根屏幕要么是从启动器打开的屏幕。esc键负责沿着你来的路径逐级后退——这正是屏幕栈模型的体现。从源码看PaletteState.swift 中维护了一个backStack: [PaletteFrame]每次打开新屏幕时push(mode:)将当前屏幕连同查询文本与选中行一起压栈按esc时pop()恢复下层屏幕的mode、query与selection实现回去就像从未离开过的体验。移动与操作核心快捷键一览按键作用return对当前选中项执行主操作⌘return第二操作通常是在 Finder 中显示或复制⌘K为当前选中项打开动作菜单Actions menu↑↓移动选中项tab在启动器、AI Chat 与剪贴板之间切换esc先清空搜索然后返回上一屏幕最后关闭窗口⌘esc从任意屏幕直接跳回根搜索delete在空搜索框中时返回上一屏幕⌘,打开设置⌘W关闭窗口⌘K是你学习这款应用的钥匙。每个屏幕都会在动作菜单中列出它的全部动作且每个动作旁都印有对应快捷键。完整的快捷键清单见 Keyboard shortcuts。在源码层面动作菜单通过 PaletteScreen.swift 的PaletteScreen协议实现每个屏幕提供actions(at:)或menuContent(at:searchQuery:menuSelection:onActivate:)返回PopoverMenuContent并支持在菜单中直接输入过滤ActionMenuSearchQuery会对菜单项标题打分见matching(_:)扩展选中行后回车即触发动作。除启动器外的每个屏幕左上角都有一个返回箭头。悬停它可以看到点击是后退一步还是关闭窗口。这是因为esc的逐级行为见下文屏幕栈使返回箭头的语义可能随栈深而变化。⌘esc需要 辅助功能Accessibility权限因为 macOS 默认占用这个组合键除非 Tinycast 先截获它。Emacs 按键如果你的手指熟悉 Emacs这些按键在整个调色板中随处可用按键等价于⌃N↓⌃P↑⌃F→⌃B←在 emoji 网格 上这四个键都移动选中项在其他任何地方⌃F和⌃B移动文本光标——因为在搜索框里这才是你通常想要的。带额外修饰键的组合如⌃⇧Q则原样保留不参与映射。从实现看这种按位置而非字符的映射贯穿整个键盘处理PaletteShortcut.swift 中resolve(command:shift:option:control:isDeleteKey:matches:)通过matches: (Character) - Bool闭包按当前布局下的按键位置来匹配字符。文档也明确指出快捷键跟随按键位置而不是输入源输出的字符。如果你使用日文、俄文或其他非拉丁布局⌘K依然是⌘K。Tab 在三屏之间循环tab在一个小循环中往返launcher启动器→ AI Chat → clipboard剪贴板→ launcher。从启动器按tab是提问。你输入的文本会被作为问题发送到一个全新的 AI 对话中所以一次按键就能把一次搜索变成一个问题。当这种情况将要发生时头部会显示AI Chat提示和一个tab键图标。从剪贴板出发你的搜索文本会随你一起回到启动器。esc按tab进来的原路退回去。当 AI 关闭时AI Chat 从循环中退出当 剪贴板历史 关闭时剪贴板从循环中退出。其他屏幕——比如计算器历史或搜索快捷链接——始终保持在循环之外。那些是你主动选择去的地方而不是应该意外降落的地方。唯一的例外当选中的行需要参数时比如一个 快捷链接 或 扩展命令tab会先遍历它的参数字段。源码中的对应实现非常精确PaletteTabAction.swift 的resolve(mode:aiEnabled:clipboardEnabled:)描述了三种动作.ask——从启动器进入 AI 时把已输入文本当作问题case .launcher: if aiEnabled { return .ask }.carryQuery(mode)——把查询文本带到另一端剪贴板 → 启动器.freshScreen(mode)——进入全新屏幕AI → 剪贴板时 AI 的半截消息不属于任何人的搜索。被关闭的功能停靠点会离开循环在代码里同样成立case .launcher:下若 AI 关闭则clipboardEnabled ? .carryQuery(.clipboard) : .carryQuery(.launcher)即直接跳过停靠点。循环的状态转移由 PaletteState.swift 的pushCarryingQuery(mode:)与resetNavigation()完成——前者压栈并切换模式后者在 Tab 回到根启动器时清空栈。屏幕如何堆叠在启动器中输入某个屏幕的名字来打开它该屏幕会堆叠在顶层因此esc会带你回到找到它的那次搜索。如果用屏幕自身的全局快捷键打开同一个屏幕它会独立打开背后没有任何东西。再次按下该快捷键则关闭它。设置 → 通用 → Escape Key Behavior退出键行为决定当搜索框已经为空时esc做什么Navigate back or close window返回或关闭窗口默认返回上一屏幕仅在根屏幕时关闭窗口。Close window and pop to root关闭窗口并回到根立即关闭下次从启动器开始。无论哪种方式第一次按下总是会先清空你输入的任何文本。源码层面PaletteEscapeAction.swift 把退出行为建模成一个按优先级排列的枚举clearMenuQuery→closeMenu→leaveArgumentField→clearQuery→exitExtensionScreen→goBack→hidePalette。解析顺序与文档描述完全一致先处理打开的动作菜单再处理参数字段比搜索框更深一层因此先退出然后清空查询最后按EscapeKeyBehavior定义在 EscapeKeyBehavior.swift决定是goBack还是hidePalette。扩展命令.extensionCommand会先弹出自己的导航栈再退出命令。该行为偏好由 AppSettings.swift 中的escapeKeyBehavior属性持久化默认.navigateBackOrClose。它在哪里打开设置 → 通用 → 外观Appearance同时包含两个位置设置。跟随光标跨显示器打开默认开启会在指针所在的显示器上打开调色板。关闭后则始终使用带菜单栏的那台显示器。对应偏好是openOnCursorScreenAppSettings.swift默认值为 true未设置时按 true 处理。拖拽重新定位默认关闭允许你移动面板。抓住搜索框上方那条细边、头部区域的空白处或空着的搜索框本身即可拖动。对应偏好paletteDraggableAppSettings.swift默认关闭注释解释了原因默认关闭这样大多数启动不会误抓它。拖动过程中虚线引导会显示默认位置当你足够近时亮起表示可以吸附。在那里松手就会吸附回默认位置在其他任何地方松手Tinycast 会记住这个位置即使重启后也仍然有效。源码揭示了位置记忆的细节PalettePlacement.swift 定义了默认锚点defaultAnchor居中、顶部边距为可见区域高度的一小部分、向下生长并以相对于当前显示器的方式存储偏移offset(of:on:)把锚点转为距左边缘的距离 距顶部的距离anchor(for:on:)再转回来。记忆的位置在 AppSettings.swift 中按显示器分别保存palettePositions: [String: [Double]]key 是显示器标识这正是跨显示器独立记忆的机制。而restored(_:graspable:visibleFrame:minimumVisible:)实现了文档中只有没有任何屏幕能再显示调色板时才丢弃记忆位置的逻辑——当显示器上可见区域过小比如拔掉了外接显示器时返回 nil从而放弃该记忆点。记忆的位置不会被包含在备份中因为窗口位置不会在不同的 Mac 之间迁移。外观Appearance设置 → 通用 → 外观包含以下设置设置项选项默认值主题Theme跟随系统 · 浅色 · 深色跟随系统界面尺寸Interface size默认 · 大 · 更大默认背景透明度Background transparency从更少到更多的滑块带重置中间紧凑模式Compact mode开 · 关关紧凑模式下显示收藏Show favorites in compact mode开 · 关开主题。跟随系统会随 macOS 的变化而切换。浅色是同一套设计反色后的结果布局、字体与动效完全一致。偏好appearance由 AppSettings.swift 持久化注释指明由AppCore.applyAppearance()应用。界面尺寸让调色板及其浮动窗口放大 10% 或 20%。设置窗口本身保持原尺寸。实现上InterfaceSize.swift 定义了三个档位standardscale 1.0、large1.1、larger1.2并通过InterfaceMetrics(scale:)把缩放注入调色板的全部度量——因此浮动窗口也随动、设置窗口不变是由指标注入范围决定的。背景透明度改变桌面的玻璃效果透出程度。重置恢复原始观感。偏好paletteTransparency在 AppSettings.swift 中按 -100 到 100 的整数夹取存储max(-100, min(100, ...))。紧凑模式将启动器打开为一条纤细的搜索栏随着你输入逐渐生长为完整列表。↓展开它并选中第一行。开启Show favorites in compact mode后你的收藏应用会位于搜索栏右侧见 Favorites。对应偏好compactMode与showFavoritesInCompactMode默认开见 AppSettings.swift。Toggle System Appearance切换系统外观 动作改变的是macOS 本身。Tinycast 只有在自己的主题设置为跟随系统时才会随之变化。输入源Input source设置 → 通用 → 自动切换输入源可以挑选一个在调色板打开期间使用的键盘布局。如果你大部分时间输入日文或中文而应用名是拉丁字母这个功能能省去每次打开启动器时的手动切换。Tinycast 会在调色板打开时切换输入源关闭时切换回来。如果它在打开期间你自己改了布局你的选择会被保留。偏好autoSwitchInputSourceIDAppSettings.swift保存布局标识设为 nil 时从 UserDefaults 移除键即不自动切换。回到根搜索Pop to root设置 → 通用 → Pop to Root Search决定窗口关闭后 Tinycast 多久回到启动器Immediately立即默认或 5、15、30、60、90 秒后。如果你经常关闭调色板后又马上回到同一屏幕可以把时间调长。对应偏好popToRootTimeoutAppSettings.swift底层枚举 AppSettings.swift 的PopToRootTimeout定义了immediately 0及 5/15/30/60/90 秒六个档位。AI Chat 对会话是否重新打开有自己的规则见 AI Chat。菜单栏Tinycast 的菜单栏图标包含Open Tinycast打开 Tinycast、Clipboard History剪贴板历史、Settings…设置…、Check for Updates…检查更新…、Support Tinycast…支持 Tinycast…和Quit Tinycast退出 Tinycast。设置 → 通用 → 在菜单栏中显示可以隐藏该图标。即使没有图标你的快捷键依然正常工作——对应偏好键showInMenuBarSettingsKey由菜单栏项和通用设置页共同读写。进一步阅读全部屏幕模式的枚举定义PaletteMode.swift其中每个模式还带有系统图标与搜索框占位符placeholder例如启动器是Search for apps and commands…、AI 是Ask anything…。调色板的快捷键解析与⌘K 动作菜单设计PaletteShortcut.swift 与 PaletteScreen.swift。窗口打开/关闭的完整状态机PaletteState.swift。官方完整快捷键参考Keyboard shortcuts。【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考