hookapp 2.0.13 → 2.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56c7c137eeb609c3ed65bf20626e442eae83a6dfba7974603e5b4a58166e345d
4
- data.tar.gz: 57934045f6a6e1dedaeaed61742bd0328471a104ba075595e21c5686459c990c
3
+ metadata.gz: 4020d52eb2430378d681031dcc5f01d944673aa7a3e79e24f148008986dc270e
4
+ data.tar.gz: 83b862600af8076bdb9d6297475eb4e4ef8102d5d9a1c3c19f3f388e1722bbd9
5
5
  SHA512:
6
- metadata.gz: 15cc3b64fd42bb2637f5f28836a7e033257b2cf50f98c03d091b620b0f1adf9d38d409747efeadcdc0025cb41b659bceb31c199e6e83119279ba5591cc04f39d
7
- data.tar.gz: 31d4f11352057917a99ab9ce614235e705dfc1da0f09fb672b2d01830da6d380393d76c2042d6ea6799269f00397a8b51397e5f885193abc1b97988b8858869a
6
+ metadata.gz: b9e70625eff3b1a098f517b599b4eaadc74cac865127bcb63877c27dd5921265ca601d006903c126198e9821407ae90bc3ce615155105a442c80e4b416da36c6
7
+ data.tar.gz: 9fb4ef946c78073c24dbc5353dbdd6f98e089a3b30432190d7ae2a833885a5c59ee4ea7ec63643083376afb6a2b036b4614ae603c65e019247c63d90938d0cf6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hookapp (2.0.12)
4
+ hookapp (2.0.15)
5
5
  gli (~> 2.20.1)
6
6
  tty-which (~> 0.5, >= 0.5.0)
7
7
 
data/README.md CHANGED
@@ -6,7 +6,7 @@ CLI interface for Hook.app (macOS)
6
6
 
7
7
  This gem includes a `hook` binary that allows interaction with the features of Hook.app.
8
8
 
9
- *v2.0.11*
9
+ *v2.0.15*
10
10
 
11
11
  ## Installation
12
12
 
@@ -366,5 +366,5 @@ This software is licensed under the MIT License.
366
366
  THE SOFTWARE.
367
367
 
368
368
 
369
- Documentation generated 2022-07-19 14:13
369
+ Documentation generated 2022-07-20 08:03
370
370
 
data/buildnotes.md CHANGED
@@ -1,3 +1,5 @@
1
+ template: gem
2
+
1
3
  # hookapp
2
4
 
3
5
  Hook.app CLI
data/hook.rdoc CHANGED
@@ -4,7 +4,7 @@ Hook.app is a productivity tool for macOS <https://hookproductivity.com/>.
4
4
 
5
5
  This gem includes a `hook` binary that allows interaction with the features of Hook.app.
6
6
 
7
- v2.0.11
7
+ v2.0.15
8
8
 
9
9
  === Global Options
10
10
  === --help
data/html/HookApp.html CHANGED
@@ -80,10 +80,12 @@
80
80
  <h3>Methods</h3>
81
81
 
82
82
  <ul class="link-list" role="directory">
83
+ <li ><a href="#method-i-act_on">#act_on</a>
83
84
  <li ><a href="#method-i-all_bookmarks">#all_bookmarks</a>
84
85
  <li ><a href="#method-i-bookmark_for">#bookmark_for</a>
85
86
  <li ><a href="#method-i-bookmark_from_app">#bookmark_from_app</a>
86
87
  <li ><a href="#method-i-browse_bookmarks">#browse_bookmarks</a>
88
+ <li ><a href="#method-i-browse_linked">#browse_linked</a>
87
89
  <li ><a href="#method-i-clip_bookmark">#clip_bookmark</a>
88
90
  <li ><a href="#method-i-clone_hooks">#clone_hooks</a>
89
91
  <li ><a href="#method-i-copy_bookmark">#copy_bookmark</a>
@@ -132,6 +134,45 @@
132
134
  <h3>Public Instance Methods</h3>
133
135
  </header>
134
136
 
137
+ <div id="method-i-act_on" class="method-detail ">
138
+ <div class="method-heading">
139
+ <span class="method-name">act_on</span><span
140
+ class="method-args">(url)</span>
141
+ <span class="method-click-advice">click to toggle source</span>
142
+ </div>
143
+
144
+ <div class="method-description">
145
+
146
+
147
+ <div class="method-source-code" id="act_on-source">
148
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 294</span>
149
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">act_on</span>(<span class="ruby-identifier">url</span>)
150
+ <span class="ruby-identifier">menu_items</span> = [<span class="ruby-string">&#39;Open in default app&#39;</span>]
151
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">open_linked</span>(<span class="ruby-identifier">url</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">url</span>)
152
+
153
+ <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
154
+ <span class="ruby-identifier">menu_items</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;Browse file&#39;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">count</span>.<span class="ruby-identifier">positive?</span>
155
+
156
+ <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--prompt=&quot;Choose action &gt; &quot;&#39;</span>,
157
+ <span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
158
+ <span class="ruby-string">&#39;--height=60%&#39;</span>,
159
+ <span class="ruby-node">&quot;--min-height=#{menu_items.count + 1}&quot;</span>]
160
+ <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(menu_items.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>
161
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">empty?</span>
162
+
163
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">sel</span>
164
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/Browse file/</span>
165
+ <span class="ruby-identifier">browse_linked</span>(<span class="ruby-identifier">url</span>)
166
+ <span class="ruby-keyword">else</span>
167
+ <span class="ruby-node">`open &#39;#{url}&#39;`</span>
168
+ <span class="ruby-keyword">end</span>
169
+ <span class="ruby-keyword">end</span></pre>
170
+ </div>
171
+ </div>
172
+
173
+
174
+ </div>
175
+
135
176
  <div id="method-i-all_bookmarks" class="method-detail ">
136
177
  <div class="method-heading">
137
178
  <span class="method-name">all_bookmarks</span><span
@@ -255,28 +296,68 @@
255
296
 
256
297
 
257
298
  <div class="method-source-code" id="browse_bookmarks-source">
258
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 258</span>
299
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 260</span>
259
300
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">browse_bookmarks</span>(<span class="ruby-identifier">glob</span>)
301
+ <span class="ruby-identifier">glob_all</span> = <span class="ruby-string">&#39;**/*&#39;</span>
260
302
  <span class="ruby-identifier">root</span> = <span class="ruby-keyword">if</span> <span class="ruby-identifier">glob</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
261
- <span class="ruby-identifier">glob</span>.<span class="ruby-identifier">count</span>.<span class="ruby-identifier">positive?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">glob</span> <span class="ruby-operator">:</span> <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-string">&#39;**/*&#39;</span>)
303
+ <span class="ruby-identifier">glob</span>.<span class="ruby-identifier">count</span>.<span class="ruby-identifier">positive?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">glob</span> <span class="ruby-operator">:</span> <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-identifier">glob_all</span>)
262
304
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">glob</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">glob</span>)
263
305
  <span class="ruby-identifier">hooks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">glob</span>)
