ZenChat
Your chat frame already knows where you are. It should act like it.
You set your channels up for roleplay in the city. Then you zone into a raid, and LookingForGroup is still shouting. You /leave it. You come back to town, and now it is gone when you want it. Otherwise, you have to go through the tangle of opening settings, turning it off, then back on again later.
ZenChat keeps a set of channels for each place you go, and swaps between them as you move. City, open world, dungeon, raid group, battleground, your house, and do-not-disturb: seven venues, each remembering what it should show.
It never leaves a channel
ZenChat will never /leave a channel for you. It just hides it.
Leaving a channel renumbers every channel below it. Your /1, your /2, every macro and keybind you have pointing at a number now points somewhere else. Rejoining appends rather than restores, and the client throttles it, so a profile that fires on a zone change would spend its evening leaving and rejoining channels in full view of the room.
ZenChat shows and hides. Your channel numbers never move. You stay joined to everything, so nothing is missed while you are not looking at it, and nothing announces your comings and goings.
What it does to a line
Channel names, shortened. [1. General] becomes [G], or whatever you would rather. Done on the line as it is drawn, after the client has decided which window it belongs in, so nothing is misrouted into silence.
Timestamps worth having. A colour of your choosing, a server clock, or both clocks in one bracket. The client's own timestamp setting cannot express any of those, so ZenChat builds the stamp itself and hands your setting back when you turn it off.
Discord emphasis, read as brightness. *soft* and **strong** lean the line's colour toward an accent at two distances. `code` drops out of the palette to a flat ash, because a code block is a different kind of text, not a louder one.
Relayed lines, marked. A guild with a Discord bridge can have strangers writing into /g: people outside the guild, as long as they've linked their account to discord. The client's event type is not a reliable tell. ZenChat finds the relayed ones and marks them, so a reader knows whose voice they are reading.
TotalRP3 NPC talk, rendered whole. The prefix and the speech verb are parsed out and laid out properly, and hyperlinks inside the line survive the trip.
And to the frame
Copy chat. A button on the frame hands you the text, selectable, straight out of the buffer the client already keeps. Secret escapes are stripped, not copied.
Accented letters. The client has no clipboard and no API that reaches one. So there is a panel of fifty-seven accented forms, and clicking one inserts it at the cursor of whatever edit box you are typing in. For every character whose name you have been spelling wrong for two years.
A tidy left edge. The social toast, the voice controller and the emote button stacked into a column instead of spread down the whole side, and dimmed when nobody is hovering them.
A strip that says which profile is live, so the evening you cannot find Trade lasts four seconds instead of minutes.
What it will not do to you
Formatting goes through Blizzard's own message filter, not a permanent hook on AddMessage.
An undoable hook leaves this addon's fingerprints on a function the client calls constantly, and when the client refuses a protected action it blames the fingerprints rather than the culprit. Somebody else's bag click gets blamed on your chat addon.
ZenChat arms and disarms cleanly, and turning a feature off actually removes it.
Nothing is renamed. Nothing is reparented. Turn ZenChat off and your chat frame is the one Blizzard gave you.
Getting started
Install it, and it works. If you want to change something:
/zchatopens the menu, and the minimap button does the same./zchat capturestores the channels you are showing right now as the profile for where you are standing./zchat stamp,/zchat emphasis,/zchat buttons,/zchat font,/zchat indentfor the pieces.
Every feature is independent. Take the profiles and leave the formatting, or the other way about.
Built for Midnight, Interface 120100. Part of the Zen suite, alongside ZenChannelColours for channel order and colour, SpeakinSpell for automated roleplay speech, and many more.
All of my addons are made by hand. I like not de-skilling.
Bug reports and requests welcome. Bring the error text.
"Conversation" by Lorc, CC-BY-3.0 from game-icons.net. Modified background using GIMP.

