Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Launcher — 类似 Raycast 的快速启动器

一个极简的 macOS 启动器:Option + 空格 呼出,搜索 App 和文件, 回车打开,搜索结果可以直接拖到 Finder / 其他 App

只做了这一件事,没有别的功能。

下载

Releases 下载打包好的 Launcher.app, 解压后拖进「应用程序」即可;也可以按下面的方式自己构建。

功能

  • 可自定义全局热键(设置界面):预设组合键(⌘+空格、⌥+空格、⌃+空格…)、 双击 ⇧ Shift / ⌘ Command / ⌥ Option / ⌃ Control、或录制任意自定义组合键, 修改即时生效、自动记住
  • Option + 空格 全局呼出 / 收起(默认值,类似 Raycast / Hapigo)
  • 搜索 App(/Applications、/System/Applications、~/Applications、正在运行的 App), 支持中文名:系统应用会显示并匹配本地化名称(如「备忘录」「计算器」「系统设置」), 英文名也能搜
  • 搜索文件(走系统 Spotlight,mdfind;索引未建好时自动回退扫描桌面/文稿/下载等常用目录)
  • 文件预览缩略图:搜索结果里的图片(png/jpg/gif/webp…)直接渲染图片缩略图, 视频(mp4/mov/mkv…)自动抽取画面帧做封面;其他类型保持默认图标。 异步生成 + 内存缓存,不影响搜索速度
  • 剪贴板历史:后台自动记录复制的纯文本(图片/文件等不记录,只存文字不带格式), 去重置顶、上限 200 条、JSON 持久化。呼出后连续按两下空格切换剪贴板历史页, 输入框可过滤历史;单击任意一条即复制并关闭窗口;右上角「清空」按钮可手动清空
  • ↑ / ↓ 选择,回车打开(App 启动,文件用默认程序打开)
  • 直接拖拽结果行到 Finder、浏览器、邮件等任意地方(等价于拖文件)
  • Spotlight 风格收起/展开:呼出时只显示单行搜索框;输入文字才展开结果列表, 清空输入立刻收起
  • 窗口可拖动 + 位置记忆:按住窗口任意处(含搜索框)可自由拖动; 按显示器分别记忆位置,下次呼出原位出现;换到另一台显示器(或拔掉外接屏) 时按屏幕比例自动换算呼出位置,不会跑到屏幕角落
  • 点击窗口外部自动收起;菜单栏有图标可退出(无 Dock 图标)
  • 展开后窗口高度固定,不会因为搜索结果变少而缩小

运行方式(任选其一)

方式 1:Xcode(推荐调试用)

open Package.swift

在 Xcode 里选 Launcher scheme,⌘R 运行。

方式 2:打包成 App(日常使用推荐)

./build_app.sh
open Launcher.app

也可以把 Launcher.app 拖进 /Applications,并到「系统设置 → 通用 → 登录项」 里添加它,开机自启。

方式 3:命令行直接跑

swift run

使用说明

  1. Option + 空格(或你设置的快捷键),出现一个单行搜索框(和 Spotlight 一样)
  2. 直接输入关键词(支持 App 名、文件名、中文名),下方展开结果列表,回车打开第一项
  3. 剪贴板历史:呼出后连续按两下空格 → 切换到剪贴板历史页; 单击条目复制并关闭窗口,输入框可过滤历史,右上角「清空」可清空; 按 Esc 返回搜索页
  4. 上下箭头切换,回车打开选中项;清空输入框,列表自动收起
  5. 按住窗口任意位置(包括搜索框)可拖动窗口;位置按显示器分别记忆, 换显示器时按比例换算到新屏幕的对应位置
  6. 把鼠标移到结果上按住拖动,拖到 Finder 窗口即可移动/复制文件
  7. Esc 或点击其他地方关闭

设置界面

