/matrix-tui

(WIP) A terminal based Matrix client

Primary LanguageCGNU General Public License v3.0GPL-3.0

matrix-tui

A terminal based Matrix client, WIP. Abandoned, not likely to be worked on in the near future... :/

Click the below image to view an asciinema demo:

asciicast

Login

Room

TODO

  • UI
    • Login
    • Register
    • Autocomplete Usernames
    • Typing Indicators
    • Indicators For Unread Messages
    • Treeview
      • Navigation (Including Nested Spaces)
      • Calculate Orphaned Rooms For Root
      • Bottom Status Bar For Traversing Space Path
      • Group Rooms
        • DMs
        • Invites
        • Spaces
    • Maintaining State Of Rooms
      • (Un)Orphaning Of Rooms
      • DM converted to Room / Room converted to DM
      • Invite Accepted
      • Room Joined
      • Room Left / Space Left, Orphaning All Rooms Under It
      • Room Topic Changed
      • Room Name Changed
    • Fuzzy Search For Rooms
    • Message Buffer
      • Word Wrap
      • HTML Rendering
        • Markdown
        • Syntax Highlighting Code
      • Interactive / Clickable Elements
        • Horizontally Scrollable Code Blocks
        • Clickable URLs / Hyperlinks
  • Rooms
    • Sending Messages
      • Plaintext
      • Markdown
      • Mentioning Users
      • Replies
    • Editing Messages
    • Display Topic
    • Joining (Invites or by ID)
    • Pagination
    • Reactions
  • Write Tests

Pre-requisites

The above can be installed through your distribution's package manager. The corresponding package names are usually suffixed with -dev, such as libcurl-dev depending on your distribution.

A few dependencies are bundled:

  • libmatrix - Library for interacting with matrix APIs.

  • stb - Data structures from stb_ds.h

  • termbox-widgets - Widgets for termbox such as input fields and trees.

  • termbox2 - The terminal rendering library

Make sure to run git submodule update --remote --init --depth=1 -f to clone them.

Building

  • Run meson . build and ninja -C build to build the project. The binary will be stored at build/matrix-tui

Architecture

...

Contributing

Contributions are always welcome, the following points should be kept in mind:

  • Pass -Db_sanitize=address,undefined to meson to enable sanitizers which help in finding memory leaks or undefined behaviour.

  • Before submitting a PR, format the code with ninja -C build clang-format which runs clang-format.