markdown · 2515 bytes Raw Blame History

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Build Commands

fpm build                          # Debug build
fpm build --flag "-O2"             # Release build with optimization
fpm build --flag "-g -Wall -Wextra" # Build with debug flags and warnings
fpm run                            # Build and run
fpm test                           # Run test suite

Dependencies: gfortran 10+ (or ifort), fpm, ncurses library

Architecture

FORTRESS is a CLI file manager written in modern Fortran (2008+) with dual-pane navigation, git integration, and fuzzy search.

Module Structure

app/main.f90              # Main event loop, state management, user input (~1100 LOC)
src/
├── filesystem/fs_ops.f90     # Directory reading, path manipulation, fzf search, file ops
├── ui/display.f90            # Dual-pane rendering (30% parent | 70% current), color output
├── ui/preview.f90            # File preview functionality
├── terminal/term_control.f90 # Raw mode, ANSI codes, terminal size, key reading
├── git/git_ops.f90           # Git status, staging, commits, push/pull, diff display
└── version/version.f90       # Version info (auto-generated by stamp-version.sh)

Key Patterns

State Management: The main event loop in main.f90 manages:

  • Navigation state (current_dir, parent_dir, selected, scroll_offset)
  • Mode flags (move_mode, in_rename_mode, in_selection_mode)
  • Clipboard (has_clipboard, clipboard_paths[], copy vs cut)
  • Multi-select tracking (is_selected[], selection_count)
  • Favorites stored in ~/.fortress_favorites

Terminal Control:

  • Uses alternate screen buffer (ESC[?1049h/l) to prevent scroll artifacts
  • Raw mode via stty for non-blocking, character-by-character input
  • Terminal size caching (refreshes every 100 calls)

External Commands: All shell commands use execute_command_line() - ensure proper escaping for paths with special characters.

Git Integration: Uses git CLI directly; status is cached with 500ms TTL. Directories show recursive status indicators.

Shell Integration: ~/.fortress_cd file enables cd-on-exit feature; wrapper scripts in fortress.sh/fortress.fish read this file.

Constants

Defined across modules: MAX_PATH=512, MAX_FILES=500

Color Scheme

Blue=directories, Green=executables, Grey=dotfiles, Red=cut files/staged, Yellow=warnings/incoming changes

View source
1 # CLAUDE.md
2
3 This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
5 ## Build Commands
6
7 ```bash
8 fpm build # Debug build
9 fpm build --flag "-O2" # Release build with optimization
10 fpm build --flag "-g -Wall -Wextra" # Build with debug flags and warnings
11 fpm run # Build and run
12 fpm test # Run test suite
13 ```
14
15 **Dependencies**: gfortran 10+ (or ifort), fpm, ncurses library
16
17 ## Architecture
18
19 FORTRESS is a CLI file manager written in modern Fortran (2008+) with dual-pane navigation, git integration, and fuzzy search.
20
21 ### Module Structure
22
23 ```
24 app/main.f90 # Main event loop, state management, user input (~1100 LOC)
25 src/
26 ├── filesystem/fs_ops.f90 # Directory reading, path manipulation, fzf search, file ops
27 ├── ui/display.f90 # Dual-pane rendering (30% parent | 70% current), color output
28 ├── ui/preview.f90 # File preview functionality
29 ├── terminal/term_control.f90 # Raw mode, ANSI codes, terminal size, key reading
30 ├── git/git_ops.f90 # Git status, staging, commits, push/pull, diff display
31 └── version/version.f90 # Version info (auto-generated by stamp-version.sh)
32 ```
33
34 ### Key Patterns
35
36 **State Management**: The main event loop in `main.f90` manages:
37 - Navigation state (`current_dir`, `parent_dir`, `selected`, `scroll_offset`)
38 - Mode flags (`move_mode`, `in_rename_mode`, `in_selection_mode`)
39 - Clipboard (`has_clipboard`, `clipboard_paths[]`, copy vs cut)
40 - Multi-select tracking (`is_selected[]`, `selection_count`)
41 - Favorites stored in `~/.fortress_favorites`
42
43 **Terminal Control**:
44 - Uses alternate screen buffer (`ESC[?1049h/l`) to prevent scroll artifacts
45 - Raw mode via `stty` for non-blocking, character-by-character input
46 - Terminal size caching (refreshes every 100 calls)
47
48 **External Commands**: All shell commands use `execute_command_line()` - ensure proper escaping for paths with special characters.
49
50 **Git Integration**: Uses git CLI directly; status is cached with 500ms TTL. Directories show recursive status indicators.
51
52 **Shell Integration**: `~/.fortress_cd` file enables cd-on-exit feature; wrapper scripts in `fortress.sh`/`fortress.fish` read this file.
53
54 ### Constants
55
56 Defined across modules: `MAX_PATH=512`, `MAX_FILES=500`
57
58 ### Color Scheme
59
60 Blue=directories, Green=executables, Grey=dotfiles, Red=cut files/staged, Yellow=warnings/incoming changes