Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Todo Tray 📋

一个用 Rust 写的、驻留系统托盘的待办小工具:最小化后藏在托盘里,到点自动弹窗提醒,深色现代界面。

✨ 功能

  • 添加 / 删除 / 完成 / 内联编辑待办事项
  • 为事项设置提醒时间,到点自动弹出提醒窗口
  • 提醒窗口支持「标记完成」「稍后提醒(5 分钟)」「知道了」
  • 系统托盘图标:左键单击切换窗口显隐,右键菜单可退出
  • 数据自动保存到 ~/.todo-tray.json,重启不丢失
  • 支持「全部 / 待办 / 已完成」筛选

🛠 技术栈

用途
eframe / egui 即时模式 GUI
tray-icon 系统托盘
chrono 时间与提醒
serde / serde_json 本地数据持久化

🚀 运行

cargo run

发布构建:

cargo build --release

🖥️ 平台与桌面环境支持

托盘图标基于 tray-icon,在各系统上使用各自的原生后端,同一份代码即可运行:

操作系统 托盘后端 中文字体
Linux appindicator / D-Bus StatusNotifierItem 思源黑体(Noto Sans CJK SC)
Windows 原生 Shell_NotifyIcon(任务栏托盘) 微软雅黑
macOS NSStatusItem(菜单栏) 苹方(PingFang SC)

Linux 桌面环境能否显示托盘图标,取决于它是否实现了 StatusNotifierItem 协议(与桌面使用 GTK 还是 Qt 无关):

桌面 / 合成器 是否显示托盘
KDE Plasma、Xfce、Cinnamon、MATE ✅ 原生支持
GNOME ⚠️ 默认不支持,需安装 AppIndicator 扩展
Sway / Hyprland 等 wlroots 合成器 ⚠️ 需 waybar 等带 tray 模块的面板

Linux 系统依赖

系统托盘需要 GTK3(桌面环境一般自带)和 libayatana-appindicator

# Arch Linux
sudo pacman -S libayatana-appindicator

# Debian / Ubuntu
sudo apt install libayatana-appindicator3-1

# Fedora
sudo dnf install libayatana-appindicator

疑难解答:托盘图标不显示

如果运行后托盘没有出现图标,按顺序排查:

  1. 确认桌面环境支持托盘(见上方表格)。GNOME 需装 AppIndicator 扩展;Sway / Hyprland 需 waybar 等带 tray 模块的面板。
  2. KDE Plasma:右键面板 → 编辑面板 → 系统托盘 → 确认「状态和通知 / Status and Notifications」已启用(默认开启)。
  3. D-Bus 会话一致:程序需与桌面在同一 D-Bus session bus。若在 SSH / 容器 / 其它用户下运行,环境变量 DBUS_SESSION_BUS_ADDRESSDISPLAY 可能与桌面会话不一致,导致托盘注册到错误的 bus。请在桌面终端里直接运行 cargo run
  4. GTK 主循环appindicator 的托盘注册是异步的,本程序已在主循环里每帧 pump GTK 事件(gtk::main_iteration_do)以确保注册完成;若你改造本项目换用其它 GUI 框架,请保留这一步。

🔤 中文显示(字体)

egui 默认只内置拉丁字体、不读取系统字体,所以中文需要手动加载,否则会显示成「豆腐块」。

本程序在启动时会加载各平台的原生中文字体并注册为字体回退——拉丁字符仍用 egui 默认字体,中文 fallback 到系统中文字体:

平台 字体 查找位置(带 fallback)
Linux 思源黑体 通过 fontconfig 查找 Noto Sans CJK SC
Windows 微软雅黑 %WINDIR%\Fonts\msyh.ttc
macOS 苹方 /System/Library/Fonts/PingFang.ttc

若所有候选字体都未找到,程序会打印提示且中文暂时显示为方块——安装对应中文字体后即可正常。

📝 使用提示

  • 提醒时间格式:YYYY-MM-DD HH:MM,例如 2025-01-02 09:30
  • 留空表示不提醒
  • 点窗口顶部的「📥 最小化到托盘」把窗口收起,左键托盘图标恢复
  • 提醒时间已过且未完成会显示为红色,到点自动弹窗
  • 数据文件位置:~/.todo-tray.json

📁 目录结构

todo-tray/
├── Cargo.toml
├── README.md
└── src/
    ├── main.rs          # 入口、托盘图标与菜单、事件轮询
    ├── app.rs           # 应用状态、egui 界面(列表/编辑/提醒弹窗)
    └── todo_model.rs    # 数据模型、JSON 持久化

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages