A lightweight TUI to scan, search, and manage local git repositories
Project description
Blink
轻量级终端 TUI 工具,用于扫描、搜索和管理本地 git 仓库。
功能
- 自动发现配置目录下的所有 git 仓库
- 双栏联动布局:左侧列表(~40%)+ 右侧详情面板(~60%)
- 两行式列表展示:项目名 + 标签,路径(左)+ Git 状态徽标(右)
- Git 状态徽标显示分支、变更、领先/落后:
main ●(干净)、feature ○ +3(有变更)、fix ● ↓2(落后远程);加载中显示···,获取失败显示⚠ - 置顶常用项目(★ 标记),置顶项目始终排在前面
- 按查看次数自动排序,常用项目靠前
- 按名称、别名、路径、描述、远程 URL 或标签实时搜索
- 别名编辑、标签管理(添加 / 按序号移除)、描述编辑
- 一键用首选 IDE / 系统默认方式打开仓库
- 复制仓库路径到剪贴板
- 后台重新扫描,无需退出 TUI
- Nerd Font 图标支持(通过配置开关启用)
- 窄终端(< 80 列)自动降级为单栏列表模式
安装
pip install blink-repo
使用
blink # 启动 TUI
blink -R # 强制重新扫描后启动(--rescan 的简写)
blink -v # 显示版本号(--version 的简写)
blink run # 执行 tasks.yaml 中定义的任务
blink run --status # 查看任务状态
blink edit # 编辑任务文件
blink edit --add [path] # 添加指定目录的任务并打开编辑器
blink commit -p . # 自动提交当前目录的变更
blink log [N] # 查看任务日志
自动提交功能(
blink commit和 TUI Shift+C)需要已安装 Claude CLI(claude命令)。
首次运行
首次启动时,Blink 会扫描主目录下的 git 仓库并在终端显示进度。扫描完成后自动打开 TUI,展示所有已发现的仓库。
后续启动会直接使用缓存数据打开 TUI,同时自动清理磁盘上已不存在的失效条目。
布局
Blink 采用双栏联动布局:左侧为仓库列表,右侧为详情面板。左侧光标移动时右侧实时更新。
右侧详情面板分三个区域:
- 基础信息(只读):Name、Path、Git、Status
- 操作区(可选中,Enter 执行):IDE、Git(在浏览器中打开)、Commit、Task(添加 Todo 任务)、Finder、Path。聚焦时选中行显示
[Enter],未聚焦时显示对应快捷键徽标 - 本地标记(可编辑):Pinned、Alias、Tags、Description。仅在聚焦时显示选中效果
当终端宽度不足 80 列时,自动降级为仅显示左侧列表。
快捷键
| 按键 | 功能 |
|---|---|
↑ / ↓ |
导航(列表或详情面板) |
Enter |
打开 IDE(列表焦点)/ 执行操作(详情焦点) |
/ |
搜索(任何焦点下可用) |
Tab / → |
焦点移至右侧详情面板 |
Esc / ← |
焦点移回左侧列表 |
Shift+I |
用 IDE 打开 |
Shift+O |
用系统默认方式打开(Finder) |
Shift+P |
复制仓库路径到剪贴板 |
Shift+R |
重新扫描文件系统 |
Shift+C |
自动提交代码(AI 生成 commit message) |
Shift+G |
在浏览器中打开远程仓库 |
Shift+T |
添加 Todo 任务(追加到 ~/.blink/loop/tasks.yaml,完成后自动打开 IDE 编辑) |
Shift+U |
拉取最新代码(git pull) |
Ctrl+C ×2 |
退出程序(2 秒内按两次) |
详情面板操作
使用 Tab 或 → 将焦点移至右侧面板,↑/↓ 选择行,Enter 执行操作:
- IDE — 用 IDE 打开仓库
- Git — 在浏览器中打开远程仓库
- Commit — 自动提交代码(AI 生成 commit message)
- Task — 添加 Todo 任务(追加到
~/.blink/loop/tasks.yaml,完成后自动打开 IDE 编辑) - Finder — 在 Finder 中打开
- Path — 复制仓库路径到剪贴板
- Pinned — 切换置顶状态
- Alias — 编辑别名(Enter 保存,Esc 取消)
- Tags — 管理标签(输入+Enter 添加,数字键按序号删除)
- Description — 编辑描述(Enter 保存,Esc 取消)
所有操作反馈(如提交完成、路径已复制、任务已添加等)均在状态栏显示,5 秒后自动消失。
搜索
按 / 展开搜索输入框(任何焦点下可用),输入内容即可实时过滤仓库。搜索范围涵盖名称、别名、描述、路径、远程 URL 和标签。
- 按
Enter或↓隐藏输入框,保留过滤结果 - 按
Esc或Ctrl+C清空搜索,恢复全部仓库 - 过滤状态下再按
/清空搜索内容并恢复输入框
退出程序
- 按
q无任何效果 Esc仅用于取消操作(退出编辑、退出搜索、焦点切回列表),不会退出程序- 连续按两次
Ctrl+C(2 秒窗口)退出程序
配置
首次运行时,Blink 会在 ~/.blink/config.json 创建默认配置:
{
"scan_paths": ["~"],
"exclude_dirs": [".Trash", ".cache", ".npm", ".docker", ".vscode", "Library", "Applications", "node_modules", "__pycache__"],
"editor": "code",
"preferred_ide": null,
"auto_sync_days": 0,
"nerd_fonts": false
}
| 字段 | 说明 |
|---|---|
scan_paths |
扫描 git 仓库的根目录列表 |
exclude_dirs |
扫描时跳过的目录名 |
editor |
默认编辑器命令 |
preferred_ide |
首选 IDE("v" VSCode / "u" Cursor / "a" Antigravity),首次使用 Shift+I 或 blink edit 时自动设置 |
auto_sync_days |
自动重新扫描间隔天数(0 为禁用) |
nerd_fonts |
启用 Nerd Font 图标(true 启用,false 使用 ASCII) |
所有数据存储在 ~/.blink/ 目录下:
config.json— 用户配置blink.db— SQLite 数据库,存储仓库和远程信息loop/— 任务运行相关数据(tasks.yaml、state.json、logs/、archive/)
开发
环境要求
- Python 3.9+
- uv
- git
- Claude CLI(可选,用于自动提交和任务执行)
初始化
git clone <repo-url> blink && cd blink
uv sync
运行
uv run blink # 启动 TUI
uv run blink -R # 强制重新扫描(--rescan 的简写)
uv run blink -v # 显示版本号(--version 的简写)
uv run blink run -s # 查看任务状态(--status 的简写)
uv run blink commit -p . # 自动提交变更
测试
uv run pytest
调试
在源码任意位置插入 breakpoint(),然后执行 uv run blink,程序会在断点处暂停并进入 pdb 交互调试。
发布
uv build # 构建分发包
uv publish # 发布到 PyPI
许可证
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blink_repo-1.1.2.tar.gz.
File metadata
- Download URL: blink_repo-1.1.2.tar.gz
- Upload date:
- Size: 55.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2838f1eb29429e51bfd68b2feaff6b704bd7eb82c0f7f93d2faa325df4a3a9e3
|
|
| MD5 |
752f99d10620e632465ef6525cbc2ba4
|
|
| BLAKE2b-256 |
b031b7f2f13e68058d69580d8029d90a721acfa8d015df4ac0c9dccd0b67837a
|
File details
Details for the file blink_repo-1.1.2-py3-none-any.whl.
File metadata
- Download URL: blink_repo-1.1.2-py3-none-any.whl
- Upload date:
- Size: 48.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f2dbc4e6e8fc1bbe96fc4aa210498231d75888c370775d53465cbab329db6f0
|
|
| MD5 |
45e442d8e8fff524e423d7036cf37537
|
|
| BLAKE2b-256 |
b4e3fd4b63e71088775262eb4967412db37711fe769e9a3fa220d2aa52a3d509
|