79b61b86c9
TODO: Get the default directory properly with XDG |
||
---|---|---|
config | ||
deb/DEBIAN | ||
debug | ||
interface | ||
lib | ||
matrix | ||
scripts | ||
ui | ||
.codeclimate.yml | ||
.editorconfig | ||
.gh-deployer.yaml | ||
.gitignore | ||
.gitlab-ci.yml | ||
.travis.yml | ||
chat-preview.png | ||
go.mod | ||
go.sum | ||
gomuks.go | ||
LICENSE | ||
main.go | ||
README.md |
gomuks
A terminal Matrix client written in Go using mautrix and mauview.
Basic usage is possible, but expect bugs and missing features.
Discussion
Matrix room: #gomuks:maunium.net
Installation
Once the client becomes actually usable, I'll start making GitHub releases with precompiled executables. For now, you can either download a CI build from GitLab CI or compile from source:
- Install Go 1.12 or higher
- Clone the repo:
git clone https://github.com/tulir/gomuks.git && cd gomuks
- Build:
go build
Simply pull changes (git pull
) and run go build
again to update.
Debugging
If something doesn't work but it doesn't crash, check the /tmp/gomuks/debug.log
file for any errors.
Developing
Set DEBUG=1
to enable partial deadlock detection and to write panics to stdout instead of a file.
To build and run with race detection,
use go install -race
and set GORACE='history_size=7 log_path=/tmp/gomuks/race.log'
when starting gomuks, then check /tmp/gomuks/race.log.<pid>
. Note that race detection
will use a lot of extra resources.
Proper debuggers are too fancy, but normal prints won't work in a TUI application. To write to the
debug log mentioned previously, use the maunium.net/go/gomuks/debug
package:
package foo
import (
"maunium.net/go/gomuks/debug"
)
func Foo() {
debug.Print("WHY ISN'T IT WORKING?!?!?")
debug.PrintStack()
}
Usage
- switch rooms -
Ctrl + ↑
Ctrl + ↓
Alt + ↑
Alt + ↓
scroll chat (line) -↑
↓
- scroll chat (page) -
PgUp
PgDown
- jump to room -
Alt + Enter
, thenTab
andEnter
to navigate and select room
Mouse
- Click to select message or user.
- Click on image with modifer (such as
Ctrl
orAlt
) down to view image.
Commands
General
/help
- View command list./quit
- Close gomuks./clearcache
- Clear room state and close gomuks./logout
- Log out, clear caches and go back to the login view./toggle <rooms/users/baremessages/images/typingnotif>
- Change user preferences.
Sending special messages
/me <text>
- Send an emote./notice <text>
- Send a notice (generally used for bot messages)./rainbow <text>
- Send rainbow text (markdown not supported)./rainbowme <text>
- Send rainbow text in an emote./reply [text]
- Reply to the selected message. If text is not specified, the next message will be used./react <reaction>
- React to the selected message./redact [reason]
- Redact the selected message.
Rooms
Creating
/pm <user id> [...]
- Start a private chat with the given user(s)./create [room name]
- Create a new room.
Joining
/join <room> [server]
- Join the room with the given room ID or alias, optionally through the given server./accept
(in a room you're invited to) - Accept the invite./reject
(in a room you're invited to) - Reject the invite.
Existing
/invite <user id>
- Invite the given user ID to the room./roomnick <name>
- Change your per-room displayname./tag <tag> <priority>
- Add the room to<tag>
.<tag>
should start withu.
and<priority>
should be a float between 0 and 1. Rooms are sorted in ascending priority order./untag <tag>
- Remove the room from<tag>
./tags
- List the tags the room is in.
Leaving
/leave
- Leave the current room./kick <user id> [reason]
- Kick a user./ban <user id> [reason]
- Ban a user./unban <user id>
- Unban a user.
Raw events
/send <room id> <event type> <content>
- Send a custom event./setstate <room id> <event type> <state key/-> <content>
- Change room state./msend <event type> <content>
- Send a custom event to the current room./msetstate <event type> <state key/-> <content>
- Change room state in the current room./id
- Get the current room ID.
Debugging
/hprof
- Create a heap profile and write it togomuks.heap.prof
in the current directory./cprof <seconds>
- Profile the CPU usage for the given number of seconds and write it togomuks.cpu.prof
./trace <seconds>
- Trace calls for the given number of seconds and write traces togomuks.trace
.