Skip to main content

Mercuriceratops

                              _---_  _---_
                             /     \/     \
                            /  __  !!  __  \                               x
                           (  ___  ||  ___  )                             .
                      .__---\  __  !!  __  /---__.                 .   .
                    /        \   _ || _   /        \           .
                   /      (O)=     ..     =(O)      \        .
                  |-          \         /  .         |         .
  (*)             |   .        /{}`  ´{}\            |       .
    \  (-)        |            \ c    c /       .    |\   .
     \V/          |        .    \  {}  /             |-\´
     ´\           |_             \    /   .          |--\´
      V            \   .   V      \/\7       7      /\---\´     ,
  (+) |             \       \      \/  .    /      /  \---\´___/\,
    \  (x)          /__      V=---_____---=V    .  _\  \________/´
    ´\v/            |        /--¨       ¨--\        |
   .. V .  ...    _/o^o^o^o^`\_           _/´^o^o^o^o\_   .  ..spitlo 2020
 __ .  . ____ ____ ____ _  _ ____ _ ____ ____ ____ ____ ___ ____ ___  ______>
    |\/| |___ |__/ |    |  | |__/ | |    |___ |__/ |__|  |  |  | |__] [__
    L  L |___ L  \ |___ |__| L  \ | |___ |___ L  \ L  |  L  |__| L  _____]
 - -- ----- ---- ---------------------------- ---- -------------- -/-- --- - +

A Gemini client written for Deno

This is a very pretty basic client for Gemini, inspired by the 100 LOC demos by solderpunk. Mainly to try Deno, but also to test the Gemini protocol.

Install/update

Assuming Deno is installed and Deno’s bin folder is added to your path:

deno install -f --allow-net -n merc https://deno.land/x/merc@v1.7.0/cli.ts

Mercuriceratops will now be installed as merc and available to run from your command line:

$ merc
URL>

Run from source

Assuming Deno is installed:

$ cd mercuriceratops
$ ./merc
URL>

Usage

To visit a Gemini page, enter the URL at the URL> prompt or start it with a URL as argument. Merc only handles Gemini links for now, and you can leave out the protocol part of the URL. To go back, enter ‘b’ at the prompt. To quit, enter ‘q’. To search using gus.guru, enter ‘s’ and then enter your query at the SEARCH> prompt. To follow a link, enter the link number and press enter.

You can also supply a URL directly:

$ merc gemini.circumlunar.space
Connecting to <gemini.circumlunar.space>
Following redirect to: gemini://gemini.circumlunar.space/
Connecting to <gemini.circumlunar.space>

Options

  -h, --help
          Prints help end exits
  -d, --dump
          Prints document body and exits
  -w, --width <number>
          Wraps text at <number> columns
  -p, --paginate <number>
          Show <number> of rows at a time.
          Defaults to 50 if no <number> is supplied

Todo

  • Pagination
  • More/better styling in interactive mode
  • Fix “up” (../) links
  • Break out Gemini parser
  • Add start page
  • Fix links on start page
  • Add more todos
  • Add search (gemini://gus.guru/)
  • Fix ‘b’, back works more like cd - now
  • Clean up argument parsing
  • Deno install (merc?)
  • Lock dependency versions
  • Add to deno.land/x
  • Don’t fail catastrophically on cert errors
  • Handle certs better (See section 4, TLS)
  • Add a timeout (and/or the possibility to cancel) when loading a page
  • Word wrap for headers when width is set
  • Word wrap for link labels when width is set
  • Implement ‘f’, forward
  • Implement a history tree? (Something like what Nyxt has)
  • Bookmarks?
  • Handle gopher?
  • Handle downloads?
  • Handle http(s)?

Reference

Gemini specs