Git Product home page Git Product logo

vgmi's Introduction

Vgmi

Gemini client written in C with vim-like keybindings.

pic0

Keybindings

  • k - Scroll up
  • j - Scroll down
  • gT - Switch to the previous tab
  • gt - Switch to the next tab
  • h - Go back to the previous page
  • l - Go forward to the next page
  • gg - Go at the top of the page
  • G - Go at the bottom of the page
  • / - Open search mode
  • : - Open input mode
  • u - Open input mode with the current url
  • b - Open about:bookmarks in a new tab
  • f - Open about:history in a new tab
  • r - Reload the page
  • [number]Tab - Select link
  • Tab - Follow selected link
  • Shift+Tab - Open selected link in a new tab

You can prefix a movement key with a number to repeat it.

Commands

  • :q - Close the current tab
  • :qa - Close all tabs, exit the program
  • :o [url] - Open an url
  • :s [search] - Search the Geminispace using geminispace.info
  • :nt [url] - Open a new tab, the url is optional
  • :add [name] - Add the current url to the bookmarks, the name is optional
  • :[number] - Scroll to the line number
  • :gencert - Generate a client-certificate for the current capsule
  • :forget [host] - Forget the certificate for the host
  • :download [name] - Download the current page, the name is optional
  • :help - Open about:help in a new tab

Sandboxing

FreeBSD

On FreeBSD, Vgmi uses capsicum(4) to limit the filesystem and to enter capability mode, it also uses cap_net(3) for networking while in capability mode.

OpenBSD

On OpenBSD, Vgmi uses unveil(2) to limit access to the filesystem and pledge(2) to restrict the capabilities of the program.

Linux

On Linux, Vgmi uses seccomp(2) to restrict system calls and landlock(7) to restrict the filesystem.

Illumos and Solaris

On Illumos and Solaris, Vgmi uses privileges(7) to isolate the parser processes.

On top of sandboxing the main process, Vgmi forks itself to parse foreign data in completely isolated and sandboxed processes.

Dependencies

  • LibreSSL - fork of OpenSSL developed by the OpenBSD project
  • termbox2 - terminal rendering library

Optional dependency

Building

Executing the build.sh script will download all dependencies and build Vgmi.

vgmi's People

Contributors

arakimo avatar realmelkor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

arakimo

vgmi's Issues

Mouse support for TTYs?

I use this in NetBSD and Alpine Linux, my setup doesn't have neither X nor Wayland, not even Bash, I'd love to see support for GPM and what nBSD uses for mouse support... Thanks for this! Its awesome! Also, another question; Commands for everything + tab completion would be very handy! So that I don't have to refer to the help page so much!

[Q] Changing the image viewer?

Can the user set a custom image viewer? I suggested handlers, which would allow to get rid of the STB dependency and it'd be more Unixy to use external programs for the image functionality, but is there already another way?

Links containing a dot [ . ] return 51 (not found)

On some gemini pages, relative links to other pages may use . or ..

Vgmi does not appear to be able to load such links correctly.

For example, the following would return error 51:
=> ./2022/08/05/comparing-multi-factor-authentication-methods/ Comparing Multi-Factor Authentication Methods

However, the following link to an RSS feed successfully accessed the download:
=> ./atom.xml Atom Feed

The following error message was displayed:
Not found (51 : Not found gemini://nicksphere.ch/./2022/08/05/comparing-multi-factor-authentication-methods)

Some capsules structure internal links this way, rendering vgmi unable to navigate them.
(encountered the issue here: gemini://nicksphere.ch )

Vgmi creates ~/Downloads

Why? Another method could be using an env variable, for example:

VGMI_DOWNLOADS_DIR

Assigning the value of that env variable to a variable and if the variable is "" then setting the download dir to a default one. Also, a config parameter for this and other directories that vgmi might access would be great

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.