clippa 1.0.5 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +32 -28
- package/bin/install-clippa.js +13 -10
- package/docs/assets/app-icon.png +0 -0
- package/docs/assets/screenshot-panel.svg +61 -35
- package/outputs/Clippa.app.zip +0 -0
- package/package.json +5 -2
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -5,7 +5,14 @@
|
|
|
5
5
|
<h1 align="center">Clippa</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
|
|
8
|
+
Private, keyboard-first clipboard history for macOS.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://github.com/Vaniawl/Clippa/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Vaniawl/Clippa/ci.yml?branch=main&style=flat-square"></a>
|
|
13
|
+
<a href="https://github.com/Vaniawl/Clippa/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/Vaniawl/Clippa?style=flat-square"></a>
|
|
14
|
+
<img alt="macOS 26+" src="https://img.shields.io/badge/macOS-26%2B-111111?style=flat-square">
|
|
15
|
+
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-087f78?style=flat-square"></a>
|
|
9
16
|
</p>
|
|
10
17
|
|
|
11
18
|
<p align="center">
|
|
@@ -14,6 +21,8 @@
|
|
|
14
21
|
<a href="https://github.com/Vaniawl/Clippa/releases">Releases</a>
|
|
15
22
|
·
|
|
16
23
|
<a href="#privacy">Privacy</a>
|
|
24
|
+
·
|
|
25
|
+
<a href="CONTRIBUTING.md">Contributing</a>
|
|
17
26
|
</p>
|
|
18
27
|
|
|
19
28
|
<p align="center">
|
|
@@ -22,36 +31,33 @@
|
|
|
22
31
|
|
|
23
32
|
## Install Clippa
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
Recommended:
|
|
26
35
|
|
|
27
36
|
```bash
|
|
28
|
-
|
|
37
|
+
brew tap Vaniawl/clippa
|
|
38
|
+
brew install clippa
|
|
29
39
|
```
|
|
30
40
|
|
|
31
|
-
|
|
41
|
+
Update later with:
|
|
32
42
|
|
|
33
43
|
```bash
|
|
34
|
-
|
|
35
|
-
clippa
|
|
44
|
+
brew update
|
|
45
|
+
brew upgrade clippa
|
|
36
46
|
```
|
|
37
47
|
|
|
38
|
-
|
|
48
|
+
You can also install the current version directly from GitHub:
|
|
39
49
|
|
|
40
50
|
```bash
|
|
41
|
-
npx github:Vaniawl/Clippa
|
|
51
|
+
npx --yes github:Vaniawl/Clippa#main
|
|
42
52
|
```
|
|
43
53
|
|
|
44
|
-
Do not use `npx install clippa`: npm treats `install` as the package name in that command. The correct npx command is `npx clippa`.
|
|
45
|
-
|
|
46
54
|
After it opens, grant Accessibility access when macOS asks. Clippa needs that permission only to paste the selected item into the app where your cursor is already active.
|
|
47
55
|
|
|
48
56
|
Useful installer options:
|
|
49
57
|
|
|
50
58
|
```bash
|
|
51
|
-
npx
|
|
52
|
-
npx
|
|
53
|
-
npx github:Vaniawl/Clippa -- --no-open
|
|
54
|
-
npx github:Vaniawl/Clippa -- --install-dir ~/Applications
|
|
59
|
+
npx --yes github:Vaniawl/Clippa#main --no-open
|
|
60
|
+
npx --yes github:Vaniawl/Clippa#main --install-dir ~/Applications
|
|
55
61
|
```
|
|
56
62
|
|
|
57
63
|
You can also download `Clippa.app.zip` from the latest GitHub release, unzip it, move `Clippa.app` to `/Applications`, and open it.
|
|
@@ -59,17 +65,24 @@ You can also download `Clippa.app.zip` from the latest GitHub release, unzip it,
|
|
|
59
65
|
## How It Works
|
|
60
66
|
|
|
61
67
|
- Runs quietly in the background as a menu-bar app.
|
|
62
|
-
- Press `Command-Shift-V`
|
|
68
|
+
- Press `Command-Shift-V` anywhere to open clipboard history.
|
|
63
69
|
- Use `Up` / `Down` to choose a clipboard item.
|
|
70
|
+
- Use `Left` / `Right` to switch between clipboard filters.
|
|
71
|
+
- Press `Command-P` to pin or unpin the selected item.
|
|
64
72
|
- Press `Enter` or click an item to paste it.
|
|
73
|
+
- Keeps the newest copied item at the top and shows pinned items only in the Pinned filter.
|
|
74
|
+
- Optionally adds one space after pasted text or links.
|
|
75
|
+
- Use the context menu to copy, pin, delete, open, or Quick Look an item.
|
|
76
|
+
- Drag text, links, images, and files directly into other apps.
|
|
65
77
|
- Press `Esc` or click outside the panel to close it.
|
|
66
78
|
- Stores recent text, links, images, and file references locally on your Mac.
|
|
79
|
+
- Supports configurable retention, history limits, excluded apps, and Launch at Login.
|
|
67
80
|
|
|
68
81
|
## Privacy
|
|
69
82
|
|
|
70
83
|
Clippa does not upload clipboard contents, does not use analytics, and does not require an account. Clipboard history is stored only on your Mac and encrypted locally with a per-user AES-GCM key file in Application Support. Clippa does not read or write Keychain items at startup, so locally signed reinstall builds do not trigger Keychain password prompts.
|
|
71
84
|
|
|
72
|
-
Accessibility permission is only used to
|
|
85
|
+
Accessibility permission is only used to restore focus and paste the selected clip into the app that was active before Clippa opened. If automatic paste is unavailable, Clippa keeps the item on the system clipboard and shows a direct link to the required permission.
|
|
73
86
|
|
|
74
87
|
## Requirements
|
|
75
88
|
|
|
@@ -91,15 +104,6 @@ The packaged app is written to:
|
|
|
91
104
|
outputs/Clippa.app.zip
|
|
92
105
|
```
|
|
93
106
|
|
|
94
|
-
## npm Publish
|
|
95
|
-
|
|
96
|
-
The npm installer package is prepared as `clippa`. Publishing to npm requires an authenticated npm session:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npm adduser
|
|
100
|
-
npm publish --access public
|
|
101
|
-
```
|
|
102
|
-
|
|
103
107
|
## Update From Git
|
|
104
108
|
|
|
105
109
|
For an existing checkout:
|
|
@@ -110,7 +114,7 @@ git pull origin main
|
|
|
110
114
|
|
|
111
115
|
## Production Notes
|
|
112
116
|
|
|
113
|
-
- Bundle identifier: `
|
|
114
|
-
- Version: `1.0.
|
|
117
|
+
- Bundle identifier: `app.clippa.Clippa`
|
|
118
|
+
- Version: `1.0.11`
|
|
115
119
|
- Release builds use hardened runtime.
|
|
116
|
-
-
|
|
120
|
+
- History retention and item limits are configurable; the default is 100 items for one week.
|
package/bin/install-clippa.js
CHANGED
|
@@ -7,10 +7,10 @@ const path = require("node:path");
|
|
|
7
7
|
const https = require("node:https");
|
|
8
8
|
|
|
9
9
|
const appName = "Clippa";
|
|
10
|
-
const
|
|
10
|
+
const bundleIdentifiers = ["app.clippa.Clippa", "io.github.vaniawl.Clippa", "com.ivandovhosheia.Clippa"];
|
|
11
11
|
const localZipPath = path.resolve(__dirname, "../outputs/Clippa.app.zip");
|
|
12
12
|
const packageJson = require("../package.json");
|
|
13
|
-
const defaultZipUrl = "https://github.com/Vaniawl/Clippa/releases/download/v1.0.
|
|
13
|
+
const defaultZipUrl = "https://github.com/Vaniawl/Clippa/releases/download/v1.0.11/Clippa.app.zip";
|
|
14
14
|
const zipUrl = process.env.CLIPPA_ZIP_URL || defaultZipUrl;
|
|
15
15
|
|
|
16
16
|
function usage() {
|
|
@@ -116,18 +116,21 @@ function copyApp(source, destination) {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
function quitRunningApp() {
|
|
119
|
-
|
|
120
|
-
run("/usr/bin/osascript", ["-e", `tell application id "${bundleIdentifier}" to quit`], {
|
|
121
|
-
stdio: "ignore",
|
|
122
|
-
timeout: 3000
|
|
123
|
-
});
|
|
124
|
-
} catch {
|
|
119
|
+
for (const bundleIdentifier of bundleIdentifiers) {
|
|
125
120
|
try {
|
|
126
|
-
run("/usr/bin/
|
|
121
|
+
run("/usr/bin/osascript", ["-e", `tell application id "${bundleIdentifier}" to quit`], {
|
|
122
|
+
stdio: "ignore",
|
|
123
|
+
timeout: 3000
|
|
124
|
+
});
|
|
127
125
|
} catch {
|
|
128
|
-
// The app may not be
|
|
126
|
+
// The app may not be registered with this bundle identifier.
|
|
129
127
|
}
|
|
130
128
|
}
|
|
129
|
+
try {
|
|
130
|
+
run("/usr/bin/killall", [appName], { stdio: "ignore", timeout: 3000 });
|
|
131
|
+
} catch {
|
|
132
|
+
// The app may not be running yet.
|
|
133
|
+
}
|
|
131
134
|
}
|
|
132
135
|
|
|
133
136
|
async function main() {
|
package/docs/assets/app-icon.png
CHANGED
|
Binary file
|
|
@@ -1,39 +1,65 @@
|
|
|
1
|
-
<svg width="
|
|
2
|
-
<rect width="
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
<filter id="shadow" x="300" y="124" width="840" height="600" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
|
|
6
|
-
<feDropShadow dx="0" dy="26" stdDeviation="28" flood-color="#000000" flood-opacity=".34"/>
|
|
1
|
+
<svg width="1600" height="900" viewBox="0 0 1600 900" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="1600" height="900" fill="#0E1011"/>
|
|
3
|
+
<filter id="shadow" x="535" y="90" width="1030" height="700" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
|
|
4
|
+
<feDropShadow dx="0" dy="34" stdDeviation="38" flood-color="#000000" flood-opacity=".52"/>
|
|
7
5
|
</filter>
|
|
8
6
|
<g filter="url(#shadow)">
|
|
9
|
-
<rect x="
|
|
10
|
-
<rect x="
|
|
7
|
+
<rect x="610" y="150" width="850" height="560" rx="34" fill="#202223" fill-opacity=".94"/>
|
|
8
|
+
<rect x="610.5" y="150.5" width="849" height="559" rx="33.5" stroke="#FFFFFF" stroke-opacity=".14"/>
|
|
11
9
|
</g>
|
|
12
|
-
|
|
13
|
-
<
|
|
14
|
-
<text x="
|
|
15
|
-
<text x="
|
|
16
|
-
<
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
<
|
|
21
|
-
<
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
10
|
+
|
|
11
|
+
<image href="app-icon.png" x="650" y="188" width="46" height="46"/>
|
|
12
|
+
<text x="714" y="207" fill="#F5F5F3" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="25" font-weight="700">Clippa</text>
|
|
13
|
+
<text x="714" y="231" fill="#A2A6A5" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="500">4 Items</text>
|
|
14
|
+
<rect x="1328" y="197" width="84" height="28" rx="14" fill="#0A84FF" fill-opacity=".14"/>
|
|
15
|
+
<path d="M1344 211l4-5 4 5v6h-8v-6z" fill="#6DB8FF"/>
|
|
16
|
+
<text x="1360" y="216" fill="#6DB8FF" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14" font-weight="650">2</text>
|
|
17
|
+
|
|
18
|
+
<rect x="650" y="255" width="762" height="42" rx="11" fill="#FFFFFF" fill-opacity=".07"/>
|
|
19
|
+
<circle cx="671" cy="276" r="6" stroke="#9DA3A2" stroke-width="2"/>
|
|
20
|
+
<path d="M676 281l5 5" stroke="#9DA3A2" stroke-width="2" stroke-linecap="round"/>
|
|
21
|
+
<text x="693" y="281" fill="#929897" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15">Search clipboard</text>
|
|
22
|
+
|
|
23
|
+
<g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="600">
|
|
24
|
+
<rect x="650" y="314" width="70" height="30" rx="15" fill="#0A84FF"/>
|
|
25
|
+
<text x="674" y="334" fill="white">All</text>
|
|
26
|
+
<rect x="729" y="314" width="90" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
|
|
27
|
+
<text x="749" y="334" fill="#D6D9D8">Pinned</text>
|
|
28
|
+
<rect x="828" y="314" width="75" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
|
|
29
|
+
<text x="849" y="334" fill="#D6D9D8">Text</text>
|
|
30
|
+
<rect x="912" y="314" width="78" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
|
|
31
|
+
<text x="932" y="334" fill="#D6D9D8">Links</text>
|
|
32
|
+
<rect x="999" y="314" width="90" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
|
|
33
|
+
<text x="1018" y="334" fill="#D6D9D8">Images</text>
|
|
34
|
+
<rect x="1098" y="314" width="76" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
|
|
35
|
+
<text x="1119" y="334" fill="#D6D9D8">Files</text>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<rect x="650" y="362" width="762" height="68" rx="13" fill="#0A84FF" fill-opacity=".15"/>
|
|
39
|
+
<rect x="650.5" y="362.5" width="761" height="67" rx="12.5" stroke="#0A84FF" stroke-opacity=".34"/>
|
|
40
|
+
<rect x="663" y="375" width="42" height="42" rx="9" fill="#FFFFFF" fill-opacity=".08"/>
|
|
41
|
+
<path d="M674 403h20M674 393h24M674 383h17" stroke="#E6E8E7" stroke-width="3" stroke-linecap="round"/>
|
|
42
|
+
<text x="720" y="391" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">Release checklist</text>
|
|
43
|
+
<text x="720" y="414" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">Text · Notes · now</text>
|
|
44
|
+
<text x="1380" y="402" fill="#9AA09E" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="17">↵</text>
|
|
45
|
+
|
|
46
|
+
<rect x="650" y="438" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
|
|
47
|
+
<rect x="663" y="451" width="42" height="42" rx="9" fill="#64D2C8" fill-opacity=".12"/>
|
|
48
|
+
<path d="M674 482l11-13 8 9 5-5 8 12h-32v-3z" fill="#64D2C8"/>
|
|
49
|
+
<text x="720" y="467" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">Clipboard image</text>
|
|
50
|
+
<text x="720" y="490" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">Image · 1280 × 720 · Preview</text>
|
|
51
|
+
|
|
52
|
+
<rect x="650" y="514" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
|
|
53
|
+
<rect x="663" y="527" width="42" height="42" rx="9" fill="#0A84FF" fill-opacity=".12"/>
|
|
54
|
+
<path d="M674 549c5-7 10-7 15 0s10 7 15 0" stroke="#69B4FF" stroke-width="4" stroke-linecap="round"/>
|
|
55
|
+
<text x="720" y="543" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">https://example.com/research</text>
|
|
56
|
+
<text x="720" y="566" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">URL · Safari · 2 min ago</text>
|
|
57
|
+
|
|
58
|
+
<rect x="650" y="590" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
|
|
59
|
+
<rect x="663" y="603" width="42" height="42" rx="9" fill="#FFCC66" fill-opacity=".12"/>
|
|
60
|
+
<path d="M675 611h17l8 8v18h-25v-26z" stroke="#FFD479" stroke-width="3" stroke-linejoin="round"/>
|
|
61
|
+
<text x="720" y="619" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">invoice.pdf</text>
|
|
62
|
+
<text x="720" y="642" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">File · Finder · yesterday</text>
|
|
63
|
+
|
|
64
|
+
<text x="610" y="772" fill="#7F8583" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="16" font-weight="600">⇧⌘V to open · ↑↓ to select · ←→ to filter · Return to paste</text>
|
|
39
65
|
</svg>
|
package/outputs/Clippa.app.zip
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clippa",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Installer for Clippa, a private
|
|
3
|
+
"version": "1.0.11",
|
|
4
|
+
"description": "Installer for Clippa, a private keyboard-first clipboard history app for macOS.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"install-clippa": "bin/install-clippa.js",
|
|
7
7
|
"clippa": "bin/install-clippa.js"
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
"keywords": [
|
|
29
29
|
"macos",
|
|
30
30
|
"clipboard",
|
|
31
|
+
"clipboard-manager",
|
|
32
|
+
"clipboard-history",
|
|
33
|
+
"privacy",
|
|
31
34
|
"swiftui",
|
|
32
35
|
"productivity"
|
|
33
36
|
],
|