264
306
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">hooks</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">glob</span>)
265
307
 
266
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>([<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">glob</span>), <span class="ruby-string">&#39;**/*&#39;</span>])
308
+ <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>([<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">glob</span>), <span class="ruby-identifier">glob_all</span>])
267
309
  <span class="ruby-keyword">else</span>
268
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-identifier">glob</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">glob</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-string">&#39;**/*&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">glob</span>)
310
+ <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-identifier">glob</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">glob</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">glob_all</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">glob</span>)
269
311
  <span class="ruby-keyword">end</span>
270
312
 
271
313
  <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
272
- <span class="ruby-string">&#39;--header=&quot;esc: cancel, return: open&quot;&#39;</span>,
314
+ <span class="ruby-string">&#39;--header=&quot;esc: cancel, return: browse&quot;&#39;</span>,
273
315
  <span class="ruby-string">&#39;--prompt=&quot; Select file &gt; &quot;&#39;</span>,
274
316
  <span class="ruby-string">%(--preview=&#39;hook ls {}&#39;)</span>,
275
317
  <span class="ruby-string">&#39;--height=60%&#39;</span>,
276
318
  <span class="ruby-string">&#39;--min-height=10&#39;</span>]
277
319
 
278
- <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(root.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>
279
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">open_linked</span>(<span class="ruby-identifier">sel</span>)
320
+ <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(root.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;\n&quot;</span>)
321
+
322
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
323
+ <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">sel</span>[<span class="ruby-value">0</span>])
324
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">count</span>.<span class="ruby-identifier">positive?</span>
325
+ <span class="ruby-identifier">browse_linked</span>(<span class="ruby-identifier">sel</span>[<span class="ruby-value">0</span>])
326
+ <span class="ruby-keyword">else</span>
327
+ <span class="ruby-identifier">browse_bookmarks</span>(<span class="ruby-identifier">glob</span>)
328
+ <span class="ruby-keyword">end</span>
329
+ <span class="ruby-keyword">else</span>
330
+ <span class="ruby-identifier">open_linked</span>(<span class="ruby-identifier">sel</span>)
331
+ <span class="ruby-keyword">end</span>
332
+ <span class="ruby-keyword">end</span></pre>
333
+ </div>
334
+ </div>
335
+
336
+
337
+ </div>
338
+
339
+ <div id="method-i-browse_linked" class="method-detail ">
340
+ <div class="method-heading">
341
+ <span class="method-name">browse_linked</span><span
342
+ class="method-args">(url)</span>
343
+ <span class="method-click-advice">click to toggle source</span>
344
+ </div>
345
+
346
+ <div class="method-description">
347
+ <p>Select from a menu of available hooks and open using macOS `open`.</p>
348
+
349
+ <div class="method-source-code" id="browse_linked-source">
350
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 344</span>
351
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">browse_linked</span>(<span class="ruby-identifier">url</span>)
352
+ <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
353
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
354
+ <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;No hooks found for #{url}&quot;</span>
355
+ <span class="ruby-keyword">else</span>
356
+ <span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
357
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">empty?</span>
358
+ <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">?</span> <span class="ruby-identifier">act_on</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]) <span class="ruby-operator">:</span> <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span> }
359
+ <span class="ruby-keyword">end</span>
360
+ <span class="ruby-keyword">end</span>
280
361
  <span class="ruby-keyword">end</span></pre>
281
362
  </div>
282
363
  </div>
@@ -317,7 +398,7 @@
317
398
  <p>Copy all hooks from source file to target file</p>
318
399
 
319
400
  <div class="method-source-code" id="clone_hooks-source">
320
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 336</span>
401
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 380</span>
321
402
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clone_hooks</span>(<span class="ruby-identifier">args</span>)
322
403
  <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>.<span class="ruby-identifier">valid_hook</span>
323
404
  <span class="ruby-identifier">source</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">valid_hook</span>
@@ -381,7 +462,7 @@
381
462
 
382
463
 
383
464
  <div class="method-source-code" id="decode-source">
384
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 522</span>
465
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 566</span>
385
466
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">decode</span>(<span class="ruby-identifier">string</span>)
386
467
  <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
387
468
  tell application &quot;Hook&quot;
@@ -407,7 +488,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
407
488
  <p>Delete all hooked files/urls from target file</p>
408
489
 
409
490
  <div class="method-source-code" id="delete_all_hooks-source">
410
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 359</span>
491
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 403</span>
411
492
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_all_hooks</span>(<span class="ruby-identifier">url</span>, <span class="ruby-value">force:</span> <span class="ruby-keyword">false</span>)
412
493
  <span class="ruby-keyword">unless</span> <span class="ruby-identifier">force</span>
413
494
  <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">print</span> <span class="ruby-node">&quot;Are you sure you want to delete ALL hooks from #{url} (y/N)? &quot;</span>
@@ -445,7 +526,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
445
526
  <p>Delete hooks between two files/urls</p>
446
527
 
447
528
  <div class="method-source-code" id="delete_hooks-source">
448
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 381</span>
529
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 425</span>
449
530
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_hooks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
450
531
  <span class="ruby-identifier">urls</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">url</span> }
451
532
  <span class="ruby-identifier">output</span> = []
@@ -491,7 +572,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
491
572
 
492
573
 
493
574
  <div class="method-source-code" id="encode-source">
494
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 513</span>
575
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 557</span>
495
576
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">encode</span>(<span class="ruby-identifier">string</span>)
496
577
  <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
497
578
  tell application &quot;Hook&quot;
@@ -581,7 +662,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
581
662
  <p>Create bi-directional links between every file/url in the list of arguments</p>
582
663
 
583
664
  <div class="method-source-code" id="link_all-source">
584
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 411</span>
665
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 455</span>
585
666
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_all</span>(<span class="ruby-identifier">args</span>)
586
667
  <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
587
668
  <span class="ruby-identifier">source</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook</span>
@@ -616,7 +697,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
616
697
  <p>Link 2 or more files/urls with bi-directional hooks.</p>
617
698
 
618
699
  <div class="method-source-code" id="link_files-source">
619
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 313</span>
700
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 357</span>
620
701
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_files</span>(<span class="ruby-identifier">args</span>)
621
702
  <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>
622
703
  <span class="ruby-identifier">target</span>.<span class="ruby-identifier">valid_hook!</span>
@@ -655,7 +736,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
655
736
  <p>Get a list of all hooks on a file/url.</p>
656
737
 
657
738
  <div class="method-source-code" id="linked_bookmarks-source">
658
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 430</span>
739
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 474</span>
659
740
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">linked_bookmarks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
660
741
  <span class="ruby-identifier">result</span> = []
661
742
 
@@ -718,7 +799,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
718
799
  <p>Open the <a href="Hook.html"><code>Hook</code></a> GUI for browsing/performing actions on a file or url</p>
719
800
 
720
801
  <div class="method-source-code" id="open_gui-source">
721
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 282</span>
802
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 317</span>
722
803
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_gui</span>(<span class="ruby-identifier">url</span>)
723
804
  <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
724
805
  tell application &quot;Hook&quot;
@@ -750,18 +831,14 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
750
831
  <p>Select from a menu of available hooks and open using macOS `open`.</p>
751
832
 
752
833
  <div class="method-source-code" id="open_linked-source">
753
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 298</span>
834
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 333</span>
754
835
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_linked</span>(<span class="ruby-identifier">url</span>)
755
836
  <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
756
837
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
757
838
  <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;No hooks found for #{url}&quot;</span>
758
839
  <span class="ruby-keyword">else</span>
759
840
  <span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
760
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">empty?</span>
761
- <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
762
- <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span>
763
- }
764
- <span class="ruby-keyword">end</span>
841
+ <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span> <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span> } <span class="ruby-keyword">unless</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">empty?</span>
765
842
  <span class="ruby-keyword">end</span>
766
843
  <span class="ruby-keyword">end</span></pre>
767
844
  </div>
@@ -781,7 +858,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
781
858
  <p>Output an array of hooks in the given format.</p>
782
859
 
783
860
  <div class="method-source-code" id="output_array-source">
784
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 477</span>
861
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 521</span>
785
862
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
786
863
  <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">empty?</span>
787
864
  <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">reject!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;&#39;</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:files_only</span>]
@@ -953,7 +1030,7 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
953
1030
 
954
1031
  <span class="ruby-comment"># marks[sel - 1]</span>
955
1032
 
956
- <span class="ruby-identifier">options</span> = <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
1033
+ <span class="ruby-identifier">options</span> = <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
957
1034
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
958
1035
  <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
959
1036
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
@@ -969,15 +1046,17 @@ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby
969
1046
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
970
1047
  <span class="ruby-identifier">url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>])
