fe75236fad
- /me <action> sends CTCP ACTION - /slap <nick> slaps with a large trout - /q <nick> sets query target, /q clears it - /topic to view/set channel topic - Tab completion for nicks (cycling, : suffix at line start) - Nick list tracking via NAMES/JOIN/PART/QUIT/NICK - Bold formatting for joins, parts, quits, mode changes - Incoming CTCP ACTION displayed as * nick action - Updated README with all commands and features
94 lines
3.0 KiB
Markdown
94 lines
3.0 KiB
Markdown
# 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 2–9: 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+1–9 | 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
|
||
```
|
||
|
||
## License
|
||
|
||
Public domain.
|