Skip to content

isene/pointer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pointer - Terminal File Manager

Rust License Platform Stay Amazing

A fast, feature-rich terminal file manager written in Rust. Two-pane layout with syntax-highlighted previews, inline image display, archive browsing, SSH remote access, async file operations, OpenAI integration, and comprehensive undo. Feature clone of RTFM.

Built on crust (TUI) and glow (images). Single binary, ~3.6MB, ~50ms startup.


Quick Start

# Download from releases (Linux/macOS, x86_64/aarch64)
# Or build from source:
git clone https://github.com/isene/pointer
cd pointer
cargo build --release

# Run
./target/release/pointer

# Start in specific directory
pointer ~/Documents

# Use as file picker
pointer --pick=/tmp/selected.txt

Press ? for built-in help. Press q to quit (saves state).


Screenshots

Directory browsing File preview with bat
Directory browsing File preview
Image preview
Image preview

Key Features

  • Two-pane layout with configurable width ratio and border styles
  • LS_COLORS support for consistent terminal theming
  • Syntax highlighting via bat/batcat
  • Image preview via kitty/sixel/w3m protocols (using glow)
  • Archive browsing (zip, tar, gz, bz2, xz, rar, 7z as virtual directories)
  • SSH/SFTP remote browsing (Ctrl-E)
  • Async file operations with progress for large copy/move
  • Comprehensive undo (delete, move, rename, copy, symlink, permissions, bulk rename)
  • Trash system with toggle and browser
  • Tab management (create, close, switch, duplicate, rename)
  • Bookmarks with instant single-key jump
  • Search (filename), grep (content), filter (extension/regex)
  • fzf and navi integration
  • locate with jump-to-result
  • Bulk rename (regex, case conversion, extension change, prefix/suffix)
  • File comparison (diff between two tagged files)
  • Git status display
  • Directory hashing (SHA1 change detection)
  • OpenAI integration (file description, interactive chat)
  • Plugin system (JSON manifests, external commands)
  • Script evaluator (@ mode with full context via env vars)
  • Top bar color matching (path-based, like RTFM's @topmatch)
  • File picker mode (--pick=/path for external tool integration)
  • Scrolloff (3-line margin) and wrap-around navigation

Keyboard Reference

Keyboard reference

Quick Reference

Key Action Key Action
Navigation View
j/k Move down/up a Toggle hidden files
h/l Go up / enter A Toggle long format
PgDn/PgUp Page down/up o Cycle sort mode
HOME/END First/last i Invert sort
~ Home directory - Toggle preview
' Jump to mark _ Toggle images
> Follow symlink b Toggle bat highlighting
Tags Search
t Tag/untag / Search filenames
T Show tagged n/N Next/prev match
u Clear tags g Grep file contents
Ctrl-T Tag by pattern f/F Filter ext/regex
File Ops Tabs
p Copy here ] / [ New / close tab
P Move here J/K Prev/next tab
d Delete 1-9 Switch to tab
c Rename { / } Rename / duplicate
s Create symlink Command
= Create directory : Shell command
E Bulk rename ; Command history
X Compare (2 tagged) @ Script evaluator
U Undo + Add to interactive
Marks Info
m Set mark e File properties
M Show marks G Git status
Clipboard H Hash directory
y Yank to primary S System info
Y Yank to clipboard I AI describe
Ctrl-Y Copy right pane Ctrl-A AI chat

Right Pane Scrolling

Key Action
Shift-Down/Up Scroll line
TAB / Shift-TAB Page down/up
ENTER Refresh preview

Configuration

Config: ~/.pointer/conf.json (auto-created on first run) State: ~/.pointer/state.json (marks, history, recent files) Trash: ~/.pointer/trash/ Plugins: ~/.pointer/plugins/

Config Options

{
  "width": 4,
  "border": 2,
  "preview": true,
  "trash": true,
  "bat": true,
  "show_hidden": false,
  "long_format": false,
  "sort_mode": "name",
  "sort_invert": false,
  "interactive": ["vim", "less", "top", "htop", "fzf", "navi"],
  "c_top_fg": 0, "c_top_bg": 249,
  "c_status_fg": 252, "c_status_bg": 236,
  "topmatch": [["PassionFruit", 171], ["Dualog", 72], ["", 249]],
  "ai_key": "",
  "ai_model": "gpt-4o-mini"
}

Script Evaluator (@)

Press @ to run a shell command with pointer context as environment variables:

Variable Content
POINTER_SELECTED Full path of selected item
POINTER_DIR Current working directory
POINTER_TAGGED Newline-separated tagged paths
POINTER_INDEX Selected index (0-based)
POINTER_COUNT Number of files
POINTER_CONTEXT JSON with all above

Scripts can control pointer via stderr directives: cd:/path, select:filename, status:message.

Plugin System

Plugins are JSON manifests in ~/.pointer/plugins/:

{
  "name": "My Plugin",
  "description": "Does something useful",
  "key": "F5",
  "command": "my-script.sh"
}

Commands receive POINTER_CONTEXT env var with JSON state.

Part of the Rust Terminal Suite (Fe2O3)

Tool Clones Type
rush rsh Shell
crust rcurses TUI library
glow termpix Image display
pointer RTFM File manager
kastrup Heathrow Messaging
tock Timely Calendar
scroll brrowser Browser

Dependencies

Build: Rust toolchain (cargo)

Runtime (optional, for full features):

  • bat or batcat for syntax highlighting
  • fzf for fuzzy finding
  • ImageMagick (convert, identify) for image preview
  • pdftotext for PDF preview
  • git for git status
  • xclip for clipboard (also uses OSC 52)
  • locate for file search
  • navi for cheatsheets
  • curl for AI integration

License

Unlicense - public domain.

Credits

Created by Geir Isene (https://isene.org) with extensive pair-programming with Claude Code.

About

Rust terminal file manager. Feature clone of RTFM with two-pane view, preview, and image display.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages