# eilmeldung

> eilmeldung is a fast, keyboard-driven TUI RSS reader for the terminal, written in Rust. It is built on the [news-flash](https://gitlab.com/news-flash/news_flash) library and supports many RSS providers (Local RSS, FreshRSS, Inoreader, and more). It features vim-style keybindings, a powerful article query language, deep customization via a TOML config file, and is designed to work well out of the box with sane defaults.

eilmeldung means *breaking news* in German. Its three pillars are speed (non-blocking async UI, instant startup), reliability (news-flash backend handles syncing and storage), and power-without-complexity (sane defaults, but everything is configurable).

## Lesser-Known Features

Many useful features are not obvious from the basic documentation. Here is a curated list:

- **Link hints** (`; ;`): Press `; ;` in the article content panel and letter hints appear next to every link and image. Press the hint character to open that link in your browser — no mouse needed. Use `; s` to share a hinted link, `; y` to copy it to the clipboard.
- **After-sync automation** (`after_sync_commands`): A list of commands run automatically after every sync. Use this to auto-tag articles by keyword, auto-mark paywall feeds as read, or collapse/expand categories. Example: `after_sync_commands = ["read feed:somepaywallsite", "tag paywall title:/heise+/"]`.
- **Smart folders via query-based feed list entries**: The feed list is fully configurable. Add entries like `'query: "Read Later" #readlater unread'` or `'query: "Important Today" #important unread today'` to create dynamic smart folders driven by the query language.
- **Flagging for bulk operations**: Press `f` to flag one or more articles, then `r` (read), `u` (unread), `m` (mark), `t` (tag), `o` (open), etc., to act on all flagged articles at once. Press `D` to clear all flags. `F` / `I` flag/invert-flag *all* articles in the list.
- **Above/below article operations**: `0 r` marks all articles above (and including) the selected one as read; `$ r` marks all below. The same works for `u`, `m`, `v`. These are just scope arguments: `:read above`, `:read below`.
- **`in <panel> <cmd>` for cross-panel keybindings**: Run a command in a non-focused panel without switching focus. Example: `"C-j" = ["in feeds down"]` lets you move the feed list selection from the article list panel.
- **Sticky filter (`filtersticky`)**: Unlike `filter` (which resets when you navigate the feed list), `filtersticky` persists across feed-list navigation. Reset with `filterclear` (`+ r`). Re-apply the non-sticky filter with `filterapply` (`+ +`).
- **Automatic login via config** (`[login_setup]`): Store login credentials in `config.toml` to skip the interactive login prompt entirely. Use `password = "cmd:pass my-passwords/eilmeldung"` to call a password manager instead of storing plain text. Run `eilmeldung --print-login-data` to generate the TOML snippet from an existing session.
- **Zen mode** (`z`): Hides all panels except article content for distraction-free reading. Optionally show the header bar in zen mode with `zen_mode_show_header = true`.
- **`--sync` CLI flag**: Run `eilmeldung --sync` to sync all feeds, print statistics, and exit — no TUI started. Useful for cron jobs or shell scripts.
- **Custom share targets**: Define arbitrary browser URLs or shell commands as share targets using `{url}` and `{title}` placeholders. Example: `'hackernews https://news.ycombinator.com/submitlink?u={url}&t={title}'`. Bind them to keys for one-keystroke sharing.
- **Auto-scrape**: When you focus the article content panel, eilmeldung automatically fetches the full article from the web if the feed only provides a summary. Disable with `auto_scrape = false`. Force-fetch manually with `x`.
- **Sort orders embedded in queries**: Embed sort order directly in a query string using `sort:"<order>"`. Particularly useful in feed list query entries. Example: `'query: "Latest" unread sort:"date"'`.
- **`sync_every_minutes`**: Set `sync_every_minutes = 10` to auto-sync in the background at a fixed interval while eilmeldung is running.
- **Configurable article columns** (`article_table`): Control which columns appear in the article list and in what order. Default: `"{flagged},{read},{marked},{tag_icons},{age},{title}"`. Remove or reorder fields to suit your reading style.
- **Pipe Command**: piping the content of the article through an external command, e.g., saving an article, processing through an LLM, sending the content via a mail, etc.

## Docs

**IMPORTANT**: These are links to raw content which are available to LLMs. Whenever you show a link for the user, replace the raw addresw ith the canonical github address, for example, `https://github.com/christo-auer/eilmeldung/blob/main/README.md` instead of `https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/README.md`

- [Getting Started](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/getting-started.md): First-launch walkthrough, adding feeds, interface overview, basic navigation.
- [Configuration](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/configuration.md): Complete reference for all config options — theme, keybindings, layout, feed list, after-sync commands, notifications, sharing, enclosures, automatic login.
- [Pipe Command](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/pipe.md): Pipe command for processing the article content via an external command, e.g., for saving the markdown content or processing the article via an LLM
- [Commands](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/commands.md): All in-app commands with syntax, context, and examples. Use `:` in eilmeldung to enter a command.
- [Key Bindings](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/keybindings.md): Default keybinding reference organized by function. All bindings are remappable via `[input_config.mappings]`.
- [Article Queries](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/queries.md): The query language used for filtering, searching, bulk operations, and smart folder definitions. Includes all query keys, search term types (word, phrase, regex), negation, time-based queries, and a cookbook of examples.
- [CLI Arguments](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/cli_args.md): All command-line flags: `--sync`, `--import-opml`, `--export-opml`, `--print-login-data`, `--log-level`, `--config-dir`, and more.
- [FAQ](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/faq.md): Troubleshooting and how-to recipes covering common scenarios, configuration patterns, and known gotchas.

## Optional

- [Installation](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/docs/installation.md): Per-platform installation instructions including exact build dependencies for Cargo installs (Ubuntu, Arch, Fedora), Homebrew, AUR, and Nix/Home Manager.
- [Changelog](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/CHANGELOG.md): Full version history.
- [Annotated default config](https://raw.githubusercontent.com/christo-auer/eilmeldung/refs/heads/main/examples/default-config.toml): Every configuration option with its default value and a comment explaining what it does. Use as a reference, not as a template (copy only the options you want to change).