971
1048
  <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
972
- <span class="ruby-identifier">loc</span> = <span class="ruby-identifier">url</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; - &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>
1049
+ <span class="ruby-identifier">loc</span> = <span class="ruby-node">&quot;#{url.scheme} - #{url.hostname}&quot;</span>
973
1050
  <span class="ruby-keyword">else</span>
974
- <span class="ruby-identifier">loc</span> = <span class="ruby-string">&quot;&quot;</span>
1051
+ <span class="ruby-identifier">loc</span> = <span class="ruby-string">&#39;&#39;</span>
975
1052
  <span class="ruby-keyword">end</span>
976
1053
 
977
1054
  <span class="ruby-node">&quot;#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}&quot;</span>
978
- }.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">mark</span> }
1055
+ <span class="ruby-keyword">end</span>
1056
+
1057
+ <span class="ruby-identifier">options</span>.<span class="ruby-identifier">delete_if</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:!</span>)
979
1058
 
980
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Error processing available hooks&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">empty?</span>
1059
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Error processing available hooks&#39;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">empty?</span>
981
1060
 
982
1061
  <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
983
1062
  <span class="ruby-string">&#39;--header=&quot;esc: cancel, tab: multi-select, ctrl-a: select all, return: open&quot;&#39;</span>,
@@ -133,7 +133,7 @@
133
133
 
134
134
  <p>This gem includes a `hook` binary that allows interaction with the features of Hook.app.</p>
135
135
 
136
- <p>v2.0.11</p>
136
+ <p>v2.0.15</p>
137
137
 
138
138
  <h3 id="label-Global+Options">Global Options<span><a href="#label-Global+Options">&para;</a> <a href="#top">&uarr;</a></span></h3>
139
139
 
data/html/created.rid CHANGED
@@ -1,10 +1,10 @@
1
- Tue, 19 Jul 2022 18:13:24 -0500
1
+ Wed, 20 Jul 2022 08:04:13 -0500
2
2
  README.rdoc Tue, 07 Jul 2020 16:57:07 -0500
