fnc: 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):
- OpenBSD 6.8–7.4-{current,release}
- macOS Catalina 10.15.7, Big Sur 11.5.2, and Ventura 13.6.1
- Linux Mint 20.2 (32- and 64-bit ARM)
- Ubuntu 18.04, 21.04, 21.10, and 22.04 running Linux 5.1{1,3} (32-bit ARM)
- Debian GNU/Linux 8, 9, and 10
- CentOS 6.5 (32-bit)
- Alpine Linux 3.19_rc1
Alpha development notwithstanding, the timeline
, diff
, tree
, blame
,
branch
, and stash
commands are relatively stable; however, there is no
commitment to refrain from breaking changes.
Install
- OpenBSD
doas pkg_add fnc
- macOS
sudo port install fnc
- FreeBSD
- package:
pkg install fnc
- port:
cd /usr/ports/devel/fnc/ && make install clean
- package:
- NixOS
nix-env -iA nixos.fnc
- Alpine Linux
apk add fnc
n.b. Ensure community repository is enabled (see https://wiki.alpinelinux.org/wiki/Repositories#Community)
Check repology to find if a package is provided for your operating system. If no package exists, download and install the binary on your path.
Build
- clone the repository
fossil clone https://fnc.bsdbox.org
- move into the repository checkout
cd fnc
- build fnc
make
- install the
fnc
binary (requires privileges)doas make install
- 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:
- stash
- interactively select hunks to stash from the diff of local changes on disk
- timeline
- hyperlinked chronological commit history of the repository
- diff
- diff of all changes between commits or blobs
- blame
- annotated file displaying commit attribution history of each line
- tree
- navigable file hierarchy of the repository tree
- branch
- hyperlinked list of all public and private branches
- config
- configure or view fnc settings
See fnc --help
for a quick reference, and the fnc(1) manual page for more
comprehensive documentation. Runtime help can also be accessed with the ?
,
F1
, or H
key binding. There are screenshots that illustrate various
views, and the following video briefly demonstrates some of the key bindings
in use.
Why
fnc
is heavily inspired by tog
, which I missed when I left Got 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 (or fnc
diffs saved with the P
keymap) 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.
Trivia
fnc [fɪŋk]
noun (n.)
- an interactive ncurses browser for Fossil repositories
verb (v.) - to inform
etymology
From the German word Fink, meaning "finch", a type of bird.