fnc

fnc
Login

fnc: an interactive text-based user interface for Fossil

fnc uses ncurses and libfossil to create a fossil ui experience in the terminal, and parse local changes at the hunk level to prepare atomic commits.

Tested and confirmed to run on the following amd64 systems (additional platforms noted inline):

  1. OpenBSD 6.8-, 6.9-, 7.0-, and 7.1-release
  2. macOS 10.15.7 (Catalina) and 11.5.2 (Big Sur)
  3. Linux Mint 20.2 (32- and 64-bit ARM)
  4. Ubuntu 18.04, 21.04, 21.10, and 22.04 running Linux kernel 5.1{1,3} (32-bit ARM)
  5. Debian GNU/Linux 8, 9, and 10
  6. CentOS 6.5 (32-bit)

Alpha development notwithstanding, the timeline, diff, tree, blame, and branch commands are relatively stable; however, there is no commitment to refrain from breaking changes.

Install

Build

  1. clone the repository
    • fossil clone https://fnc.bsdbox.org
  2. move into the repository checkout
    • cd fnc
  3. build fnc
    • make
  4. install the fnc binary (requires privileges)
    • doas make install
  5. move into an open Fossil checkout, and run it:
    • cd ~/museum/repo && fossil open ../repo.fossil && fnc

This will install the fnc executable and man page into /usr/local/bin and /usr/local/share/man/man1, respectively. Alternatively, cryptographically signed tarballs of the source code and binaries for some of the abovementioned platforms are available to download.

Doc

Commands available in fnc:

  1. stash
    • interactively select hunks to stash from the diff of local changes on disk
  2. timeline
    • hyperlinked chronological commit history of the repository
  3. diff
    • diff of all changes between commits or blobs
  4. blame
    • annotated file displaying commit attribution history of each line
  5. tree
    • navigable file hierarchy of the repository tree
  6. branch
    • hyperlinked list of all public and private branches
  7. config
    • configure or view fnc settings

See fnc --help for a quick reference, and the fnc(1) manual page for more comprehensive documentation. In-app help can also be accessed with the ?, F1, or H key binding. The following video briefly demonstrates some of the key bindings in use.

fnc demo

Why

fnc is heavily inspired by tog, which I missed when I left Got (Git) behind and started using Fossil. The objective is to provide an alternative to fossil ui without leaving the terminal.

Problems & Patches

Please submit bug reports via email, the forum, or by creating a new ticket. As a rule, all reports should include a bug reproduction recipe; that is, either (1) the series of steps beginning with fossil init to create a new repository through to the fnc command that triggers the unexpected behaviour; or, if possible, (2) a shell script that contains all necessary ingredients to reproduce the problem.

Patches are thoughtfully considered and can be sent to the mailing list. While diff -up patches are preferred, fossil patch create and fossil diff patches are also welcomed. Please ensure code conforms to the C99 standard, and complies with OpenBSD's KNF style(9). Any patch containing user-visible code addition, modification, or deletion (i.e., code that impacts user interfaces) should concomitantly include updating documentation affected by the change.

Screenshots

stash stash more stash help diff vsplit diff hsplit renamed diff vsplit added diff vsplit removed blame vsplit tree vsplit branch hsplit in-app help timeline help

Trivia

fnc [fɪŋk]
noun (n.)
1. an interactive ncurses browser for Fossil repositories
verb (v.)
2. to inform
etymology
From the German word Fink, meaning "finch", a type of bird.