3
3
  lib/hook.rb Thu, 26 May 2022 08:20:27 -0500
4
- lib/hook/hookapp.rb Tue, 19 Jul 2022 18:13:11 -0500
4
+ lib/hook/hookapp.rb Wed, 20 Jul 2022 08:01:12 -0500
5
5
  lib/hook/hooker.rb Sun, 31 Oct 2021 07:54:46 -0500
6
6
  lib/hook/markdown_document_listener.rb Sun, 26 Sep 2021 07:45:59 -0500
7
7
  lib/hook/prompt.rb Thu, 26 May 2022 08:20:13 -0500
8
8
  lib/hook/string.rb Sun, 31 Oct 2021 07:03:15 -0500
9
- lib/hook/version.rb Tue, 19 Jul 2022 18:13:20 -0500
9
+ lib/hook/version.rb Wed, 20 Jul 2022 08:03:21 -0500
10
10
  bin/hook Tue, 19 Jul 2022 14:11:16 -0500
data/html/index.html CHANGED
@@ -99,7 +99,7 @@
99
99
 
100
100
  <p>This gem includes a `hook` binary that allows interaction with the features of Hook.app.</p>
101
101
 
102
- <p>v2.0.11</p>
102
+ <p>v2.0.15</p>
103
103
 
104
104
  <h3 id="label-Global+Options">Global Options<span><a href="#label-Global+Options">&para;</a> <a href="#top">&uarr;</a></span></h3>
105
105
 
