Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Structure tab: modify existing tables (add, modify, drop columns, indexes, foreign keys, primary keys)

### Changed

- Theme system: UI colors now use native macOS semantic colors (labelColor, separatorColor, etc.) by default, adapting automatically to light/dark mode, accent color, and high contrast settings. Custom themes can still override with hex values.
- Theme system: removed Layout tab (typography, spacing, corner radius customization). Views now use native Apple text styles (.body, .caption, .title3, etc.) for accessibility and Dynamic Type support.
- Empty state views now use native ContentUnavailableView

### Fixed

- About window no longer retains memory after closing

## [0.33.0] - 2026-04-19

### Added
Expand Down
1 change: 0 additions & 1 deletion TablePro/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {

func applicationWillTerminate(_ notification: Notification) {
LinkedFolderWatcher.shared.stop()
UserDefaults.standard.synchronize()
SSHTunnelManager.shared.terminateAllProcessesSync()
}

Expand Down
8 changes: 8 additions & 0 deletions TablePro/Core/Vim/VimEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ final class VimEngine {
let range = NSRange(location: pos, length: deleteCount)
register.text = buffer.string(in: range)
register.isLinewise = false
register.syncToPasteboard()
buffer.replaceCharacters(in: range, with: "")
}
return true
Expand Down Expand Up @@ -489,6 +490,7 @@ final class VimEngine {
if sel.length > 0 {
register.text = buffer.string(in: sel)
register.isLinewise = isLinewise
register.syncToPasteboard()
buffer.replaceCharacters(in: sel, with: "")
}
mode = .normal
Expand All @@ -499,6 +501,7 @@ final class VimEngine {
if sel.length > 0 {
register.text = buffer.string(in: sel)
register.isLinewise = isLinewise
register.syncToPasteboard()
}
mode = .normal
buffer.setSelectedRange(NSRange(location: sel.location, length: 0))
Expand All @@ -509,6 +512,7 @@ final class VimEngine {
if sel.length > 0 {
register.text = buffer.string(in: sel)
register.isLinewise = isLinewise
register.syncToPasteboard()
buffer.replaceCharacters(in: sel, with: "")
}
mode = .insert
Expand Down Expand Up @@ -750,6 +754,7 @@ final class VimEngine {
let deleteRange = NSRange(location: startRange.location, length: endOffset - startRange.location)
register.text = buffer.string(in: deleteRange)
register.isLinewise = true
register.syncToPasteboard()
buffer.replaceCharacters(in: deleteRange, with: "")
// Position cursor at start of next line (or current position if at end)
let newPos = min(startRange.location, max(0, buffer.length - 1))
Expand All @@ -773,6 +778,7 @@ final class VimEngine {
let yankRange = NSRange(location: startRange.location, length: endOffset - startRange.location)
register.text = buffer.string(in: yankRange)
register.isLinewise = true
register.syncToPasteboard()
}

private func changeLine(_ count: Int, in buffer: VimTextBuffer) {
Expand All @@ -791,6 +797,7 @@ final class VimEngine {
let deleteRange = NSRange(location: startRange.location, length: deleteEnd - startRange.location)
register.text = buffer.string(in: deleteRange)
register.isLinewise = true
register.syncToPasteboard()
buffer.replaceCharacters(in: deleteRange, with: "")
buffer.setSelectedRange(NSRange(location: startRange.location, length: 0))
mode = .insert
Expand Down Expand Up @@ -867,6 +874,7 @@ final class VimEngine {

register.text = buffer.string(in: range)
register.isLinewise = linewise
register.syncToPasteboard()

switch op {
case .delete:
Expand Down
16 changes: 8 additions & 8 deletions TablePro/Core/Vim/VimRegister.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import AppKit
/// Vim register for yank/delete/paste operations
struct VimRegister {
/// The stored text content
var text: String = "" {
didSet {
if !text.isEmpty {
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(text, forType: .string)
}
}
}
var text: String = ""

/// Whether the text was yanked/deleted linewise (entire lines)
var isLinewise: Bool = false

/// Sync the register content to the system pasteboard
func syncToPasteboard() {
guard !text.isEmpty else { return }
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(text, forType: .string)
}
}
33 changes: 33 additions & 0 deletions TablePro/Resources/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -4619,6 +4619,7 @@
}
},
"Animations" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -5897,6 +5898,7 @@
}
},
"Body" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -6325,6 +6327,7 @@
}
},
"Caption" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -9372,6 +9375,7 @@
}
},
"Corner Radius" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -12595,6 +12599,7 @@
}
},
"Duplicate it to customize colors and layout." : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand All @@ -12615,6 +12620,9 @@
}
}
}
},
"Duplicate it to customize colors." : {

},
"Duplicate Row" : {
"localizations" : {
Expand Down Expand Up @@ -13964,6 +13972,9 @@
}
}
}
},
"Execute All Statements" : {

},
"Execute all statements in a single transaction. If any statement fails, all changes are rolled back." : {
"extractionState" : "stale",
Expand Down Expand Up @@ -15023,6 +15034,7 @@
}
},
"Extra Large" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -15887,6 +15899,7 @@
}
},
"Fast" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -17587,6 +17600,7 @@
}
},
"Huge" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -17763,6 +17777,7 @@
}
},
"Icon Sizes" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -19940,6 +19955,7 @@
}
},
"Large" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -20139,6 +20155,7 @@
}
},
"Layout" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -21058,6 +21075,7 @@
}
},
"Massive" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -21326,6 +21344,7 @@
}
},
"Medium" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -29324,6 +29343,9 @@
}
}
}
},
"Reset to System Default" : {

},
"Reset Zoom" : {
"localizations" : {
Expand Down Expand Up @@ -29770,6 +29792,7 @@
}
},
"Row Heights" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -32605,6 +32628,7 @@
}
},
"Slow" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand All @@ -32630,6 +32654,7 @@

},
"Small" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -32696,6 +32721,7 @@
}
},
"Smooth" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -32899,6 +32925,7 @@
}
},
"Spacing" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -33855,6 +33882,7 @@
}
},
"Status Dot" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -36354,6 +36382,7 @@
}
},
"Tiny" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand All @@ -36376,6 +36405,7 @@
}
},
"Tiny Dot" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand All @@ -36398,6 +36428,7 @@
}
},
"Title 2" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand All @@ -36420,6 +36451,7 @@
}
},
"Title 3" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down Expand Up @@ -37388,6 +37420,7 @@
}
},
"Typography" : {
"extractionState" : "stale",
"localizations" : {
"tr" : {
"stringUnit" : {
Expand Down
Loading
Loading