Embed fonts from repo instead of ~/.local/share/fonts
Move BrassMono font files into fonts/ and use a repo-relative include_bytes! path so the build is self-contained. Add CLAUDE.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
33
CLAUDE.md
Normal file
33
CLAUDE.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project
|
||||
|
||||
Redactor is a two-pane text redaction GUI built in Rust with eframe/egui. Users paste text in the left panel, select regions and press Ctrl+R to toggle redaction, and the right panel shows a live preview with redacted regions replaced by block characters (U+2588). The entire application lives in `src/main.rs`.
|
||||
|
||||
## Build & Run
|
||||
|
||||
```bash
|
||||
cargo build # debug build
|
||||
cargo build --release # release build
|
||||
cargo run # run the app
|
||||
```
|
||||
|
||||
Nix flake provides the dev environment (Rust toolchain + native deps for egui). Direnv auto-loads it via `.envrc`.
|
||||
|
||||
## Architecture
|
||||
|
||||
All logic is in `src/main.rs` (~490 lines) in the `RedactorApp` struct:
|
||||
|
||||
- **State**: source text (`String`) + sorted non-overlapping byte ranges (`Vec<Range<usize>>`) of redactions
|
||||
- **Left panel**: editable `TextEdit` with redacted regions highlighted via `LayoutJob` text formatting
|
||||
- **Right panel**: read-only preview where redacted bytes become full-block characters, preserving whitespace
|
||||
- **Reconciliation**: when source text is edited, `reconcile_redactions` adjusts byte ranges by detecting unchanged prefix/suffix regions
|
||||
- **Range operations**: `add_redaction` merges overlapping ranges; `remove_redaction` splits ranges; all operations snap to UTF-8 character boundaries
|
||||
|
||||
## UI
|
||||
|
||||
- Nord color palette (dark theme) with BrassMonoCode monospace font (bundled .ttf files, embedded at compile time)
|
||||
- Keyboard: Ctrl+R toggles redaction on selection, Cmd+Q quits
|
||||
- Toolbar has keyboard help and "Copy Redacted" button
|
||||
BIN
fonts/BrassMono-Regular.ttf
Normal file
BIN
fonts/BrassMono-Regular.ttf
Normal file
Binary file not shown.
BIN
fonts/BrassMonoCode-Regular.ttf
Normal file
BIN
fonts/BrassMonoCode-Regular.ttf
Normal file
Binary file not shown.
@@ -13,10 +13,7 @@ const NORD9: egui::Color32 = egui::Color32::from_rgb(0x81, 0xA1, 0xC1);
|
||||
const NORD11: egui::Color32 = egui::Color32::from_rgb(0xBF, 0x61, 0x6A);
|
||||
const NORD13: egui::Color32 = egui::Color32::from_rgb(0xEB, 0xCB, 0x8B);
|
||||
|
||||
const BRASS_MONO: &[u8] = include_bytes!(concat!(
|
||||
env!("HOME"),
|
||||
"/.local/share/fonts/BrassMonoCode-Regular.ttf"
|
||||
));
|
||||
const BRASS_MONO: &[u8] = include_bytes!("../fonts/BrassMonoCode-Regular.ttf");
|
||||
|
||||
fn main() -> eframe::Result {
|
||||
let options = eframe::NativeOptions {
|
||||
|
||||
Reference in New Issue
Block a user