qreader 0.3.0

A clipboard manager and file reader with emoji support and customizable fonts
# 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


| Action                    | Method                               |
|---------------------------|--------------------------------------|
| 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


| Setting           | Description                                           |
|-------------------|-------------------------------------------------------|
| 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


| File                   | Description                              |
|------------------------|------------------------------------------|
| `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.