Gomphotherium (/ˌɡɒmfəˈθɪəriəm/; "welded beast"), a command line Mastodon client.

Gomphotherium

Gomphotherium (/ˌɡɒmfəˈθɪəriəm/; "welded beast"), a command line Mastodon client.

Description

Gomphotherium is a Mastodon client for the command line, offering a CLI as well as a TUI with a usage similar to rainbowstream. It is intended to be used at 80 characters width maximum, but ideally inside tmux as a sidebar-style program.

Gomphotherium

Installation

Download a binary from the releases page.

Or build it yourself (requires Go 1.16+):

make

User Manual

Authentication

To authenticate with your Mastodon instance, run the following command and follow the instructions:

gomphotherium authenticate https://YOUR-MASTODON-SERVER-URL-HERE.com

TUI

Launch the TUI with the following command:

gomphotherium tui

Note: If you haven't exported the required environment variables that were shown to you during the [Authentication][#authentication], please do so first or use the CLI flags (gomphotherium -h) instead.

Modes

The TUI can be operated in two modes: Normal and Command.

In Normal mode no interaction is possible apart from scrolling and refreshing the timeline and quitting Gomphotherium. The shortcuts can be looked up on the cheatsheet

In Command mode, the command input becomes available and scrolling the timeline is not possible anymore. Commands can then be issued to interact with the Mastodon instance.

Cheatsheet

Shortcuts

This is a list of supported keyboard shortcuts. The information in box brackets tells to which mode the shortcut applies.

: [normal]
Enter Command mode

Esc [command]
Leave Command mode

ArrowUp / k, ArrowDn / j [normal]
Scroll timeline in either direction by one line

PgUp/b & PgDn/f [normal]
Scroll timeline in either direction by one page

u & d [normal]
Scroll timeline in either direction by half a page

g, G [normal]
Scroll timeline to the very top/bottom

Ctrl + R [any]
Refresh timeline

Ctrl + Q [any]
Quit Gomphotherium

Commands

home
local
public
notifications
hashtag tag [local]
Switch between timelines

whois user
Switch to user profile and timeline

t content ...
toot content ...
Publish a new public toot

tp content ...
tootprivate content ...
Publish a new private toot

tu content ...
tootunlisted content ...
Publish a new unlisted toot

td content ...
tootdirect content ...
Publish a new direct toot

re toot-id content ...
reply toot-id content ...
Reply to a toot publicly

rep toot-id content ...
replyprivate toot-id content ...
Reply to a toot privately

reu toot-id content ...
replyunlisted toot-id content ...
Reply to a toot unlisted

red toot-id content ...
replydirect toot-id content ...
Reply to a toot directly

rt toot-id
retoot toot-id
boost toot-id
Boost a toot

ut toot-id
unretoot toot-id
unboost toot-id
Undo boosting a toot

fav toot-id
Fav a toot

unfav toot-id
Undo fav-ing a toot

open toot-id
Open toot in system browser

share toot-id
Copy toot URL to the clipboard

help
?
Show help page

quit
exit
bye
Quit Gomphotherium

Info: \

  • content ... describes the text content of a toot, including inline shortcodes
  • toot-id describes the toot ID (number) visible on the right side of each toot in the timeline
Inline Shortcodes

Inline shortcodes allow to add additional info to toots. They can be added anywhere in the toot content as they get filtered from the toot before publishing.

~!!
Mark toot as sensitive; one-time shortcode

~#[text ...]
Add content warning (spoiler) text to toot; one-time shortcode

~:[/path/to/file]
Add media by file path to toot; can be specified multiple times

Usage Examples

home
Switch to the home timeline

hashtag theStudio local
Switch to the hashtag timeline and search for the hashtag #theStudio on only the local instance

hashtag lol
Switch to the hashtag timeline and search for the hashtag #lol globally

whois [email protected]
Switch to the profile of [email protected] and list his toots

t Hello World!
Publish a new public toot that says Hello World!

