1 Commits
Author SHA1 Message Date
TZGyn 569e56dbba Add delete to the selection bar and drop the in-header close button
The selection bar covered copying but not the other action people reach
for with a selection. The header also carried a second close button next
to the window's own traffic light, so it was removed in favor of that.
2026-10-09 22:45:16 +08:00
3 changed files with 21 additions and 11 deletions
+7 -6
View File
@@ -37,13 +37,14 @@ clicking an item copies it back to the clipboard.
light mode keeps the system window colour. `Theme.background` is also handed light mode keeps the system window colour. `Theme.background` is also handed
to the `NSPanel` so the strip under the transparent titlebar matches, and the to the `NSPanel` so the strip under the transparent titlebar matches, and the
row colour stays slightly lighter than black so cards remain visible. row colour stays slightly lighter than black so cards remain visible.
- `Sources/Prompt/PanelView.swift` — the panel UI. Header (section switcher, - `Sources/Prompt/PanelView.swift` — the panel UI. Header (workspace switcher,
search, add photos, close), item list, composer. Composer `# Name` creates/ search, add photos), item list, composer. There is no in-header close button:
the window's own close button hides the panel. Composer `# Name` creates/
switches sections. Click = select (Shift+click for a range); the selection switches sections. Click = select (Shift+click for a range); the selection
bar offers Copy (single item), Copy as List and Copy as Lines; right-click = bar offers Copy (single item), Copy as List, Copy as Lines and Delete;
context menu acting on the whole selection (Copy, Copy as List, Copy as right-click = context menu acting on the whole selection (Copy, Copy as List,
Lines, Done, Edit, Open, Merge, Move To, Delete). Esc clears the selection Copy as Lines, Done, Edit, Open, Merge, Move To, Delete). Esc clears the
before it hides the panel. Drop target for images/files. selection before it hides the panel. Drop target for images/files.
- `Sources/Prompt/PanelController.swift` — owns the floating `NSPanel` - `Sources/Prompt/PanelController.swift` — owns the floating `NSPanel`
(`.nonactivatingPanel`, `.floating`, right-edge docked, frame autosaved as (`.nonactivatingPanel`, `.floating`, right-edge docked, frame autosaved as
`PromptPanel`), the Cmd+V image-paste monitor, and `EditWindowController` `PromptPanel`), the Cmd+V image-paste monitor, and `EditWindowController`
+2 -2
View File
@@ -5,8 +5,8 @@ A native macOS app for keeping prompts and photos, in the spirit of
to your work. Select what you need and send it back to your clipboard. to your work. Select what you need and send it back to your clipboard.
- **Click to select** — clicking a card selects it (Shift+click for a range), - **Click to select** — clicking a card selects it (Shift+click for a range),
and the selection bar copies a single item as-is, or the whole selection as a and the selection bar copies a single item as-is, the whole selection as a
numbered list or as plain newline-separated lines. numbered list or as plain newline-separated lines, or deletes it.
- **Text or photo** — copying sends text back as text and a photo back as an - **Text or photo** — copying sends text back as text and a photo back as an
image. image.
- **Capture from anywhere** — select text in any app and tap **Left Shift twice**. - **Capture from anywhere** — select text in any app and tap **Left Shift twice**.
+12 -3
View File
@@ -83,9 +83,6 @@ struct PanelView: View {
.buttonStyle(.plain).foregroundStyle(.secondary).help("Search (Cmd+F)") .buttonStyle(.plain).foregroundStyle(.secondary).help("Search (Cmd+F)")
Button { addPhotos() } label: { Image(systemName: "photo.on.rectangle.angled") } Button { addPhotos() } label: { Image(systemName: "photo.on.rectangle.angled") }
.buttonStyle(.plain).foregroundStyle(.secondary).help("Add photos") .buttonStyle(.plain).foregroundStyle(.secondary).help("Add photos")
Button { PanelController.shared.hide() } label: { Image(systemName: "xmark") }
.buttonStyle(.plain).foregroundStyle(.secondary)
.help("Hide the panel (Cmd+W) — Prompt keeps running so Shift-Shift capture still works. Quit from the menu bar icon or Cmd+Q.")
} }
.padding(.horizontal, 12) .padding(.horizontal, 12)
.padding(.vertical, 10) .padding(.vertical, 10)
@@ -576,6 +573,12 @@ struct PanelView: View {
.font(.caption) .font(.caption)
.buttonStyle(.plain) .buttonStyle(.plain)
.foregroundStyle(Color.accentColor) .foregroundStyle(Color.accentColor)
Button { deleteSelection() } label: {
Image(systemName: "trash")
}
.buttonStyle(.plain)
.foregroundStyle(.red)
.help("Delete selected")
Button { clearSelection() } label: { Button { clearSelection() } label: {
Image(systemName: "xmark.circle.fill") Image(systemName: "xmark.circle.fill")
} }
@@ -588,6 +591,12 @@ struct PanelView: View {
.background(Color.accentColor.opacity(0.12)) .background(Color.accentColor.opacity(0.12))
} }
private func deleteSelection() {
guard !selection.isEmpty else { return }
store.delete(ids: selection)
clearSelection()
}
private func copySelection(asList: Bool) { private func copySelection(asList: Bool) {
guard !selection.isEmpty else { return } guard !selection.isEmpty else { return }
if asList { if asList {