first commit

This commit is contained in:
2026-04-29 11:44:36 +02:00
commit e2a5ddf9a0
5 changed files with 1202 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
# 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 (server messages, numerics, notices)
- Window 2: Private messages
- Windows 39: 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
## 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-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 |
| `/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+3 to switch to window 3
2. `/join #channel` — the channel is bound to that window
3. Press ESC+4, `/join #other` — second channel on window 4
4. ESC+1 to check status, ESC+2 for 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.