tp Mondays are fine. It’s your life that sucks. ~#[Controversial joke]
Publish a new private toot that says Mondays are fine. It’s your life that sucks. with a content warning that says Controversial joke

tu Check out my mustache! ~:[/home/user/Photos/awesome_mustache.jpg] ~!!
Publish a new unlisted toot with a photo attached to it, that is flagged sensitive

re 11 I think so, @brain, but aren't we out of shaving cream?
Publicly reply to toot with ID 11 with I think so, @brain, but aren't we out of shaving cream?

rt 11
Retoot/boost toot with ID 11

help
Show this help

bye
Goodbye!

CLI

The CLI interface allows for exectuion of commands right from the terminal prompt. Not all commands are supported.

Usage Examples

gomphotherium cmd home
Render the home timeline

gomphotherium cmd t Hello World!
Publish a new public toot that says Hello World!

Comments
  • progress/success indicator

    progress/success indicator

    Add simple progress indictor as a prefix for the profile label. Shows progress/success/failure of an executed command.
    I've been seeing some sporadic failures in posting toots and this is a precursor to the actual fix as I haven't been able to catch it happening yet in the debugger. Eventually I'd like to add a status view that contains a record of previous commands and their reason for failure if available.

  • Support user images

    Support user images

    Support cached images + user images as well as a more configurable indentation model that should hopefully make any future changes with respect to indentation a bit easier to manage. I would like to make the vertical line introduced for separating toot #s/images link up to the outside frame via and but that modification to tview may require a whole new container implementation. That's an exercise for later 😅

  • fix-markdown-rendering

    fix-markdown-rendering

    Added hardline breaks to a fork of go-termd that eliminates the errors shown when rendering help content. I've logged a ticket with go-termd and will revert back to mainline branch when my patch is accepted.

  • gomphotherium does not use $BROWSER envvar

    gomphotherium does not use $BROWSER envvar

    First: love your app! Awesome vim like keybindings and the picture rendering is so awesome! 👍

    However i am using it in a wsl instance, and instead of opening toots with my windows chrome.exe which i set in my .profile via export $BROWSER, it opens a linux firefox in a forwarded x session. Is there any way to customize the used browser, or could you default to $BROWSER?

    PS: d / u or f / b as shortcuts for scrolling pages would also be reeeeally nice!

  • timeline strange output

    timeline strange output

    When I run gomphotherium timeline from my bash shell, I get a lot of output and it ends like the following:

    ]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d 8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[:#d6d8d7][#cccecd:]▄[-:-:-]

    [purple]↫ 0[-] [green]↻ 2[-] [yellow]★ 0[-] [grey]on Apr 7 at 11:10[-]

    Running gomphotherium tui, I'm presented with a blank interface, but I assume that will be solved, once the issue above is solved.

    I'm running Ubuntu 20.04 with awesome wm, st and bash. Which setting should I tweak and/or how can I get this awesome mastodon client running? Thanks in advance.

  • ux improvements + crash fix

    ux improvements + crash fix

    • consistent seeds for justification so that reloads of the same content produce the same strings
    • prevent entering of : when it would be the first character in command mode
    • prevent automatic refresh from scrolling to end of content (unless its the first load)
    • run periodic refresh through progress code and enforce only one progress operation at a time. This has ux implications but also fixes an intermittent crash where the refresh happens during the act of drawing the content of a manual command. Toots are swapped out during iteration and boom.
  • Command history view

    Command history view

    Adds :history function that shows a table of the last 100 commands and their results. Cell contents are expandable into a modal on enter with an option to copy to the clipboard (useful for re-sending failed messages)

  • fix crash when status object is missing (#1)

    fix crash when status object is missing (#1)

    There were cases (at minimum) when notifications did not have statuses. Rather than address in all the various sources of statuses I went with one final check after they had been assembled.

  • introduce user pics

    introduce user pics

    Before I go too far down this rabbit hole and have the PR cleaned up I wanted to run this past you because it's a pretty significant departure from your original vision. I'm proposing UI changes as follows:

    with user images disabled

    snip for privacy

    with user images enabled

    snip for privacy

    I wasn't originally intending move the toot ID to the right but I spent far too long trying to fix the alignment issues brought on by runewidth not reliably measuring the width of certain emojis. The problem is sidestepped by just putting it somewhere else and not worrying about right alignment.

    At any rate, if you're ok with this change I'll get it cleaned up and performant.

A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

Nov 22, 2021
A command line tool to prompt for a value to be included in another command line.

readval is a command line tool which is designed for one specific purpose—to prompt for a value to be included in another command line. readval prints

Dec 22, 2021
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.

asciigraph Go package to make lightweight ASCII line graphs ╭┈╯. Installation go get github.com/guptarohit/asciigraph Usage Basic graph package main

Jan 8, 2023
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.

Table of contents Introduction Reference Contributing Introduction Overview git-xargs is a command-line tool (CLI) for making updates across multiple

Dec 31, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command

git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command. You give git-xargs:

Feb 5, 2022
Package command provide simple API to create modern command-line interface

Package command Package command provide simple API to create modern command-line interface, mainly for lightweight usage, inspired by cobra Usage pack

Jan 16, 2022
A command line tool for simplified docker volume command built with go

dockervol A command line tool for simplified docker volume command built with go. Features: Remove anonymous volume (beta) Remove volume by matching n

Dec 18, 2021
Watcher - A simple command line app to watch files in a directory for changes and run a command when files change!

Watcher - Develop your programs easily Watcher watches all the files present in the directory it is run from of the directory that is specified while

Mar 27, 2022
Basic command line example using golang grpc client tools

This is a basic command line interface that demonstrates using the golang GRPC API. The API is reused between dishy and the wifi router, however both

Jan 3, 2023
Canard. A command line TUI client for the journalist RSS aggregator.
Canard. A command line TUI client for the journalist RSS aggregator.

Canard Canard. A command line TUI client for the Journalist RSS aggregator. Installation Download a binary from the releases page. Or build it yoursel

Jan 6, 2023
A client for managing authzed or any API-compatible system from your command line.

zed A client for managing authzed or any API-compatible system from your command line. Installation zed is currently packaged by as a head-only Homebr

Dec 31, 2022
dog is a command-line DNS client, like dig.
dog is a command-line DNS client, like dig.

dog is a command-line DNS client, like dig. It has colourful output, understands normal command-line argument syntax, supports the DNS-over-TLS and DNS-over-HTTPS protocols, and can emit JSON.

Jan 7, 2023
A simple command-line client for Clash.

Clashcli A simple command-line client for Clash. Interacts with Clash using its REST API. Select nodes for groups Run latency test for a node Help $ c

Oct 10, 2021
Command line tool for processing client transaction data in CSV format

command line tool for processing client transaction data in CSV format. thank you for looking! build instructions: $ git clone https://github.com/lnit

Oct 29, 2021
Command -line graphql client written in golang

go-graphql-cli Command -line graphql client written in golang.

Nov 24, 2021
Command-line tool to customize the official Spotify client. Supports Windows, MacOS and Linux.
Command-line tool to customize the official Spotify client. Supports Windows, MacOS and Linux.

Command-line tool to customize the official Spotify client. Supports Windows, MacOS and Linux. Features Change colors whole UI Inject CSS for advanced

Jan 2, 2023
Gowebdav - A golang WebDAV client library and command line tool.

GoWebDAV A golang WebDAV client library. Main features gowebdav library allows to perform following actions on the remote WebDAV server: create path g

Jan 3, 2023
LINE account link: Sample code for LINE account link
LINE account link: Sample code for LINE account link

LINE account link: Sample code for LINE account link This is sample code to demostration LINE chatbot account link, refer to document https://develope

Dec 11, 2021
argv - Go library to split command line string as arguments array using the bash syntax.

Argv Argv is a library for Go to split command line string into arguments array. Documentation Documentation can be found at Godoc Example func TestAr

Nov 19, 2022