点菜单栏放大镜图标 → 设置…

  • 下拉选择预设热键,或选「自定义组合键…」后直接按下想用的组合键(Esc 取消)
  • 选「双击 ⇧/⌘/⌥/⌃」需要先点按钮授予辅助功能权限(授权一次即可)
  • 选 ⌘+空格 时,请到「系统设置 → 键盘 → 键盘快捷键 → 聚焦」关闭系统 Spotlight 的 ⌘+空格,本程序才能完全接管;⌃+空格 可能和输入法切换冲突,同样可在系统设置里调整

修改快捷键(旧方法,仅备选)

默认是 Option + 空格。如果不想用设置界面,也可以直接改 Sources/Launcher/HotkeySettings.swift / HotKeyManager.swift 里的默认值,然后重新编译。

常见问题

  • 按了没反应:热键被其他软件占用(终端里运行会打印 热键注册失败)。 用设置界面换一个即可。另外某些中文输入法可能占用 Option+空格,可在 「系统设置 → 键盘 → 输入法」里检查快捷键设置。
  • 选了双击 ⇧/⌘ 没反应:需要先在设置界面点「打开辅助功能权限设置…」授权, 授权后立即生效。检查方法:设置界面会显示「✅ 辅助功能权限已授予」。
  • 呼出后无法输入、打字一直嘟嘟响:这是无边框窗口没拿到键盘焦点导致的, 已通过重写 canBecomeKey 修复。如果你用的是旧版本,重新 ./build_app.sh 打包并重新打开 Launcher.app 即可。
  • 文件搜不到:首次使用如果 Spotlight 索引还没建好,只会搜索 桌面/文稿/下载/图片/音乐/影片 顶层目录。过一会儿索引建好后就全盘可搜。
  • 拖拽没反应:检查是否把结果拖到了窗口外并落到 Finder/桌面等可接收 文件拖放的地方。

技术要点

  • 全局热键用 Carbon RegisterEventHotKey组合键不需要任何权限; 「双击修饰键」需要辅助功能权限(设置界面可一键授权)
  • 设置用 UserDefaults 持久化(suite: com.example.launcher.settings),修改即时生效
  • 窗口位置按显示器以「屏幕内比例锚点」记忆:接拔显示器、全局坐标系重排后 仍能恢复到正确位置(换屏时按比例换算,不再依赖绝对坐标)
  • 应用图标由 tools/make_icon.swift 矢量绘制生成(Resources/AppIcon.icns
  • 文件搜索用 mdfind(Spotlight),快且无需额外权限
  • 拖拽通过 NSTableView 的 pasteboardWriterForRow 实现,写 .fileURL 到剪贴板,Finder 等原生支持
  • 窗口是 borderless + NSVisualEffectView,悬浮在所有空间之上

目录结构

Launcher/
├── Package.swift                        # SPM 包(可直接用 Xcode 打开)
├── build_app.sh                         # 打包成 Launcher.app 的脚本
├── Resources/AppIcon.icns               # 应用图标(tools/make_icon.swift 生成)
├── tools/make_icon.swift                # 图标生成脚本(CoreGraphics 矢量绘制)
└── Sources/Launcher/
    ├── main.swift                       # 程序入口(accessory 模式,无 Dock 图标)
    ├── AppDelegate.swift                # 生命周期、状态栏菜单、打开设置
    ├── HotKeyManager.swift              # 全局热键(组合键 + 双击修饰键检测)
    ├── HotkeySettings.swift             # 热键设置的读写与显示
    ├── SettingsWindowController.swift   # 设置窗口(自定义热键 GUI)
    ├── SearchEngine.swift               # App 枚举 + mdfind 文件搜索(支持中文名)
    ├── SearchField.swift                # 搜索框(拦截 ↑↓ / Esc)
    ├── LauncherWindow.swift             # 无边框窗口(可接收键盘焦点)
    ├── ResultCellView.swift             # 结果行视图(图标+名称+路径)
    ├── ThumbnailProvider.swift          # 图片/视频预览缩略图(QuickLook + 缓存)
    └── LauncherWindowController.swift   # 主窗口、列表、拖拽、打开逻辑

About

macOS 快速启动器(类 Raycast):全局热键呼出,搜索 App/文件、剪贴板历史,按显示器记忆窗口位置

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages