From e84e5543be9be548784859f4b082b9d7a3122f15 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Wed, 1 Apr 2026 13:50:09 -0500 Subject: Rewrite file viewer with pinned gutter, syntax highlighting, and toolbar Replace the SwiftUI-only CodeFileTextView with a UIViewRepresentable backed by CodeFileUIView. The previous approach could not support a fixed line number gutter while independently scrolling code content horizontally. Changes: - Gutter is pinned outside the horizontal scroll view and never scrolls left - Vertical scroll is handled by a single outer UIScrollView shared by both the gutter and code content, keeping them in sync - Line numbers are right-aligned in a fixed-width gutter calculated from the total line count - Syntax highlighting via Splash for .swift files, with plain monospaced rendering as fallback for unsupported file types - Wrap toggle persisted via AppStorage (wrapRepositoryFileLines) - Bottom toolbar replaces the floating Share button, adding Copy All and Wrap toggle actions - Copy All shows a brief checkmark confirmation that resets after 2 seconds - Font fixed at SFMono-Regular 12pt, not scaled with Dynamic Type Implements: https://todo.sr.ht/~ccleberg/Hutch/7 --- Hutch/App/AppStorageKeys.swift | 1 + 1 file changed, 1 insertion(+) (limited to 'Hutch/App') diff --git a/Hutch/App/AppStorageKeys.swift b/Hutch/App/AppStorageKeys.swift index 708b4ce..87ec420 100644 --- a/Hutch/App/AppStorageKeys.swift +++ b/Hutch/App/AppStorageKeys.swift @@ -2,4 +2,5 @@ enum AppStorageKeys { static let swipeActionsEnabled = "swipeActionsEnabled" static let activeAccountID = "activeAccountID" + static let wrapRepositoryFileLines = "wrapRepositoryFileLines" } -- cgit v1.2.3