@@ -1 +1 @@
1
- var search_data = {"index":{"searchIndex":["app","gli","commands","doc","markdowndocumentlistener","hook","prompt","promptfzf","promptstd","hookapp","hooker","string","all_bookmarks()","beginning()","bookmark_for()","bookmark_from_app()","browse_bookmarks()","cap()","cap!()","clear_screen()","clip()","clip_bookmark()","clone_hooks()","command()","commands()","copy_bookmark()","decode()","default_command()","delete_all_hooks()","delete_hooks()","encode()","end_command()","end_commands()","end_options()","ending()","escape_quotes()","flag()","format_regex()","fzf()","get_hooks()","install_fzf()","link_all()","link_files()","linked_bookmarks()","new()","new()","nil_if_missing()","open_gui()","open_linked()","options()","output_array()","program_desc()","program_long_desc()","restore_std()","search_bookmarks()","search_name()","search_path_or_address()","select_hook()","silence_std()","split_hook()","split_hooks()","switch()","uninstall_fzf()","valid_hook()","valid_hook!()","validate_format()","version()","which_fzf()","readme"],"longSearchIndex":["app","gli","gli::commands","gli::commands::doc","gli::commands::markdowndocumentlistener","hook","hook::prompt","hook::promptfzf","hook::promptstd","hookapp","hooker","string","hookapp#all_bookmarks()","gli::commands::markdowndocumentlistener#beginning()","hookapp#bookmark_for()","hookapp#bookmark_from_app()","hookapp#browse_bookmarks()","string#cap()","string#cap!()","hook::promptstd#clear_screen()","string#clip()","hookapp#clip_bookmark()","hookapp#clone_hooks()","gli::commands::markdowndocumentlistener#command()","gli::commands::markdowndocumentlistener#commands()","hookapp#copy_bookmark()","hookapp#decode()","gli::commands::markdowndocumentlistener#default_command()","hookapp#delete_all_hooks()","hookapp#delete_hooks()","hookapp#encode()","gli::commands::markdowndocumentlistener#end_command()","gli::commands::markdowndocumentlistener#end_commands()","gli::commands::markdowndocumentlistener#end_options()","gli::commands::markdowndocumentlistener#ending()","string#escape_quotes()","gli::commands::markdowndocumentlistener#flag()","hookapp#format_regex()","hook::promptfzf#fzf()","hookapp#get_hooks()","hook::promptfzf#install_fzf()","hookapp#link_all()","hookapp#link_files()","hookapp#linked_bookmarks()","gli::commands::markdowndocumentlistener::new()","hooker::new()","string#nil_if_missing()","hookapp#open_gui()","hookapp#open_linked()","gli::commands::markdowndocumentlistener#options()","hookapp#output_array()","gli::commands::markdowndocumentlistener#program_desc()","gli::commands::markdowndocumentlistener#program_long_desc()","hook::promptstd#restore_std()","hookapp#search_bookmarks()","hookapp#search_name()","hookapp#search_path_or_address()","hookapp#select_hook()","hook::promptstd#silence_std()","string#split_hook()","string#split_hooks()","gli::commands::markdowndocumentlistener#switch()","hook::promptfzf#uninstall_fzf()","string#valid_hook()","string#valid_hook!()","hookapp#validate_format()","gli::commands::markdowndocumentlistener#version()","hook::promptfzf#which_fzf()",""],"info":[["App","","App.html","","<p>Main class for GLI app\n"],["GLI","","GLI.html","",""],["GLI::Commands","","GLI/Commands.html","",""],["GLI::Commands::Doc","","GLI/Commands/Doc.html","",""],["GLI::Commands::MarkdownDocumentListener","","GLI/Commands/MarkdownDocumentListener.html","","<p>DocumentListener class for GLI documentation generator\n"],["Hook","","Hook.html","",""],["Hook::Prompt","","Hook/Prompt.html","",""],["Hook::PromptFZF","","Hook/PromptFZF.html","","<p>Methods for working installing/using FuzzyFileFinder\n"],["Hook::PromptSTD","","Hook/PromptSTD.html","",""],["HookApp","","HookApp.html","","<p>Hook.app functions\n"],["Hooker","","Hooker.html","","<p>Hook.app CLI interface\n"],["String","","String.html","","<p>String helpers\n"],["all_bookmarks","HookApp","HookApp.html#method-i-all_bookmarks","()","<p>Get all known bookmarks. Return array of bookmark hashes.\n"],["beginning","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-beginning","()",""],["bookmark_for","HookApp","HookApp.html#method-i-bookmark_for","(url)","<p>Get a Hook bookmark for file or URL. Return bookmark hash.\n"],["bookmark_from_app","HookApp","HookApp.html#method-i-bookmark_from_app","(app, opts)","<p>Get a bookmark from the foreground document of specified app.\n"],["browse_bookmarks","HookApp","HookApp.html#method-i-browse_bookmarks","(glob)",""],["cap","String","String.html#method-i-cap","()","<p>Capitalize only if no uppercase\n"],["cap!","String","String.html#method-i-cap-21","()",""],["clear_screen","Hook::PromptSTD","Hook/PromptSTD.html#method-i-clear_screen","(msg = nil)","<p>Clear the terminal screen\n"],["clip","String","String.html#method-i-clip","()",""],["clip_bookmark","HookApp","HookApp.html#method-i-clip_bookmark","(url, opts)","<p>Create a bookmark for specified file/url and copy to the clipboard.\n"],["clone_hooks","HookApp","HookApp.html#method-i-clone_hooks","(args)","<p>Copy all hooks from source file to target file\n"],["command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-command","(name, aliases, desc, long_desc, arg_name, arg_options)","<p>Gives you a command in the current context and creates a new context of this command\n"],["commands","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-commands","()",""],["copy_bookmark","HookApp","HookApp.html#method-i-copy_bookmark","(title, url, opts)","<p>Create a bookmark from specified title and url and copy to the clipboard.\n"],["decode","HookApp","HookApp.html#method-i-decode","(string)",""],["default_command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-default_command","(name)","<p>Gives you the name of the current command in the current context\n"],["delete_all_hooks","HookApp","HookApp.html#method-i-delete_all_hooks","(url, force: false)","<p>Delete all hooked files/urls from target file\n"],["delete_hooks","HookApp","HookApp.html#method-i-delete_hooks","(args, opts)","<p>Delete hooks between two files/urls\n"],["encode","HookApp","HookApp.html#method-i-encode","(string)",""],["end_command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_command","(_name)","<p>Ends a command, and “pops” you back up one context\n"],["end_commands","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_commands","()",""],["end_options","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_options","()",""],["ending","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-ending","()","<p>Called when processing has completed\n"],["escape_quotes","String","String.html#method-i-escape_quotes","()",""],["flag","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-flag","(name, aliases, desc, long_desc, default_value, arg_name, must_match, _type)","<p>Gives you a flag in the current context\n"],["format_regex","HookApp","HookApp.html#method-i-format_regex","(options)","<p>Create a single regex for validation of an array by first char or full match.\n"],["fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-fzf","()","<p>Get path to fzf binary, installing if needed\n<p>@return [String] Path to fzf binary\n"],["get_hooks","HookApp","HookApp.html#method-i-get_hooks","(url)","<p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.\n"],["install_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-install_fzf","(force: false)","<p>Install fzf on the current system. Installs to a subdirectory of the gem\n<p>@param force [Boolean] …\n"],["link_all","HookApp","HookApp.html#method-i-link_all","(args)","<p>Create bi-directional links between every file/url in the list of arguments\n"],["link_files","HookApp","HookApp.html#method-i-link_files","(args)","<p>Link 2 or more files/urls with bi-directional hooks.\n"],["linked_bookmarks","HookApp","HookApp.html#method-i-linked_bookmarks","(args, opts)","<p>Get a list of all hooks on a file/url.\n"],["new","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-c-new","(_global_options, _options, _arguments, app)",""],["new","Hooker","Hooker.html#method-c-new","()",""],["nil_if_missing","String","String.html#method-i-nil_if_missing","()",""],["open_gui","HookApp","HookApp.html#method-i-open_gui","(url)","<p>Open the Hook GUI for browsing/performing actions on a file or url\n"],["open_linked","HookApp","HookApp.html#method-i-open_linked","(url)","<p>Select from a menu of available hooks and open using macOS `open`.\n"],["options","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-options","()",""],["output_array","HookApp","HookApp.html#method-i-output_array","(hooks_arr, opts)","<p>Output an array of hooks in the given format.\n"],["program_desc","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-program_desc","(desc)","<p>Gives you the program description\n"],["program_long_desc","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-program_long_desc","(desc)",""],["restore_std","Hook::PromptSTD","Hook/PromptSTD.html#method-i-restore_std","()","<p>Restore silenced STDOUT and STDERR\n"],["search_bookmarks","HookApp","HookApp.html#method-i-search_bookmarks","(search, opts)","<p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return …\n"],["search_name","HookApp","HookApp.html#method-i-search_name","(search)","<p>Search boomark names/titles. Return array of bookmark hashes.\n"],["search_path_or_address","HookApp","HookApp.html#method-i-search_path_or_address","(search)","<p>Search bookmark paths and addresses. Return array of bookmark hashes.\n"],["select_hook","HookApp","HookApp.html#method-i-select_hook","(marks)","<p>Generate a menu of available hooks for selecting one or more hooks to operate on. Revamped to use `fzf`, …\n"],["silence_std","Hook::PromptSTD","Hook/PromptSTD.html#method-i-silence_std","(file = '/dev/null')","<p>Redirect STDOUT and STDERR to /dev/null or file\n<p>@param file [String] a file path to redirect to …\n"],["split_hook","String","String.html#method-i-split_hook","()",""],["split_hooks","String","String.html#method-i-split_hooks","()",""],["switch","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-switch","(name, aliases, desc, long_desc, negatable)","<p>Gives you a switch in the current context\n"],["uninstall_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-uninstall_fzf","()","<p>Remove fzf binary\n"],["valid_hook","String","String.html#method-i-valid_hook","()",""],["valid_hook!","String","String.html#method-i-valid_hook-21","()",""],["validate_format","HookApp","HookApp.html#method-i-validate_format","(fmt, options)","<p>Check if format fully matches or matches the first character of available options. Return full valid …\n"],["version","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-version","(version)","<p>Gives you the program version\n"],["which_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-which_fzf","()","<p>Return the path to the fzf binary\n<p>@return [String] Path to fzf\n"],["README","","README_rdoc.html","","<p>hookapp\n<p>A CLI for Hook.app on macOS.\n<p>hook - CLI interface for Hook.app (macOS)\n"]]}}
1
+ var search_data = {"index":{"searchIndex":["app","gli","commands","doc","markdowndocumentlistener","hook","prompt","promptfzf","promptstd","hookapp","hooker","string","act_on()","all_bookmarks()","beginning()","bookmark_for()","bookmark_from_app()","browse_bookmarks()","browse_linked()","cap()","cap!()","clear_screen()","clip()","clip_bookmark()","clone_hooks()","command()","commands()","copy_bookmark()","decode()","default_command()","delete_all_hooks()","delete_hooks()","encode()","end_command()","end_commands()","end_options()","ending()","escape_quotes()","flag()","format_regex()","fzf()","get_hooks()","install_fzf()","link_all()","link_files()","linked_bookmarks()","new()","new()","nil_if_missing()","open_gui()","open_linked()","options()","output_array()","program_desc()","program_long_desc()","restore_std()","search_bookmarks()","search_name()","search_path_or_address()","select_hook()","silence_std()","split_hook()","split_hooks()","switch()","uninstall_fzf()","valid_hook()","valid_hook!()","validate_format()","version()","which_fzf()","readme"],"longSearchIndex":["app","gli","gli::commands","gli::commands::doc","gli::commands::markdowndocumentlistener","hook","hook::prompt","hook::promptfzf","hook::promptstd","hookapp","hooker","string","hookapp#act_on()","hookapp#all_bookmarks()","gli::commands::markdowndocumentlistener#beginning()","hookapp#bookmark_for()","hookapp#bookmark_from_app()","hookapp#browse_bookmarks()","hookapp#browse_linked()","string#cap()","string#cap!()","hook::promptstd#clear_screen()","string#clip()","hookapp#clip_bookmark()","hookapp#clone_hooks()","gli::commands::markdowndocumentlistener#command()","gli::commands::markdowndocumentlistener#commands()","hookapp#copy_bookmark()","hookapp#decode()","gli::commands::markdowndocumentlistener#default_command()","hookapp#delete_all_hooks()","hookapp#delete_hooks()","hookapp#encode()","gli::commands::markdowndocumentlistener#end_command()","gli::commands::markdowndocumentlistener#end_commands()","gli::commands::markdowndocumentlistener#end_options()","gli::commands::markdowndocumentlistener#ending()","string#escape_quotes()","gli::commands::markdowndocumentlistener#flag()","hookapp#format_regex()","hook::promptfzf#fzf()","hookapp#get_hooks()","hook::promptfzf#install_fzf()","hookapp#link_all()","hookapp#link_files()","hookapp#linked_bookmarks()","gli::commands::markdowndocumentlistener::new()","hooker::new()","string#nil_if_missing()","hookapp#open_gui()","hookapp#open_linked()","gli::commands::markdowndocumentlistener#options()","hookapp#output_array()","gli::commands::markdowndocumentlistener#program_desc()","gli::commands::markdowndocumentlistener#program_long_desc()","hook::promptstd#restore_std()","hookapp#search_bookmarks()","hookapp#search_name()","hookapp#search_path_or_address()","hookapp#select_hook()","hook::promptstd#silence_std()","string#split_hook()","string#split_hooks()","gli::commands::markdowndocumentlistener#switch()","hook::promptfzf#uninstall_fzf()","string#valid_hook()","string#valid_hook!()","hookapp#validate_format()","gli::commands::markdowndocumentlistener#version()","hook::promptfzf#which_fzf()",""],"info":[["App","","App.html","","<p>Main class for GLI app\n"],["GLI","","GLI.html","",""],["GLI::Commands","","GLI/Commands.html","",""],["GLI::Commands::Doc","","GLI/Commands/Doc.html","",""],["GLI::Commands::MarkdownDocumentListener","","GLI/Commands/MarkdownDocumentListener.html","","<p>DocumentListener class for GLI documentation generator\n"],["Hook","","Hook.html","",""],["Hook::Prompt","","Hook/Prompt.html","",""],["Hook::PromptFZF","","Hook/PromptFZF.html","","<p>Methods for working installing/using FuzzyFileFinder\n"],["Hook::PromptSTD","","Hook/PromptSTD.html","",""],["HookApp","","HookApp.html","","<p>Hook.app functions\n"],["Hooker","","Hooker.html","","<p>Hook.app CLI interface\n"],["String","","String.html","","<p>String helpers\n"],["act_on","HookApp","HookApp.html#method-i-act_on","(url)",""],["all_bookmarks","HookApp","HookApp.html#method-i-all_bookmarks","()","<p>Get all known bookmarks. Return array of bookmark hashes.\n"],["beginning","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-beginning","()",""],["bookmark_for","HookApp","HookApp.html#method-i-bookmark_for","(url)","<p>Get a Hook bookmark for file or URL. Return bookmark hash.\n"],["bookmark_from_app","HookApp","HookApp.html#method-i-bookmark_from_app","(app, opts)","<p>Get a bookmark from the foreground document of specified app.\n"],["browse_bookmarks","HookApp","HookApp.html#method-i-browse_bookmarks","(glob)",""],["browse_linked","HookApp","HookApp.html#method-i-browse_linked","(url)","<p>Select from a menu of available hooks and open using macOS `open`.\n"],["cap","String","String.html#method-i-cap","()","<p>Capitalize only if no uppercase\n"],["cap!","String","String.html#method-i-cap-21","()",""],["clear_screen","Hook::PromptSTD","Hook/PromptSTD.html#method-i-clear_screen","(msg = nil)","<p>Clear the terminal screen\n"],["clip","String","String.html#method-i-clip","()",""],["clip_bookmark","HookApp","HookApp.html#method-i-clip_bookmark","(url, opts)","<p>Create a bookmark for specified file/url and copy to the clipboard.\n"],["clone_hooks","HookApp","HookApp.html#method-i-clone_hooks","(args)","<p>Copy all hooks from source file to target file\n"],["command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-command","(name, aliases, desc, long_desc, arg_name, arg_options)","<p>Gives you a command in the current context and creates a new context of this command\n"],["commands","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-commands","()",""],["copy_bookmark","HookApp","HookApp.html#method-i-copy_bookmark","(title, url, opts)","<p>Create a bookmark from specified title and url and copy to the clipboard.\n"],["decode","HookApp","HookApp.html#method-i-decode","(string)",""],["default_command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-default_command","(name)","<p>Gives you the name of the current command in the current context\n"],["delete_all_hooks","HookApp","HookApp.html#method-i-delete_all_hooks","(url, force: false)","<p>Delete all hooked files/urls from target file\n"],["delete_hooks","HookApp","HookApp.html#method-i-delete_hooks","(args, opts)","<p>Delete hooks between two files/urls\n"],["encode","HookApp","HookApp.html#method-i-encode","(string)",""],["end_command","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_command","(_name)","<p>Ends a command, and “pops” you back up one context\n"],["end_commands","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_commands","()",""],["end_options","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-end_options","()",""],["ending","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-ending","()","<p>Called when processing has completed\n"],["escape_quotes","String","String.html#method-i-escape_quotes","()",""],["flag","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-flag","(name, aliases, desc, long_desc, default_value, arg_name, must_match, _type)","<p>Gives you a flag in the current context\n"],["format_regex","HookApp","HookApp.html#method-i-format_regex","(options)","<p>Create a single regex for validation of an array by first char or full match.\n"],["fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-fzf","()","<p>Get path to fzf binary, installing if needed\n<p>@return [String] Path to fzf binary\n"],["get_hooks","HookApp","HookApp.html#method-i-get_hooks","(url)","<p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.\n"],["install_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-install_fzf","(force: false)","<p>Install fzf on the current system. Installs to a subdirectory of the gem\n<p>@param force [Boolean] …\n"],["link_all","HookApp","HookApp.html#method-i-link_all","(args)","<p>Create bi-directional links between every file/url in the list of arguments\n"],["link_files","HookApp","HookApp.html#method-i-link_files","(args)","<p>Link 2 or more files/urls with bi-directional hooks.\n"],["linked_bookmarks","HookApp","HookApp.html#method-i-linked_bookmarks","(args, opts)","<p>Get a list of all hooks on a file/url.\n"],["new","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-c-new","(_global_options, _options, _arguments, app)",""],["new","Hooker","Hooker.html#method-c-new","()",""],["nil_if_missing","String","String.html#method-i-nil_if_missing","()",""],["open_gui","HookApp","HookApp.html#method-i-open_gui","(url)","<p>Open the Hook GUI for browsing/performing actions on a file or url\n"],["open_linked","HookApp","HookApp.html#method-i-open_linked","(url)","<p>Select from a menu of available hooks and open using macOS `open`.\n"],["options","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-options","()",""],["output_array","HookApp","HookApp.html#method-i-output_array","(hooks_arr, opts)","<p>Output an array of hooks in the given format.\n"],["program_desc","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-program_desc","(desc)","<p>Gives you the program description\n"],["program_long_desc","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-program_long_desc","(desc)",""],["restore_std","Hook::PromptSTD","Hook/PromptSTD.html#method-i-restore_std","()","<p>Restore silenced STDOUT and STDERR\n"],["search_bookmarks","HookApp","HookApp.html#method-i-search_bookmarks","(search, opts)","<p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return …\n"],["search_name","HookApp","HookApp.html#method-i-search_name","(search)","<p>Search boomark names/titles. Return array of bookmark hashes.\n"],["search_path_or_address","HookApp","HookApp.html#method-i-search_path_or_address","(search)","<p>Search bookmark paths and addresses. Return array of bookmark hashes.\n"],["select_hook","HookApp","HookApp.html#method-i-select_hook","(marks)","<p>Generate a menu of available hooks for selecting one or more hooks to operate on. Revamped to use `fzf`, …\n"],["silence_std","Hook::PromptSTD","Hook/PromptSTD.html#method-i-silence_std","(file = '/dev/null')","<p>Redirect STDOUT and STDERR to /dev/null or file\n<p>@param file [String] a file path to redirect to …\n"],["split_hook","String","String.html#method-i-split_hook","()",""],["split_hooks","String","String.html#method-i-split_hooks","()",""],["switch","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-switch","(name, aliases, desc, long_desc, negatable)","<p>Gives you a switch in the current context\n"],["uninstall_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-uninstall_fzf","()","<p>Remove fzf binary\n"],["valid_hook","String","String.html#method-i-valid_hook","()",""],["valid_hook!","String","String.html#method-i-valid_hook-21","()",""],["validate_format","HookApp","HookApp.html#method-i-validate_format","(fmt, options)","<p>Check if format fully matches or matches the first character of available options. Return full valid …\n"],["version","GLI::Commands::MarkdownDocumentListener","GLI/Commands/MarkdownDocumentListener.html#method-i-version","(version)","<p>Gives you the program version\n"],["which_fzf","Hook::PromptFZF","Hook/PromptFZF.html#method-i-which_fzf","()","<p>Return the path to the fzf binary\n<p>@return [String] Path to fzf\n"],["README","","README_rdoc.html","","<p>hookapp\n<p>A CLI for Hook.app on macOS.\n<p>hook - CLI interface for Hook.app (macOS)\n"]]}}
Binary file
@@ -134,6 +134,11 @@
134
134
  &mdash;
