Skip to content
Open
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
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,23 @@ adheres to [Semantic Versioning](https://semver.org) and the

## [Unreleased]

### Added
- **File Shelf**, a new menu bar tool: a drag‑and‑drop staging area for moving
files between apps and Spaces without keeping a Finder window open. Drop
files onto the menu bar icon or into the popover to park them, then drag them
straight back out into any app — the drag hands over the real file, so the
receiving app gets the original rather than a copy. Each row also offers
Reveal in Finder, Copy Path and Remove, and the menu bar icon carries a count
of what you are currently carrying.

Shelving never copies bytes: an entry is a security‑scoped bookmark to the
original file, so parking a 40 GB video costs the same as parking a note, the
shelf survives a relaunch, and an entry keeps working after the file is
renamed or moved. A file that has been deleted, or that lives on a disk you
have unplugged, stays on the shelf and is shown as unavailable rather than
quietly disappearing — the shelf's job is to tell you where the thing you
parked went, not to pretend you never parked it.

## [0.14.0] — 2026-07-21

### Added
Expand Down
11 changes: 11 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ let package = Package(
.executable(
name: "DMonteNetworkInfo",
targets: ["DMonteNetworkInfo"]
),
.executable(
name: "DMonteFileShelf",
targets: ["DMonteFileShelf"]
)
],
dependencies: [
Expand Down Expand Up @@ -308,6 +312,13 @@ let package = Package(
],
path: "Sources/DMonteNetworkInfoApp"
),
.executableTarget(
name: "DMonteFileShelf",
dependencies: [
"DMonteCore"
],
path: "Sources/DMonteFileShelfApp"
),
.testTarget(
name: "DMonteCoreTests",
dependencies: ["DMonteCore"],
Expand Down
32 changes: 32 additions & 0 deletions Packaging/FileShelfInfo.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>DMonteFileShelf</string>
<key>CFBundleIdentifier</key>
<string>com.havokentity.mactools.fileshelf</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDisplayName</key>
<string>DMonte File Shelf</string>
<key>CFBundleName</key>
<string>DMonte File Shelf</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.14.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>14.0</string>
<key>LSMultipleInstancesProhibited</key>
<true/>
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2026 Yahushad Monte</string>
</dict>
</plist>
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ The app updates itself automatically via [Sparkle](https://sparkle-project.org);
| **Snippets** | A searchable library of reusable text — click one to paste it into the app you came from |
| **Scratchpad** | Always‑there plain‑text notepad with named notes, autosave, and a live word count |
| **Network Info** | Interface, local IPv4/IPv6, subnet, router, and DNS at a glance — click any value to copy; public IP only on request |
| **File Shelf** | Drag files onto the menu bar icon to park them, then drag them back out into any app — nothing is copied, and entries follow files that get renamed or moved |

### Permissions

Expand Down
1 change: 1 addition & 0 deletions Scripts/package_app.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ HELPERS=(
"DMonteDriveEjector|DMonte Drive Ejector.app|DriveEjectorInfo.plist"
"DMonteScratchpad|DMonte Scratchpad.app|ScratchpadInfo.plist"
"DMonteNetworkInfo|DMonte Network Info.app|NetworkInfoInfo.plist"
"DMonteFileShelf|DMonte File Shelf.app|FileShelfInfo.plist"
)

stamp_version() {
Expand Down
3 changes: 2 additions & 1 deletion Sources/DMonteCore/AppPreferences.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ public enum AppDefaults {
DefaultsKey.focusTimerLongBreakInterval: 4,
DefaultsKey.driveEjectorConfirmsEjectAll: true,
DefaultsKey.scratchpadFontSize: 13,
DefaultsKey.networkInfoFetchesPublicIPAutomatically: false
DefaultsKey.networkInfoFetchesPublicIPAutomatically: false,
DefaultsKey.fileShelfConfirmsClearAll: true
])
}
}
Loading
Loading