clipspin 0.1.1 → 0.1.5

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.
Files changed (3) hide show
  1. package/README.md +3 -20
  2. package/index.js +21 -8
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # ClipSpin
2
2
 
3
- ClipSpin ist ein temporärer macOS-Clipboard-Cycler. Du gibst eine JSON-Liste mit Texten an; bei jedem `Cmd+V` wird der aktuelle Text eingefügt und direkt danach der nächste vorbereitet.
3
+ - cycle your paste queue with every CMD+V.
4
+
5
+ Du startest Clipspin im Terminal mit einer JSON-Liste aus Texten. Solange der Command läuft, reagiert ClipSpin auf `Cmd+V`: Beim ersten Einfügen wird der erste Text aus der Liste verwendet, beim nächsten `Cmd+V` der zweite, danach der dritte und so weiter. Am Ende der Liste springt ClipSpin wieder zurück zum Anfang.
4
6
 
5
7
  ## Installation
6
8
 
@@ -36,8 +38,6 @@ cat snippets.json | clipspin
36
38
  ["Erster Text", "Zweiter Text", "Dritter Text"]
37
39
  ```
38
40
 
39
- Nach dem Start liegt der erste Eintrag in der Zwischenablage. Mit jedem `Cmd+V` wird der nächste Eintrag vorbereitet; nach dem letzten beginnt ClipSpin wieder von vorne.
40
-
41
41
  Stoppen kannst du ClipSpin mit `Ctrl+C` im Terminal. Die vorherige Zwischenablage wird danach wiederhergestellt.
42
42
 
43
43
  Wenn `Cmd+V` nicht erkannt wird, starte ClipSpin im Debug-Modus:
@@ -47,20 +47,3 @@ clipspin --debug '["Erster Text", "Zweiter Text"]'
47
47
  ```
48
48
 
49
49
  Beim Drücken von Tasten sollten dann `[debug]`-Zeilen erscheinen. Wenn keine erscheinen, fehlen macOS-Berechtigungen für die Terminal-App.
50
-
51
- ## Veröffentlichen
52
-
53
- Vor dem Publish die Version in `package.json` erhöhen. Danach:
54
-
55
- ```bash
56
- npm run publish:npm
57
- npm run publish:brew
58
- ```
59
-
60
- Oder beides nacheinander:
61
-
62
- ```bash
63
- npm run publish:all
64
- ```
65
-
66
- `publish:brew` erwartet, dass die npm-Version bereits veröffentlicht ist. Der Befehl aktualisiert `oliverjessner/tap/clipspin`, setzt die npm-Tarball-URL samt SHA256, führt Homebrew-Checks aus, committet die Formula und pusht den Tap.
package/index.js CHANGED
@@ -126,6 +126,7 @@ const items = parseItems(rawInput);
126
126
 
127
127
  let index = 0;
128
128
  let lastPasteAt = 0;
129
+ let commandDown = false;
129
130
  let pendingPaste = false;
130
131
  let pasteFallbackTimer = null;
131
132
  const originalClipboard = getClipboard();
@@ -177,8 +178,12 @@ console.log('paste-cycle active.');
177
178
  console.log('Press Cmd + V anywhere to paste/cycle.');
178
179
  console.log('Press Ctrl + C here to stop.\n');
179
180
 
180
- function isVKey(event) {
181
- return event.keycode === UiohookKey.V;
181
+ function isCommandKey(event) {
182
+ return event.keycode === UiohookKey.Meta || event.keycode === UiohookKey.MetaRight;
183
+ }
184
+
185
+ function isPasteKey(event) {
186
+ return event.keycode === UiohookKey.V || event.keycode === 9;
182
187
  }
183
188
 
184
189
  function logKeyEvent(name, event) {
@@ -187,14 +192,18 @@ function logKeyEvent(name, event) {
187
192
  }
188
193
 
189
194
  console.log(
190
- `[debug] ${name}: keycode=${event.keycode} meta=${event.metaKey} ctrl=${event.ctrlKey} alt=${event.altKey} shift=${event.shiftKey}`,
195
+ `[debug] ${name}: keycode=${event.keycode} meta=${event.metaKey} commandDown=${commandDown} ctrl=${event.ctrlKey} alt=${event.altKey} shift=${event.shiftKey}`,
191
196
  );
192
197
  }
193
198
 
194
199
  uIOhook.on('keydown', event => {
195
200
  logKeyEvent('keydown', event);
196
201
 
197
- const isCommandV = event.metaKey === true && isVKey(event);
202
+ if (isCommandKey(event)) {
203
+ commandDown = true;
204
+ }
205
+
206
+ const isCommandV = (event.metaKey === true || commandDown) && isPasteKey(event);
198
207
 
199
208
  if (!isCommandV) {
200
209
  return;
@@ -228,12 +237,16 @@ uIOhook.on('keydown', event => {
228
237
  uIOhook.on('keyup', event => {
229
238
  logKeyEvent('keyup', event);
230
239
 
231
- if (!pendingPaste || !isVKey(event)) {
232
- return;
240
+ const shouldAdvance = pendingPaste;
241
+
242
+ if (isCommandKey(event)) {
243
+ commandDown = false;
233
244
  }
234
245
 
235
- // Let the application finish handling Cmd+V before replacing the clipboard.
236
- advanceAfterPaste(80);
246
+ if (shouldAdvance) {
247
+ // Let the application finish handling Cmd+V before replacing the clipboard.
248
+ advanceAfterPaste(80);
249
+ }
237
250
  });
238
251
 
239
252
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipspin",
3
- "version": "0.1.1",
3
+ "version": "0.1.5",
4
4
  "description": "A temporary macOS clipboard cycler CLI that iterates through JSON text snippets on every Cmd+V.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "prepublishOnly": "npm run lint",
18
18
  "publish:npm": "npm publish --access public",
19
19
  "publish:brew": "node scripts/update-homebrew-formula.js",
20
- "publish": "npm run publish:npm && npm run publish:brew"
20
+ "publish": "npm login && npm run publish:npm && npm run publish:brew"
21
21
  },
22
22
  "keywords": [
23
23
  "clipboard",