135
135
  <span class="container">Hooker</span>
136
136
 
137
+ <li class="method">
138
+ <a href="HookApp.html#method-i-act_on">#act_on</a>
139
+ &mdash;
140
+ <span class="container">HookApp</span>
141
+
137
142
  <li class="method">
138
143
  <a href="HookApp.html#method-i-all_bookmarks">#all_bookmarks</a>
139
144
  &mdash;
@@ -159,6 +164,11 @@
159
164
  &mdash;
160
165
  <span class="container">HookApp</span>
161
166
 
167
+ <li class="method">
168
+ <a href="HookApp.html#method-i-browse_linked">#browse_linked</a>
169
+ &mdash;
170
+ <span class="container">HookApp</span>
171
+
162
172
  <li class="method">
163
173
  <a href="String.html#method-i-cap">#cap</a>
164
174
  &mdash;
data/lib/hook/hookapp.rb CHANGED
@@ -208,7 +208,7 @@ class HookApp
208
208
 
209
209
  # marks[sel - 1]
210
210
 
211
- options = marks.map {|mark|
211
+ options = marks.map do |mark|
212
212
  if mark[:name]
213
213
  id = mark[:name]
214
214
  elsif mark[:path]
@@ -224,15 +224,17 @@ class HookApp
224
224
  elsif mark[:url]
225
225
  url = URI.parse(mark[:url])
226
226
  id = mark[:url]
227
- loc = url.scheme + " - " + url.hostname
227
+ loc = "#{url.scheme} - #{url.hostname}"
228
228
  else
229
- loc = ""
229
+ loc = ''
230
230
  end
231
231
 
232
232
  "#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}"
233
- }.delete_if { |mark| !mark }
233
+ end
234
+
235
+ options.delete_if(&:!)
234
236
 
