Files
holckmirk/README.md
T
anders 2e7006a8d5 Fix translation detection for Cyrillic and ISO-8859-1
- Skip ISO-8859-1 Latin chars (0xC0-0xFF) to avoid Swedish false positives
- Require 3+ non-Latin chars to trigger translation
- Handle both UTF-8 and single-byte Cyrillic encodings
- Update README with ai_port option
2026-04-30 12:15:17 +02:00

111 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mirk — Holck's IRC Client
A lightweight terminal IRC client written in C with automatic charset conversion and ircII-style window levels.
## Features
- **Automatic charset conversion** — detects UTF-8, UTF-16 (BOM), and ISO-8859-1 input; always sends ISO-8859-1 on the wire
- **Window levels** — isolated windows with independent 500-line scrollback:
- Window 1: Status and private messages
- Windows 29: Channels
- **Status bar** — shows current window, channel, nick prefix (@/+), channel modes, and activity indicator
- **UTF-8 terminal support** — full multi-byte input editing
- **Tab completion** — nick completion with cycling (`: ` suffix at line start, space mid-line)
- **Query mode** — `/q nick` to set a default PM target
- **CTCP VERSION** reply with OS info
- **SIGWINCH** handling (terminal resize)
- **Ident** — works with system identd on port 113
- **Real name** from passwd GECOS field
- **Charset logger** — logs raw incoming bytes with hex dump and detected encoding to `irc.log`
## Building
```
make
```
Requires only a C compiler and POSIX headers. No external dependencies.
## Usage
```
./irc <nick> <server> [port]
```
Port defaults to 6667.
## Key Bindings
| Key | Action |
|-----|--------|
| ESC+19 | Switch window |
| Tab | Nick completion (cycle with repeated Tab) |
| Ctrl-A | Beginning of line |
| Ctrl-E | End of line |
| Ctrl-U | Kill to beginning (yank buffer) |
| Ctrl-K | Kill to end (yank buffer) |
| Ctrl-Y | Yank (paste) |
| Ctrl-P | Page up (scroll back in history) |
| Ctrl-N | Page down (scroll forward) |
| Ctrl-D | Quit (EOF) |
| Ctrl-C | Quit prompt (Y/N, default N) |
## Commands
| Command | Description |
|---------|-------------|
| `/join #channel` | Join channel (assigned to current window) |
| `/part [#channel]` | Part channel (defaults to current) |
| `/msg <target> <text>` | Send private message |
| `/q <nick>` | Set query target (type text to send to them) |
| `/q` | Clear query target |
| `/me <action>` | Send action to channel/query |
| `/slap <nick>` | Slap with a large trout |
| `/nick <newnick>` | Change nickname |
| `/mode <target> <modes>` | Set mode |
| `/topic [#channel]` | View topic |
| `/topic #channel <text>` | Set topic |
| `/names [#channel]` | List users in channel |
| `/whois <nick>` | WHOIS query |
| `/wii <nick>` | Extended WHOIS (queries remote server) |
| `/quit [reason]` | Quit (default: "See you later") |
| `/raw <line>` | Send raw IRC command |
Typing text without a `/` prefix sends to the channel on the current window (or query target on window 1).
## Window Workflow
1. Press ESC+2 to switch to window 2
2. `/join #channel` — the channel is bound to that window
3. Press ESC+3, `/join #other` — second channel on window 3
4. ESC+1 to check status and private messages
Each window maintains its own scrollback. Switching redraws the full history.
## CTCP VERSION Reply
```
Holck's Mirk, OS: Linux 6.x.x x86_64 :: This space available for rent
```
## AI Translation
Optional auto-translation of messages in non-Latin scripts (Cyrillic, CJK, Arabic, etc.). Requires an OpenAI-compatible API (ollama, vLLM, or OpenAI).
Configure `~/.hircrc` (created on first run with empty/disabled values):
```
ai_type=ollama
ai_host=localhost:11434
ai_key=
ai_model=llama3
ai_target_lang=english
ai_skip_langs=swedish,english
```
Host can include port (`host:port`) or use a separate `ai_port=` line. When configured, foreign-script messages are shown immediately with an italic translation appearing below after 1-5 seconds. Leave values empty to disable.
## License
Public domain.