improved list2map.sh a bit
Improved gmi2map logic
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”
― Antoine de Saint-Exupéry, Airman's Odyssey
Bopher-NG is an ambitious attempt to write a full-featured Gopher client/browser in under 350 SLOC of pure Bash code. It started off as a really crude and unoptimized prototype developed right in this blog post for educational purposes.
Improvements over the original Bopher from that post:
gopher://URLs from the command line
telnet://URIs (not opening anything for security reasons)
"Pure Bash" means any external commands must only be used if absolutely required. For now, Bopher-NG only depends on three external commands (all POSIX-compliant):
cat(to handle possibly binary data read from the socket)
stty(to fetch current terminal size in rows and columns)
date(to shape entry timestamps when stashing links)
This Bopher-NG repo also contains a set of useful tools (also written in pure Bash) to ease authoring and publishing your own Gopher content. See the Bopher Tools README for more information.
Bopher-NG was only tested on Bash 5.1, but should support any version from 4.2 and up.
Just run it specifying all the necessary components of the Gopher resource:
bopher-ng.sh host[ port][ selector][ type]
Or, you can just specify a valid
bopher-ng.sh gopher://texto-plano.xyz:70/0comandos.txt is the same as
bopher-ng.sh texto-plano.xyz 70 comandos.txt 0 and will open the same document.
In both cases, only the host is required. If everything else is omitted, the port will default to 70, the selector will default to
/ and the resource type will default to 1.
Also, your selectors now can have a
%09[search] part, so you can specify your search queries directly on start and also save them later.
Besides having Tor itself up and running, you also need to have the
torsocks wrapper installed:
torsocks bash bopher-ng.sh gopher://[some-address].onion
No. Besides the ambiguity problem, it will also introduce huge external dependencies. Use .onion services instead whenever possible.
Link stash is a viable and interoperable alternative to both bookmarks and clipboard that can be implemented with pure Bash. Essentially, it's an append-only text file at a fixed location (
~/.bopher-links.txt by default) where the user can instruct Bopher-NG to save the link to the currently viewed resource. For your convenience, links are stashed with a UTC-based timestamp and in the
gopher:// format, so they can be copied from the file later and used in other browsers. As of now, every stash file line is a valid Gophermap line, so can easily share your findings on the Gopherspace whenever you want.
You can override the
BOPHER_LINKSTASH environment variable to change the location and name of this file if you need to.
This functionality is too OS/environment-specific and thus can't be built into Bopher-NG. Since April 2023, however, Bopher-NG supports copying the current URL to the OS/env clipboard at the same time as stashing, if and only if you set the
BOPHER_CLIP environment variable before invocation. This variable must be set to a valid command that performs copying the standard input to the system clipboard. If you plan on using it constantly, I suggest to add one of the following values to your
export BOPHER_CLIP='xsel -bi'
export BOPHER_CLIP='xargs -0 screen -X register .'
Even then, this functionality isn't guaranteed to work on any system. Please verify by yourselves how your operating environment handles the clipboard and adjust this variable accordingly.
By default, they go to your current working directory, i.e. the directory you are running this script from. To override this with a fixed path, set the
BOPHER_DLDIR environment variable.
Bopher-NG's mouse input is supported on any terminals that support the 1000 and 1006 mouse reporting modes. This includes but is not limited to:
Note that, unlike clipboard, this support is required at the client side only. For instance, you can safely run
bopher-ng.sh on any compatible Bash version in an SSH session on your terminal and still be able to use mouse there.
If you don't want to use mouse capture (for instance, to be able to select and copy things with the terminal app itself), you can temporarily turn off mouse support (and then turn it back on) using the m key.
Fully public domain.