fix: 完善 TUI 文本编辑与日期范围交互,发布 v0.3.1 为筛选、桶选择、日期输入和设置输入引入字符级光标编辑,支持左右移动、Home/End 跳转、Backspace/Delete 删除以及在光标位置插入;光标按 Unicode 字符处理,确保中文内容可以安全地在中间编辑。 输入栏现在显示真实终端光标,并分两行展示范围模式与月模式的快捷键,避免窄终端下提示被截断或遗漏通用操作。 日期范围模式统一为精确日期语义:界面显示、编辑和报表筛选均使用 YYYY-MM-DD,同时兼容 YYYY-MM 输入;单月模式继续限定 YYYY-MM。同步公开日期解析函数供 TUI 复用,并更新 CLI 参数说明。 将包版本从 0.3.0 升至 0.3.1;修正发布工作流中已不存在的 examples/mappings.yaml 引用,改为随发行包附带 examples/config.yml,保证标签触发的多平台构建和打包能够完成。
fix: 完善 TUI 文本编辑与日期范围交互,发布 v0.3.1
为筛选、桶选择、日期输入和设置输入引入字符级光标编辑,支持左右移动、Home/End 跳转、Backspace/Delete 删除以及在光标位置插入;光标按 Unicode 字符处理,确保中文内容可以安全地在中间编辑。
输入栏现在显示真实终端光标,并分两行展示范围模式与月模式的快捷键,避免窄终端下提示被截断或遗漏通用操作。
日期范围模式统一为精确日期语义:界面显示、编辑和报表筛选均使用 YYYY-MM-DD,同时兼容 YYYY-MM 输入;单月模式继续限定 YYYY-MM。同步公开日期解析函数供 TUI 复用,并更新 CLI 参数说明。
将包版本从 0.3.0 升至 0.3.1;修正发布工作流中已不存在的 examples/mappings.yaml 引用,改为随发行包附带 examples/config.yml,保证标签触发的多平台构建和打包能够完成。
Beancount 预算分析工具。输入账本 + 预算配置,自动生成预算统计与多格式报告。
支持 TUI 交互模式(无参数或 --tui 启动)和 CLI 批处理模式(带参数运行)。
--tui
详细功能清单与用法见 QUICKSTART.md
TUI 模式 — 推荐日常使用:
# 直接启动,全键盘操作(路径从 budget-tool.toml 加载) cargo run # 显式 TUI:命令行路径作为初始值(TUI 内按 z 可再改) beancount-budget-tool --tui \ --budgets budgets.yml --config config.yml --ledger-dir ./transactions/
模式划分:
budget-tool.toml
--tui [--budgets X --config Y --ledger-dir Z --ledger F]
-m
--year
--compare
--help
--version
TUI 内按 z 可修改预算文件 / 配置文件 / 账本目录 / 币种,修改后按 r 重跑;改动仅本次会话生效(不写回 toml)。
z
r
CLI 模式 — 脚本/自动化:
beancount-budget-tool -m 2026-06 \ --budgets budgets.yml --config config.yml \ --ledger-dir ./transactions/ --scope cumulative
三样东西:
budgets.yml
default_monthly
config.yml
budget:
cargo build --release
default_monthly: # 月预算模板(可选) 储蓄: 700 生活费: 饮食: 2000 交通: 300 数码: 3000 "2026-06": # 6月只写与模板不同的部分 数码: 5000 # 覆盖模板 → 5000 # 生活费.饮食 没写 → 继承模板 2000
生活费.饮食
生活费.交通
YYYY-MM template
tracking_buckets
default_expense_bucket: 生活费 defaults: # 账户 → 桶(最长前缀匹配) "Expenses:Consume:饮食": 生活费.饮食 "Expenses:Consume:交通": 生活费.交通 tracking_buckets: # 跟踪桶:只追踪不预算 - 基金.旅游 - 大额支出 # 多币种汇率(无 @@ 注释的纯外币交易自动换算) currency_rates: JPY: 0.04327 USD: 6.77 asset_bucket_accounts: # 资产桶(可选) 储蓄: - "Assets:Bank:建设银行"
; 基本用法 2026-06-17 * "京东" "买耳机" budget: "数码" Expenses:Consume:电子 2000 CNY Assets:Bank:工行 -2000 CNY ; 多桶 + 金额拆分 2026-06-25 * "基金定投" budget: "电子产品900, 旅游900" Assets:Invest:基金 1800 CNY Assets:Bank:工行 -1800 CNY ; 多币种:@@ 自动转换,或配 currency_rates 2026-07-16 * "Hotel" "日本旅行住宿" budget: "宁波日本之旅" Expenses:Travel 158.12 USD @@ 1070.16 CNY Liabilities:CreditCard -158.12 USD @@ 1070.16 CNY
-m, --month <YYYY-MM>
--from/--to <YYYY-MM>
--year <YYYY>
--budgets <FILE>
--config, -c <FILE>
--scope <month|cumulative>
--bucket <NAME>
--bucket-view <s|m|d>
--sort-by <name|planned|actual|remain>
--expand
--compare <YYYY-MM>
--filter <KEYWORD>
--out-dir <DIR>
--csv-pivot
--out-json
--currency <CODE>
src/ cli.rs CLI 参数 config.rs budgets.yml + config.yml 加载 ledger.rs Beancount 账本解析(含 @@ 价格注释) budget.rs 预算引擎(FlowKind 分类 + 多币种转换) util.rs 基础类型(ReportScope)+ CJK 对齐 tui.rs TUI 交互界面 main.rs 入口 + CLI/TUI 路由 + 集成测试 report/ mod.rs 重导出 shared.rs 共享工具 + 文件导出 text.rs 终端文本报告 md.rs Markdown 报告 csv.rs CSV 导出 json.rs JSON 导出
summary-{range}.md
.txt
buckets-{range}.csv
bucket-{桶名}-{range}.md
asset-locations-{桶名}-{range}.md
pivot-{range}.csv
summary-{range}.json
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
beancount-budget-tool
Beancount 预算分析工具。输入账本 + 预算配置,自动生成预算统计与多格式报告。
支持 TUI 交互模式(无参数或
--tui启动)和 CLI 批处理模式(带参数运行)。快速开始
TUI 模式 — 推荐日常使用:
模式划分:
budget-tool.toml)--tui [--budgets X --config Y --ledger-dir Z --ledger F]-m/--year/--compare等)--help/--versionTUI 内按
z可修改预算文件 / 配置文件 / 账本目录 / 币种,修改后按r重跑;改动仅本次会话生效(不写回 toml)。CLI 模式 — 脚本/自动化:
三样东西:
budgets.ymldefault_monthly模板 + 按月覆盖config.ymlbudget:metadata 标注交易所属桶构建
核心概念
budgets.yml — 纯预算计划
生活费.饮食、生活费.交通YYYY-MM template键)config.yml的tracking_bucketsconfig.yml — 全局配置
Beancount 标注
CLI
-m, --month <YYYY-MM>--from/--to <YYYY-MM>--year <YYYY>--budgets <FILE>--config, -c <FILE>--scope <month|cumulative>--bucket <NAME>--bucket-view <s|m|d>--sort-by <name|planned|actual|remain>--expand--compare <YYYY-MM>--filter <KEYWORD>--out-dir <DIR>--csv-pivot--out-json--currency <CODE>项目结构
输出文件
summary-{range}.md/.txtbuckets-{range}.csvbucket-{桶名}-{range}.mdasset-locations-{桶名}-{range}.mdpivot-{range}.csvsummary-{range}.json