(noun) : the quicker picker upper
An interactive tree utility for complete git workflows, written in modern Fortran.
- Shows a tree structure of git files (modified, staged, untracked)
- Proper UTF-8 tree rendering with box-drawing characters (
├──,└──,│) - Color-coded status indicators:
- Green
↑- Staged changes (ready to commit) - Yellow
↓- pending changes from remote - Red
✗- Modified tracked files - Dim grey
✗- Untracked files
- Green
- Supports
--all/-aflag to show all files (with status marked) - Alphabetically sorted output matching the
treecommand format - Interactive mode with full git workflow: stage, unstage, commit, push, diff (with pager), status (with pager), fetch, and pull
paru -S fuss
or
yay -s fussbrew tap FortranGoingOnForty/fuss
brew install fusssudo dnf config-manager --add-repo https://repos.musicsian.com/musicsian.repo
sudo dnf install fussmakeShow only dirty files (default):
./fussShow all files with dirty ones marked:
./fuss --all
./fuss -a # ShorthandInteractive mode (full git workflow):
./fuss -i
./fuss --interactive
./fuss -i -a # Interactive mode with all filesNavigation:
jor↓: Move downkor↑: Move up
Git Operations:
a: Stage file (git add)u: Unstage file (git restore --staged)m: Commit with message promptf: fetch from remotel: pull from remoted: diff selected file in pagerp: Push to remotes: View full git status (scrollable withless)
Other:
q: Quit interactive mode
Dirty files only:
.
├── README.md ✗ # Red ✗ = modified
├── fuss.f90 ✗ # Red ✗ = modified
└── new_file.txt ✗ # Grey ✗ = untracked
All files:
.
├── .gitignore
├── Makefile
├── README.md ✗ # Red ✗ = modified
├── fuss ↑ # Green ↑ = staged
├── fuss.f90 ↑✗ # Both staged AND unstaged changes
└── fuss.o
fuss:trunk # Cyan repo name : Yellow branch name
.
├── README.md ✗ # ← Currently selected (highlighted)
├── fuss.f90 ↑
└── src
└── main.f90 ✗
↑=staged ✗=modified ✗=untracked
j/k/↓/↑: navigate | a: stage | u: unstage | m: commit | p: push | s: status | q: quit
Status Indicators:
- Green
↑- Staged (ready to commit) - Red
✗- Modified tracked file - Dim grey
✗- Untracked file ↑✗- File has both staged and unstaged changes
Interactive mode provides a complete git workflow TUI:
- Repository and branch name in status bar (
repo:branch) - Tree navigation through all files and directories
- Color-coded status indicators (staged, modified, untracked)
- Visual highlighting of selected item
Git Workflow:
- Stage (
a) - Add files to staging area withgit add - Unstage (
u) - Remove from staging withgit restore --staged - Commit (
m) - Interactive commit message prompt - Push (
p) - Push commits to remote repository - Status (
s) - View fullgit statusoutput in scrollablelessviewer
Technical Details:
- Uses
stty cbreak -echofor character-by-character input with proper newline handling - ANSI escape codes for colors and highlighting (
ESC[7mfor selection,ESC[31mfor red, etc.) - Reads arrow key escape sequences (
ESC[A,ESC[Bfor up/down) - Automatically refreshes view after git operations
- Restores terminal with
stty saneon exit
Directory Expansion:
- Automatically expands untracked directories (e.g.,
dir/→ shows all files inside) - Proper nested directory tree structure maintained