Files
holckmirk/README.md
T
anders 354f0eb8e9 Display incoming UTF-8 natively, convert only outgoing to ISO-8859-1
- Stop converting incoming text to ISO-8859-1 for display
- Terminal is UTF-8, so pass through directly (åäö, Cyrillic, etc.)
- Keep ISO-8859-1 conversion only for outgoing messages
- Add irc.log to .gitignore
2026-04-29 12:34:55 +02:00

85 lines
2.4 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 (@/+), and channel modes
- **UTF-8 terminal support** — full multi-byte input editing
- **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 |
| 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 |
| `/nick <newnick>` | Change nickname |
| `/mode <target> <modes>` | Set mode |
| `/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.
## 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
```
## License
Public domain.