{"id":16057960,"url":"https://github.com/hedyhli/gelim","last_synced_at":"2025-03-18T05:30:27.177Z","repository":{"id":117996617,"uuid":"394648776","full_name":"hedyhli/gelim","owner":"hedyhli","description":"minimalist gemini/spartan client, feels a bit like a shell tbh","archived":false,"fork":false,"pushed_at":"2024-12-14T01:38:24.000Z","size":1665,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-28T07:12:14.199Z","etag":null,"topics":["cli","gemini","gemini-client","golang","hacktoberfest","repl"],"latest_commit_sha":null,"homepage":"https://todo.sr.ht/~hedy/gelim","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hedyhli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-10T12:39:20.000Z","updated_at":"2024-12-14T01:38:28.000Z","dependencies_parsed_at":"2024-10-27T17:20:34.910Z","dependency_job_id":"eb0614fc-65a9-485f-8927-5e2491d474d9","html_url":"https://github.com/hedyhli/gelim","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hedyhli%2Fgelim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hedyhli%2Fgelim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hedyhli%2Fgelim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hedyhli%2Fgelim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hedyhli","download_url":"https://codeload.github.com/hedyhli/gelim/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243902293,"owners_count":20366260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","gemini","gemini-client","golang","hacktoberfest","repl"],"created_at":"2024-10-09T03:05:38.240Z","updated_at":"2025-03-18T05:30:27.170Z","avatar_url":"https://github.com/hedyhli.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gelim\n\n[![builds.sr.ht status](https://builds.sr.ht/~hedy/gelim.svg)](https://builds.sr.ht/~hedy/gelim)\n[![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~hedy/gelim)](https://goreportcard.com/report/git.sr.ht/~hedy/gelim)\n[![libera.chat/#gelim](https://img.shields.io/badge/libera.chat-%23gelim-blue)](irc://irc.libera.chat/#gelim)\n\nA minimalist line-mode smolnet client written in go.\n\n![screenshot](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/gelim-pager.png)\n\n[More screenshots](#screenshots)\n\nYou get a simple line-mode browser interface to save and navigate Gemini,\nSpartan, and Nex URLs, plus a pager to view pages. Nothing else.\n\n**Table of contents**\n\n\u003c!-- mtoc-start --\u003e\n\n* [Features](#features)\n* [Install](#install)\n  * [Prebuilt binaries](#prebuilt-binaries)\n  * [With `go install`](#with-go-install)\n  * [Build from source](#build-from-source)\n  * [Troubleshooting](#troubleshooting)\n* [Usage](#usage)\n  * [Quickstart](#quickstart)\n* [Navigating a page/document](#navigating-a-pagedocument)\n* [The prompt](#the-prompt)\n* [Config](#config)\n  * [Prompt format options](#prompt-format-options)\n  * [Client certificates](#client-certificates)\n* [A note about the pager](#a-note-about-the-pager)\n  * [Mouse support](#mouse-support)\n  * [Search in page](#search-in-page)\n* [CLI Options](#cli-options)\n* [Screenshots](#screenshots)\n* [Behavior details](#behavior-details)\n  * [Link indexing](#link-indexing)\n  * [Redirects](#redirects)\n  * [More...](#more)\n  * [Inconsistent behavior?](#inconsistent-behavior)\n* [Remotes](#remotes)\n* [Discuss](#discuss)\n* [Todo](#todo)\n* [Patches](#patches)\n* [Development](#development)\n* [Meta](#meta)\n  * [Motivation](#motivation)\n\n\u003c!-- mtoc-end --\u003e\n\n## Features\n\n- Quickly visit relative and absolute URLs from the prompt\n- Quickly edit the current URL like a GUI URL bar\n- Client certificates\n- gopher:// protocol support\n- [spartan:// protocol](gemini://spartan.mozz.us) support\n- [nex:// protocol](https://nex.nightfall.city) support\n- Tours, similar to AV-98 to loop between links\n\n## Install\n\n### Prebuilt binaries\n\nDownload the latest binary from either SourceHut or GitHub:\n\n- SourceHut: Visit https://git.sr.ht/~hedy/gelim and click on the \"release\n  notes\" link on the latest version shown under \"refs\"\n- GitHub: Visit [the latest release on\n  GitHub](https://github.com/hedyhli/gelim/releases/latest) and scroll down to see\n  the list of attached assets.\n\nPrebuilt binaries for linux and darwin are provided with both x86 and ARM\narchitectures.\n\nThe tarball archive available for each release includes the **gelim** binary,\nthe license, this readme, and the `gelim(1)` manpage.\n\n[Skip to usage](#usage)\n\n### With `go install`\n\n```sh\ngo install git.sr.ht/~hedy/gelim@latest\n```\n\nNote that this method does not provide version information\n\n[Skip to usage](#usage)\n\n### Build from source\n\nFirst, install the dependencies:\n\n* go (\u003e=1.16)\n\nClone the repo somewhere suitable, such as `/usr/local`:\n\n```sh\ngit clone https://git.sr.ht/~hedy/gelim\ncd gelim\n# Recommended to use latest pinned version, rather than @latest\n# git checkout v0.0.0\n```\n\nBuild, optionally set `PREFIX` (default is `PREFIX=/usr/local`):\n\n```\nmake\n```\n\nIf all goes well, install gelim.\n\nRemember to use the **same** `PREFIX` too.\n\n```sh\nsudo make install\n\n# Or without sudo:\n# $ make PREFIX=~/.local install\n```\n\nIf you don't want to build the manual, you may put your hacker hat on, dive into\nthe Makefile, and copy the `go build` command used to compile gelim. This lets\nyou store version info accessible at `--version`.\n\nOr you know what? Just a `go build` works too! The resulting binary will be\nin the current directory.\n\nOptionally verify your installation:\n\n```\nmake checkinstall\n```\n\nThe gelim binary would be sitting at `$PREFIX/bin/` with manpage at\n`$PREFIX/share/man/` :)\n\n\n### Troubleshooting\n\n* **Something to do with `io.ReadAll`**:\n\n  Gelim requires go version \u003e= 1.16.\n\nIf you're having other issues with installation, please send an email to the\n[mailing list](mailto:~hedy/inbox@lists.sr.ht).\n\n\n## Usage\n\nGelim is a simple program that manages your browsing history and rendering of\npages. It simplifies browsing the internet an action of requesting documents\nthen displaying them. It provides a simple interface for navigating links found\non documents, manage history, navigate relative URL paths, and delegates the\ndisplay of pages to `less(1)`. Think of it as a shell-like wrapper around `curl\n... | less` for browsing pages, but for small internet protocols.\n\n\n### Quickstart\n\nThis tutorial will give you a tour of the basic features of gelim. Follow along\nto get familiar with the interface.\n\nFirst, let's enter gelim with a URL.\n\n```\ngelim geminiprotocol.net\n```\nThis will bring you to less(1). You can use less to browse the page normally.\n\n\u003e **Note**: if you see something like \"-P is not an option\", this is because\n\u003e your system does not support one of gelim's default options for `less(1)`. You\n\u003e should configure your lessOpts to remove the -P option in your\n\u003e [configuration](#config).\n\nWhen you want to visit a link, you have to quit less first. **Press `q`**\n\nThe page will be fetched and you'll be in less again.\n\nNow let's try something more interesting.\n\nWhile you're at the prompt type:\n```\nrawtext.club\n```\nSay you don't have an account on rawtext.club yet and would like to sign up.\n\nGo to the bottom of the page, where the link to signing up is provided. **Type `G`**\n\nThen, you have to quit the pager. **Press `q`**\n\nLook for the link number that links to the sign up page, and enter it directly at the prompt.\nAs of writing, the link number is 38, but keep in mind this number may change when you are\ntrying this out.\n```\n38\n```\nAnd now you've decided to have a look at rawtext.club's values at the front page on more time.\nUnfortunately, the sign up page does not provide a link to go back to home. No worries, you can\ndirectly use the path (prefixed with . or /) at the prompt.\n\nLet's try it out. Quit the pager (**`q`**), and **type `/` and press enter**\n\nVoila, you're at the front page again!\n\nThanks for trying out this quickstart tutorial, there is still much to explore. Type in **`help`**\nfrom the prompt and check out the commands, have fun!\n\n## Navigating a page/document\n\nEverything in page rendering is handled with less(1). less is called with\noptions specified from your config file. gelim has no intervention in\npre-processing any keys.\n\nHence, anything that works in less should work normally when less is called by\ngelim.\n\nUseful navigation keys include: `d`/`u`/`PgDn`/`PgUp`/`Space`.\n\nUseful keys for jumping to positions include: `g`/`G`.\n\nUse `q` to quit.\n\n## The prompt\n\nGelim uses a lightweight readline-like library for parsing the command line\nwithin the line-mode interface. By default, the prompt shows the current URL and\na \"\u003e\" symbol, this can be [configured](#config).\n\nAt the prompt, common line editing keys are supported. Completion for gelim's\ncommands are also supported through \u003ckbd\u003etab\u003c/kbd\u003e and\n\u003ckbd\u003eshift\u003c/kbd\u003e\u003ckbd\u003etab\u003c/kbd\u003e.\n\n## Config\n\nFor people on a Unix system gelim will look for configuration in\n`~/.config/gelim/config.toml`.\n\nGelim follows XDG specification for deciding where to find config and where to\nstore data files.\n\nThough you do not need a configuration file to have gelim working.\n\n```toml\n# example config\n\nprompt = \"--\u003e\"\n# default: \"%U\\n\u003e\" (the full url of # the current page), a new line and a \"\u003e\".\n# (more info below)\n\nstartURL = \"example.com\"\n# default: \"\"\n# the page to visit if starting gelim without a specified link\n\nlessOpts = \"-FSXR~\"\n# will be put in LESS environment variable.\n# default: \"-FSXR~ -P pager (q to quit)\"\n\nsearchURL = \"gemini://kennedy.gemi.dev/search\"\n\nclipboardCopyCmd = \"pbcopy\"\n# Example for MacOS. default = \"\" (unset)\n\nmaxRedirects = 5\n\nindex0shortcut = -1\n# default: unset (0). an alias for link index 0\n\nmaxWidth = 70\n# width of each page is max(\u003cterminalWidth\u003e, maxWidth)\n# set to 0 to always use the terminal width.\n# set to negative X to use a maxWidth of X but disable centering.\n\nuseCertificates = [\n    # default: [] (see details below)\n    \"gemini://astrobotany.mozz.us\",\n    \"gemini://bbs.geminispace.org\",\n]\n```\n\n**clipboardCopyCmd**:\n\nExample for linux with xclip: `xclip -sel c`\n\nContents to be copied will be piped to the command as stdin.\n\n**maxRedirects**:\n- 0: Always confirm redirects\n- `\u003e0`: Ask to confirm redirects after a set number of redirects\n- `\u003c0`: Never confirm redirects. (Please see [this section](#redirects) for\n  behavior details)\n\n**index0shortcut**:\n\nHow gelim should treat link index argument \"0\"; please see [this\nsection](#link-indexing) for details.\n\n**maxWidth**:\n\nThis value is only used for non-preformatted page formats. This includes\ngemtext, where each line is a paragraph, but does not include `text/plain` and\nNex protocol directory pages.\n\n### Prompt format options\n\nYou can use a number of placeholders for your prompt:\n\n- `%U`: Full url of current page including scheme (gemini://example.com/foo/bar)\n- `%u`: Full url of current page without scheme (example.com/foo/bar)\n- `%P`: Absolute path of the current url (/foo/bar)\n- `%p`: Base path of the current url (bar)\n- `%H`: Hostname including port\n- `%h`: Hostname without port\n\nUse `%%` for a literal percent character, and percent-prefixed option that is not supported\nwill be ignored and presented literally.\n\nThe query part of the URL is stripped for all options.\n\nHere are some examples:\n\n```\nconfig    resulting prompt\n-------   -----------------\n\"%U\u003e\"     \"gemini://example.com/foo/bar\u003e \"\n\"%P %%\"   \"/foo/bar % \"\n\"%z\u003e\"     \"%z\u003e \"\n\"%%%% $\"  \"%% $ \"\n```\n\nNewline characters (`\"\\n\"`) in the prompt are supported. The default prompt is\n`%U\\n\u003e`, which produces:\n\n```\ngemini://example.com/foo/bar\n\u003e _\n```\n\nWhere `_` indicates the cursor position.\n\n### Client certificates\n\nSave your `cert.pem` and `key.pem` files in the gelim config directory (such as\n`~/.config/gelim/{cert,key}.pem`). Symlinks are supported.\n\nThen use the `useCertificate` config option to specify the list of URL prefixes\nthat the client certificate should be used on. For example:\n\n```toml\nuseCertificates = [\n    \"gemini://astrobotany.mozz.us/app\",\n    \"gemini://bbs.geminispace.org\",\n]\n```\n\nIf the current visiting URL has a prefix from this list, then the client\ncertificate, if available, will be used.\n\n## A note about the pager\n\nGelim requires less(1) for paged output. If you don't have that installed, or is\non windows, it will print the page directly and you'll have to scroll the page\nyourself (like AV-98). This is a bug and will be fixed in the near future.\n\n### Mouse support\n\nAdd `--mouse` (if your version of less supports it) to `lessOpts` option\nin your config file.\n\n### Search in page\n\nType `/\u003cyour search query\u003e` when less is running. See less(1) for more\ninformation.\n\n\n## CLI Options\n\n```\n~\u003e gelim --help\nUsage: ./gelim [FLAGS] [URL]\n\nFlags:\n  -c, --config string    specify a different config location\n                         \n  -h, --help             get help on the cli\n  -i, --input string     append input to URL ('?' + percent-encoded input)\n                         \n  -I, --no-interactive   don't go to the line-mode interface\n                         \n  -s, --search string    search with the search engine (this takes priority over URL and --input)\n                         \n  -v, --version          print the version and exit\n                         \nFor help on the TUI client, type ? at interactive prompt, or see gelim(1)\n```\n\n**Examples**:\n\nSearch\n```\n~\u003e gelim -s \"astrobotany\"\n```\n\nTest your awesome, boring, classic, totally OG CGI scripts (exits immediately)\n```\n~\u003e gelim example.org/cgi-bin/greet.sh -Ii 'world'\nHello, world!\n\n~\u003e\n```\n\nUse it in scripts to show outputs in stdout\n```sh\n~\u003e cat \u003c\u003cEOF \u003e python-help.sh\nread -p \"help\u003e \"\ngelim do.hedy.dev/help/py -Ii \"${REPLY:-help}\"\nEOF\n\n~\u003e bash python-help.sh\nhelp\u003e input\n'Help on built-in function input in module builtins:\n\ninput(prompt=None, /)\n    Read a string from standard input.  The trailing newline is stripped.\n\n    The prompt string, if given, is printed to standard output without a\n    trailing newline before reading input.\n\n    If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\n    On *nix systems, readline is used if available.'\n```\n\n(Single quotes added on output to aid syntax highlighting.)\n\nSubmit your twtxt to antenna\n```\n~\u003e gelim -I 'gemini://warmedal.se/~antenna/submit' -i 'gemini://do.hedy.dev/tw.txt'\nThank you for your submission! Antenna has now been updated.\n```\n\n\n## Screenshots\n\n**Commands**\n\n![screenshot of `help` command output](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/gelim-cmds.png)\n\n**Tour**\n\n![screenshot of tour command](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/tour.png)\n\n**Edit url**\n\n![screenshot of editing url](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/editurl.png)\n\n**Spartan**\n\n![screenshot of spartan colors](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/spartan-colors.png)\n\n**Links**\n\n![screenshot of links](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/link.png)\n\n**Search**\n\n![screenshot of search command](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/search.png)\n\n**Spartan input**\n\n![screenshot of spartan input functionality](https://raw.githubusercontent.com/hedyhli/gelim/master/assets/spartan-input.png)\n\n\n## Behavior details\n\nA good way to master a piece software is to understand how it works from the\nprogram's perspective.\n\nLet's take a look at some UX details from various parts of gelim that could\nrequire clarification.\n\n- [Link indexing](#link-indexing)\n- [Redirects](#redirects)\n\n\n### Link indexing\n\nLinks on a page are numbered starting from 1. If a page has 3 links, the link\nindices are 1, 2, and 3.\n\nYou can simply type 1, 2, or 3 at the line-mode prompt directly to visit them.\n\n**Negative arguments**\n\n-1 specifies the last link, -2 the second-last link and so on.\n\nThis pattern is applied for ALL commands that take in a link index as argument,\nsuch as **link**, **tour**, **history**, **editurl**.\n\n**Multiple arguments**\n\nCommands **link** and **tour** supports multiple link index arguments, for\nexample:\n\n```\n\u003e link 1 2\n\u003e tour 3 4 5\n```\n\nWhat they do with those links is dependent on what the command is for.\n\n**Index 0**\n\nThis is undefined by default, but can act as a shortcut, set in config\n`index0shortcut`.\n\nA hint is printed when you do not set this config value, and you try to use a\n`0` for link index:\n\n```\n\u003e link 0\n[ERROR] Behaviour for index 0 is undefined.\nYou can use -1 for accessing the last item, -2 for second last, etc.\nConfigure the behaviour of 0 in the config file.\nExample: index0shortcut = -1, then whenever you use 0 it will be -1 instead.\nThis works for commands history, links, editurl, and tour.\n```\n\n**Ranges**\n\nAt the moment, ranges of link indices only work for command **tour**.\n\nRanges can be specified with an upper bound and a lower bound, separated by a\ncomma. Both bounds can be omitted.\n\nThe default value of upper bound is the first link index, and the default value\nof lower bound is last link index.\n\nBounds are inclusive.\n\nNaturally, if both bounds are excluded, all links on current page are selected.\n\n```\ngemini://gemini.circumlunar.space/\u003e l\n[...]\n10 gemini://gemini.circumlunar.space/capcom/\n11 gemini://rawtext.club:1965/~sloum/spacewalk.gmi\n12 gemini://calcuode.com/gmisub-aggregate.gmi\n13 gemini://caracolito.mooo.com/deriva/\n14 gemini://gempaper.strangled.net/mirrorlist/\n15 gemini://gemini.circumlunar.space/users/\n\ngemini://gemini.circumlunar.space/\u003e t 11,\nAdded 5 items to tour list\n\ngemini://gemini.circumlunar.space/\u003e t c\nCleared 5 items\n\ngemini://gemini.circumlunar.space/\u003e t ,\nAdded 15 items to tour list\n```\n\n### Redirects\n\nThe configuration option to set the maximum allowed automatic redirects is\n`maxRedirects`. This is set to 5 by default (following RFC-2068), meaning gelim\nwill follow redirects 5 times, after which, if there are further redirects, user\nwill be prompted for what to do.\n\nThe command to view the history of redirects following current URL is\n`redirects`.\n\nSpecial values:\n- **0**: Ask for input for all redirects\n- **\u003c0** (negative): Automatically follow all redirects\n\nDue to implementation and resource limitations, gelim cannot practically follow\nan infinite number of redirects, nor can gelim save the history of all previous\nredirects and show them all in the `redirects` command.\n\nThe command shows a maximum of 10 most recent redirect URLs.\n\nOnce the number of unprompted redirects reaches 20, gelim aborts and prints the\n10 most recent redirects.\n\nIf you wish, you can still copy the last URL from the output and visit the URL\nas normal.\n\n**What happens when the max number of redirects is reached**\n\nConsider the example where `maxRedirects` is set to 2 in the configuration file.\n\nThis is the behavior of following the redirhell torture test URL:\n\n```\n[...]\nSo, with that said, the first link is to the \"Redirection From Hell\" test, a test\nof a series of temporary redirects, always. The second link is to the next test.\n\n [1] Redirection From Hell\n [2] 0023\ngemini://gemini.thebackupbox.net/test/torture/0022\u003e 1\n[WARNING] Max redirects of 2 reached\n1 gemini://thebackupbox.net/test/redirhell/20190\n2 gemini://thebackupbox.net/test/redirhell/25942\n\nRedirect to:\ngemini://thebackupbox.net/test/redirhell/26941\n[y/n]\u003e y\n[WARNING] Max redirects of 2 reached\n1 gemini://thebackupbox.net/test/redirhell/9114\n2 gemini://thebackupbox.net/test/redirhell/4356\n\nRedirect to:\ngemini://thebackupbox.net/test/redirhell/2582\n[y/n]\u003e\n```\n\nAfter 2 redirects, the user will be prompted **and the count of redirects\nresets**, meaning the user saying \"y\" to prompt is equivalent to the user\nopening a new link of the said URL.\n\nIf the total number of times the user gets redirected for a particular website\nis 10, and `maxRedirects` is set to 3, the user will be prompted 3 times on\nwhether to follow a subsequent redirect.\n\n1. 3 redirects followed\n1. Continue? yes\n1. 3 redirects followed\n1. Continue? yes\n1. 3 redirects followed\n1. Continue? yes\n1. 1 redirect followed\n1. the page loads and is displayed\n\nHere is an example for the behavior of `redirects` command, following the case\nwhere `maxRedirects` is set to 2:\n\n```\n[...]\nSo, with that said, the first link is to the \"Redirection From Hell\" test, a test\nof a series of temporary redirects, always. The second link is to the next test.\n\n [1] Redirection From Hell\n [2] 0023\ngemini://gemini.thebackupbox.net/test/torture/0022\u003e 1\n[WARNING] Max redirects of 2 reached\n1 gemini://thebackupbox.net/test/redirhell/32043\n2 gemini://thebackupbox.net/test/redirhell/1544\n\nRedirect to:\ngemini://thebackupbox.net/test/redirhell/22150\n[y/n]\u003e n\ngemini://gemini.thebackupbox.net/test/torture/0022\u003e redir\n1 gemini://thebackupbox.net/test/redirhell/32043\n2 gemini://thebackupbox.net/test/redirhell/1544\ngemini://gemini.thebackupbox.net/test/torture/0022\u003e\n```\n\n### More...\n\nYou can use `help \u003ccmd\u003e` at the prompt to view usage information for a\nparticular command. If there's anything that is confusing or a pattern/behavior\nthat is hard to remember, let me know!\n\nOf course, a last resort could be studying the source code directly, remember to\nlook at the corresponding version which you built gelim from.\n\n### Inconsistent behavior?\n\nIf there is any inconsistent behavior in gelim's interface, or if it does not\nfollow what is described in the docs, please let me know using a method of\ncontact described below.\n\n## Remotes\n\n- [SourceHut](https://sr.ht/~hedy/gelim)\n- [Tildegit (gitea)](https://tildegit.org/hedy/gelim)\n- [GitHub](https://github.com/hedyhli/gelim)\n- [Codeberg](https://codeberg.org/hedy/gelim)\n\n## Discuss\n\nChat on the `#gelim` channel on libera.chat IRC.\n\nYou can send feature requests or bug reports on\n[GitHub](https://github.com/hedyhli/gelim/issues). If you prefer email, feel\nfree to use my [public inbox](https://lists.sr.ht/~hedy/inbox).\n\n## Todo\n\nSee the [ticket tracker](https://todo.sr.ht/~hedy/gelim).\n\n## Patches\n\nOpen PRs on the [GitHub repo](https://github.com/hedyhli/gelim/pulls), or if you\nprefer patches, use my [public inbox](https://lists.sr.ht/~hedy/inbox).\n\n## Development\n\n```sh\nmake gelim\nmake gelim.1\n# both\nmake all # or just make\nmake clean\n\nmake fmt\nmake checkfmt\n\n# after tagging and pushing\n# cp .envrc.example .envrc\n# requires goreleaser, and sourcehut and github tokens\nmake release         # build and publish to GitHub (with goreleaser)\n.scripts/release.sh  # uploads artifacts to sourcehut\n```\n\n## Meta\n\nGelim = \"**ge**mini\" + \"**li**ne-**m**ode\"-like interface\n\nPronunciation = Ge like \"Jelly\", lim like \"limits\"\n\n### Motivation\n\nThis project started off as an \"AV-98 with a pager\". The line-mode interface is\nlargely inspired by AV-98, except URLs, links indices and relative paths can be\ndirectly entered at the prompt in addition to line-mode commands. Pages are\nrendered with formatting and color, and is automatically sent to a pager for\ndisplay.\n\nGelim is written in Go because I preferred to distribute single binaries.\n\n\n\u003c!--salutations, curious one.--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhedyhli%2Fgelim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhedyhli%2Fgelim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhedyhli%2Fgelim/lists"}