235
- raise "Error processing available hooks" if options.empty?
237
+ raise 'Error processing available hooks' if options.empty?
236
238
 
237
239
  args = ['--layout=reverse-list',
238
240
  '--header="esc: cancel, tab: multi-select, ctrl-a: select all, return: open"',
@@ -256,26 +258,59 @@ class HookApp
256
258
  end
257
259
 
258
260
  def browse_bookmarks(glob)
261
+ glob_all = '**/*'
259
262
  root = if glob.is_a?(Array)
260
- glob.count.positive? ? glob : Dir.glob('**/*')
263
+ glob.count.positive? ? glob : Dir.glob(glob_all)
261
264
  elsif glob && File.exist?(glob)
262
265
  hooks = get_hooks(glob)
263
266
  return select_hook(hooks) unless hooks.empty? || File.directory?(glob)
264
267
 
265
- Dir.glob([File.expand_path(glob), '**/*'])
268
+ Dir.glob([File.expand_path(glob), glob_all])
266
269
  else
267
- Dir.glob(glob.nil? || glob.empty? ? '**/*' : glob)
270
+ Dir.glob(glob.nil? || glob.empty? ? glob_all : glob)
268
271
  end
269
272
 
270
273
  args = ['--layout=reverse-list',
271
- '--header="esc: cancel, return: open"',
274
+ '--header="esc: cancel, return: browse"',
272
275
  '--prompt=" Select file > "',
273
276
  %(--preview='hook ls {}'),
274
277
  '--height=60%',
275
278
  '--min-height=10']
276
279
 
277
- sel = `echo #{Shellwords.escape(root.join("\n"))} | '#{fzf}' #{args.join(' ')}`.chomp
278
- return open_linked(sel)
280
+ sel = `echo #{Shellwords.escape(root.join("\n"))} | '#{fzf}' #{args.join(' ')}`.chomp.split("\n")
281
+
282
+ if sel.count == 1
283
+ marks = get_hooks(sel[0])
284
+ if marks.count.positive?
285
+ browse_linked(sel[0])
286
+ else
287
+ browse_bookmarks(glob)
288
+ end
289
+ else
290
+ open_linked(sel)
291
+ end
292
+ end
293
+
294
+ def act_on(url)
295
+ menu_items = ['Open in default app']
296
+ return open_linked(url) unless File.exist?(url)
297
+
298
+ marks = get_hooks(url)
299
+ menu_items << 'Browse file' if marks.count.positive?
300
+
301
+ args = ['--prompt="Choose action > "',
302
+ '--layout=reverse-list',
303
+ '--height=60%',
304
+ "--min-height=#{menu_items.count + 1}"]
305
+ sel = `echo #{Shellwords.escape(menu_items.join("\n"))} | '#{fzf}' #{args.join(' ')}`.chomp
306
+ return if sel.nil? || sel.empty?
307
+
308
+ case sel
309
+ when /Browse file/
310
+ browse_linked(url)
311
+ else
312
+ `open '#{url}'`
313
+ end
279
314
  end
280
315
 
281
316
  # Open the Hook GUI for browsing/performing actions on a file or url
@@ -296,15 +331,24 @@ class HookApp
296
331
 
297
332
  # Select from a menu of available hooks and open using macOS `open`.
298
333
  def open_linked(url)
334
+ marks = get_hooks(url)
335
+ if marks.empty?
336
+ warn "No hooks found for #{url}"
337
+ else
338
+ res = select_hook(marks)
339
+ res.each { |mark| `open '#{mark[:url]}'` } unless res.empty?
340
+ end
341
+ end
342
+
343
+ # Select from a menu of available hooks and open using macOS `open`.
344
+ def browse_linked(url)
299
345
  marks = get_hooks(url)
300
346
  if marks.empty?
301
347
  warn "No hooks found for #{url}"
302
348
  else
303
349
  res = select_hook(marks)
304
350
  unless res.empty?
305
- res.each {|mark|
306
- `open '#{mark[:url]}'`
307
- }
351
+ res.each { |mark| mark[:path] ? act_on(mark[:path]) : `open '#{mark[:url]}'` }
308
352
  end
309
353
  end
310
354
  end
data/lib/hook/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hook
4
- VERSION = '2.0.13'
4
+ VERSION = '2.0.15'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hookapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.13
4
+ version: 2.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-19 00:00:00.000000000 Z
11
+ date: 2022-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aruba