# QReader v0.3.0
A cross-platform file reader and clipboard manager built with Rust using the [eframe](https://github.com/emilk/egui/tree/master/crates/eframe)/[egui](https://github.com/emilk/egui) GUI framework.
## Features
- Open text files via **File → Open…** dialog or directly: `qreader file.txt`
- Real-time clipboard monitoring with configurable auto-update intervals
- Customizable fonts: Default, Monospace, Serif, Sans Serif
- Text alignment: Left, Center, Right, Justify (default)
- Adjustable line spacing (0.8×–3.0×)
- Adjustable font sizes for UI and content areas (independently)
- Background and font color customization with live preview
- Text statistics: line count, word count, last update time
- Always-on-top window option
- Settings persistence — configuration survives restarts
- Keyboard shortcuts for quick access
## Requirements
- Rust toolchain 1.70+
- Windows (primary platform; other platforms compile with minor adjustments)
## Build and Run
```bash
# Clone the repository
git clone https://github.com/holgertkey/qreader.git
cd qreader
# Run in development mode
cargo run
# Build debug binary
cargo build
# Build optimized release binary
cargo build --release
```
The release binary is placed in `target/release/qreader.exe`.
## Usage
```bash
# Open as clipboard manager (default mode)
qreader
# Open a text file
qreader file.txt
qreader path/to/notes.md
# Print version
qreader --version
# Print help
qreader --help
# Run in debug mode (keeps terminal open, enables logging)
qreader -d
qreader -d file.txt
```
Supported file formats: `txt`, `log`, `md`, `json`, `toml`, `yaml`, `ini`, `cfg`, `rs`, `py`, `js`, `ts`, `html`, `css`, `xml`, `sh`, `bat`, and more.
### Controls
| Read clipboard | Click **Read** button or **Ctrl+V** |
| Clear clipboard | Click **Clear** button |
| Increase/decrease font | **Ctrl+Scroll** |
| Open a file | **File → Open…** (native dialog) |
| Save content to file | **File → Save…** (native dialog) |
| Open preferences | **File → Preferences** |
| Exit | **File → Exit** or **Alt+F4** |
> In file mode the **Read** and **Clear** buttons are inactive — the window is read-only.
### Auto-Update
Enable **Auto-update** in preferences to monitor the clipboard continuously.
The minimum update interval is 200 ms to keep the system responsive.
### Preferences
| Background color | Window background color |
| Font color | Text color for content and UI labels |
| UI font size | Size of interface elements (8–24 px) |
| Content font size | Size of displayed clipboard text (8–48 px) |
| Content margin | Left and right padding around the text (0–50 mm) |
| Content font | Font family for clipboard text |
| Text alignment | Left, Center, Right, or Justify (default) |
| Line spacing | Line height multiplier for content text (0.8–3.0×) |
| Always on top | Keep window above all others (requires restart) |
| Auto-update | Periodically check clipboard (200–5000 ms interval) |
## Configuration
Settings are stored in `qreader_settings.json` next to the executable and loaded automatically on startup. If the file is missing, sensible defaults are used.
## Architecture
| `main.rs` | Entry point, CLI argument parsing |
| `app.rs` | Main application state and update loop |
| `clipboard_manager.rs` | Cross-platform clipboard operations |
| `file_reader.rs` | Extensible file reader (trait + registry)|
| `settings.rs` | Persistent configuration management |
| `ui.rs` | GUI rendering functions |
| `font_choice.rs` | Font selection enumeration |
| `build.rs` | Version synchronization to docs |
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for the full version history.