hookapp 2.0.5 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +26 -3
  4. data/Rakefile +7 -3
  5. data/bin/hook +49 -2
  6. data/buildnotes.md +30 -0
  7. data/hook.rdoc +21 -2
  8. data/lib/helpers/fuzzyfilefinder +0 -0
  9. data/lib/hook/hookapp.rb +29 -10
  10. data/lib/hook/string.rb +4 -0
  11. data/lib/hook/version.rb +1 -1
  12. data/test/helpers/hook-helpers.rb +76 -0
  13. data/test/hook_clip_test.rb +24 -0
  14. data/test/hook_clone_test.rb +30 -0
  15. data/test/hook_encode_test.rb +30 -0
  16. data/test/hook_link_test.rb +39 -0
  17. data/test/hook_list_test.rb +25 -0
  18. data/test/hook_remove_test.rb +34 -0
  19. data/test/hook_scripts_test.rb +21 -0
  20. metadata +10 -69
  21. data/html/App.html +0 -107
  22. data/html/GLI/Commands/Doc.html +0 -91
  23. data/html/GLI/Commands/MarkdownDocumentListener.html +0 -511
  24. data/html/GLI/Commands.html +0 -91
  25. data/html/GLI.html +0 -91
  26. data/html/Hook.html +0 -100
  27. data/html/HookApp.html +0 -946
  28. data/html/Hooker.html +0 -141
  29. data/html/README_rdoc.html +0 -325
  30. data/html/String.html +0 -313
  31. data/html/created.rid +0 -9
  32. data/html/css/fonts.css +0 -167
  33. data/html/css/rdoc.css +0 -639
  34. data/html/fonts/Lato-Light.ttf +0 -0
  35. data/html/fonts/Lato-LightItalic.ttf +0 -0
  36. data/html/fonts/Lato-Regular.ttf +0 -0
  37. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  38. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  39. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  40. data/html/images/add.png +0 -0
  41. data/html/images/arrow_up.png +0 -0
  42. data/html/images/brick.png +0 -0
  43. data/html/images/brick_link.png +0 -0
  44. data/html/images/bug.png +0 -0
  45. data/html/images/bullet_black.png +0 -0
  46. data/html/images/bullet_toggle_minus.png +0 -0
  47. data/html/images/bullet_toggle_plus.png +0 -0
  48. data/html/images/date.png +0 -0
  49. data/html/images/delete.png +0 -0
  50. data/html/images/find.png +0 -0
  51. data/html/images/loadingAnimation.gif +0 -0
  52. data/html/images/macFFBgHack.png +0 -0
  53. data/html/images/package.png +0 -0
  54. data/html/images/page_green.png +0 -0
  55. data/html/images/page_white_text.png +0 -0
  56. data/html/images/page_white_width.png +0 -0
  57. data/html/images/plugin.png +0 -0
  58. data/html/images/ruby.png +0 -0
  59. data/html/images/tag_blue.png +0 -0
  60. data/html/images/tag_green.png +0 -0
  61. data/html/images/transparent.png +0 -0
  62. data/html/images/wrench.png +0 -0
  63. data/html/images/wrench_orange.png +0 -0
  64. data/html/images/zoom.png +0 -0
  65. data/html/index.html +0 -293
  66. data/html/js/darkfish.js +0 -84
  67. data/html/js/navigation.js +0 -105
  68. data/html/js/navigation.js.gz +0 -0
  69. data/html/js/search.js +0 -110
  70. data/html/js/search_index.js +0 -1
  71. data/html/js/search_index.js.gz +0 -0
  72. data/html/js/searcher.js +0 -229
  73. data/html/js/searcher.js.gz +0 -0
  74. data/html/table_of_contents.html +0 -345
  75. data/test/default_test.rb +0 -14
  76. data/test/hookfiles/01.test +0 -0
  77. data/test/hookfiles/02.test +0 -0
  78. data/test/hookfiles/03.test +0 -0
  79. data/test/hookfiles/04.test +0 -0
  80. data/test/hookfiles/05.test +0 -0
  81. data/test/hookfiles/06.test +0 -0
  82. data/test/hookfiles/07.test +0 -0
  83. data/test/hookfiles/08.test +0 -0
  84. data/test/hookfiles/09.test +0 -0
  85. data/test/hookfiles/10.test +0 -0
  86. data/test/hookfiles/11.test +0 -0
  87. data/test/hookfiles/12.test +0 -0
data/html/HookApp.html DELETED
@@ -1,946 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>class HookApp - hookapp</title>
8
-
9
- <script type="text/javascript">
10
- var rdoc_rel_prefix = "./";
11
- var index_rel_prefix = "./";
12
- </script>
13
-
14
- <script src="./js/navigation.js" defer></script>
15
- <script src="./js/search.js" defer></script>
16
- <script src="./js/search_index.js" defer></script>
17
- <script src="./js/searcher.js" defer></script>
18
- <script src="./js/darkfish.js" defer></script>
19
-
20
- <link href="./css/fonts.css" rel="stylesheet">
21
- <link href="./css/rdoc.css" rel="stylesheet">
22
-
23
-
24
- <body id="top" role="document" class="class">
25
- <nav role="navigation">
26
- <div id="project-navigation">
27
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
- <h2>
29
- <a href="./index.html" rel="home">Home</a>
30
- </h2>
31
-
32
- <div id="table-of-contents-navigation">
33
- <a href="./table_of_contents.html#pages">Pages</a>
34
- <a href="./table_of_contents.html#classes">Classes</a>
35
- <a href="./table_of_contents.html#methods">Methods</a>
36
- </div>
37
- </div>
38
-
39
- <div id="search-section" role="search" class="project-section initially-hidden">
40
- <form action="#" method="get" accept-charset="utf-8">
41
- <div id="search-field-wrapper">
42
- <input id="search-field" role="combobox" aria-label="Search"
43
- aria-autocomplete="list" aria-controls="search-results"
44
- type="text" name="search" placeholder="Search" spellcheck="false"
45
- title="Type to search, Up and Down to navigate, Enter to load">
46
- </div>
47
-
48
- <ul id="search-results" aria-label="Search Results"
49
- aria-busy="false" aria-expanded="false"
50
- aria-atomic="false" class="initially-hidden"></ul>
51
- </form>
52
- </div>
53
-
54
- </div>
55
-
56
-
57
-
58
- <div id="class-metadata">
59
-
60
-
61
- <div id="parent-class-section" class="nav-section">
62
- <h3>Parent</h3>
63
-
64
- <p class="link">Object
65
- </div>
66
-
67
-
68
-
69
-
70
- <!-- Method Quickref -->
71
- <div id="method-list-section" class="nav-section">
72
- <h3>Methods</h3>
73
-
74
- <ul class="link-list" role="directory">
75
- <li ><a href="#method-i-all_bookmarks">#all_bookmarks</a>
76
- <li ><a href="#method-i-bookmark_for">#bookmark_for</a>
77
- <li ><a href="#method-i-bookmark_from_app">#bookmark_from_app</a>
78
- <li ><a href="#method-i-clip_bookmark">#clip_bookmark</a>
79
- <li ><a href="#method-i-clone_hooks">#clone_hooks</a>
80
- <li ><a href="#method-i-copy_bookmark">#copy_bookmark</a>
81
- <li ><a href="#method-i-delete_all_hooks">#delete_all_hooks</a>
82
- <li ><a href="#method-i-delete_hooks">#delete_hooks</a>
83
- <li ><a href="#method-i-format_regex">#format_regex</a>
84
- <li ><a href="#method-i-get_hooks">#get_hooks</a>
85
- <li ><a href="#method-i-link_all">#link_all</a>
86
- <li ><a href="#method-i-link_files">#link_files</a>
87
- <li ><a href="#method-i-linked_bookmarks">#linked_bookmarks</a>
88
- <li ><a href="#method-i-open_gui">#open_gui</a>
89
- <li ><a href="#method-i-open_linked">#open_linked</a>
90
- <li ><a href="#method-i-output_array">#output_array</a>
91
- <li ><a href="#method-i-search_bookmarks">#search_bookmarks</a>
92
- <li ><a href="#method-i-search_name">#search_name</a>
93
- <li ><a href="#method-i-search_path_or_address">#search_path_or_address</a>
94
- <li ><a href="#method-i-select_hook">#select_hook</a>
95
- <li ><a href="#method-i-validate_format">#validate_format</a>
96
- </ul>
97
- </div>
98
-
99
- </div>
100
- </nav>
101
-
102
- <main role="main" aria-labelledby="class-HookApp">
103
- <h1 id="class-HookApp" class="class">
104
- class HookApp
105
- </h1>
106
-
107
- <section class="description">
108
-
109
- <p>Hook.app functions</p>
110
-
111
- </section>
112
-
113
- <section id="5Buntitled-5D" class="documentation-section">
114
-
115
-
116
-
117
-
118
-
119
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
120
- <header>
121
- <h3>Public Instance Methods</h3>
122
- </header>
123
-
124
- <div id="method-i-all_bookmarks" class="method-detail ">
125
- <div class="method-heading">
126
- <span class="method-name">all_bookmarks</span><span
127
- class="method-args">()</span>
128
- <span class="method-click-advice">click to toggle source</span>
129
- </div>
130
-
131
- <div class="method-description">
132
- <p>Get all known bookmarks. Return array of bookmark hashes.</p>
133
-
134
- <div class="method-source-code" id="all_bookmarks-source">
135
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 140</span>
136
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">all_bookmarks</span>
137
- <span class="ruby-string">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
138
- tell application &quot;Hook&quot;
139
- set _marks to every bookmark
140
- set _out to {}
141
- repeat with _hook in _marks
142
- set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
143
- end repeat
144
- set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
145
- set _output to _out as string
146
- set AppleScript&#39;s text item delimiters to astid
147
- return _output
148
- end tell
149
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
150
- <span class="ruby-keyword">end</span></pre>
151
- </div>
152
- </div>
153
-
154
-
155
- </div>
156
-
157
- <div id="method-i-bookmark_for" class="method-detail ">
158
- <div class="method-heading">
159
- <span class="method-name">bookmark_for</span><span
160
- class="method-args">(url)</span>
161
- <span class="method-click-advice">click to toggle source</span>
162
- </div>
163
-
164
- <div class="method-description">
165
- <p>Get a <a href="Hook.html"><code>Hook</code></a> bookmark for file or URL. Return bookmark hash.</p>
166
-
167
- <div class="method-source-code" id="bookmark_for-source">
168
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 32</span>
169
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_for</span>(<span class="ruby-identifier">url</span>)
170
- <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
171
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
172
-
173
- <span class="ruby-keyword">begin</span>
174
- <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
175
- tell application &quot;Hook&quot;
176
- set _hook to make bookmark with data &quot;#{url}&quot;
177
- if _hook is missing value
178
- return &quot;&quot;
179
- else
180
- return name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook
181
- end if
182
- end tell
183
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
184
- <span class="ruby-keyword">rescue</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
185
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>
186
- <span class="ruby-keyword">end</span>
187
-
188
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Error getting bookmark for #{url}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">empty?</span>
189
- <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">split_hook</span>
190
- <span class="ruby-keyword">end</span></pre>
191
- </div>
192
- </div>
193
-
194
-
195
- </div>
196
-
197
- <div id="method-i-bookmark_from_app" class="method-detail ">
198
- <div class="method-heading">
199
- <span class="method-name">bookmark_from_app</span><span
200
- class="method-args">(app, opts)</span>
201
- <span class="method-click-advice">click to toggle source</span>
202
- </div>
203
-
204
- <div class="method-description">
205
- <p>Get a bookmark from the foreground document of specified app.</p>
206
-
207
- <div class="method-source-code" id="bookmark_from_app-source">
208
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 81</span>
209
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_from_app</span>(<span class="ruby-identifier">app</span>, <span class="ruby-identifier">opts</span>)
210
- <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
211
- tell application &quot;System Events&quot; to set front_app to name of first application process whose frontmost is true
212
- tell application &quot;#{app}&quot; to activate
213
- delay 2
214
- tell application &quot;Hook&quot;
215
- set _hook to (bookmark from active window)
216
- set _output to (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
217
- end tell
218
- tell application front_app to activate
219
- return _output
220
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hook</span>
221
- <span class="ruby-identifier">title</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-node">&quot;#{app.cap} link&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
222
- <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{mark[:url]})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
223
-
224
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:copy</span>]
225
- <span class="ruby-node">&quot;Copied Markdown link for &#39;#{title}&#39; to clipboard&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
226
- <span class="ruby-keyword">else</span>
227
- <span class="ruby-identifier">output</span>
228
- <span class="ruby-keyword">end</span>
229
- <span class="ruby-keyword">end</span></pre>
230
- </div>
231
- </div>
232
-
233
-
234
- </div>
235
-
236
- <div id="method-i-clip_bookmark" class="method-detail ">
237
- <div class="method-heading">
238
- <span class="method-name">clip_bookmark</span><span
239
- class="method-args">(url, opts)</span>
240
- <span class="method-click-advice">click to toggle source</span>
241
- </div>
242
-
243
- <div class="method-description">
244
- <p>Create a bookmark for specified file/url and copy to the clipboard.</p>
245
-
246
- <div class="method-source-code" id="clip_bookmark-source">
247
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 181</span>
248
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clip_bookmark</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
249
- <span class="ruby-identifier">mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
250
- <span class="ruby-identifier">copy_bookmark</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>], <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>], <span class="ruby-identifier">opts</span>)
251
- <span class="ruby-keyword">end</span></pre>
252
- </div>
253
- </div>
254
-
255
-
256
- </div>
257
-
258
- <div id="method-i-clone_hooks" class="method-detail ">
259
- <div class="method-heading">
260
- <span class="method-name">clone_hooks</span><span
261
- class="method-args">(args)</span>
262
- <span class="method-click-advice">click to toggle source</span>
263
- </div>
264
-
265
- <div class="method-description">
266
- <p>Copy all hooks from source file to target file</p>
267
-
268
- <div class="method-source-code" id="clone_hooks-source">
269
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 314</span>
270
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clone_hooks</span>(<span class="ruby-identifier">args</span>)
271
- <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>
272
- <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>
273
-
274
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">target</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>
275
- <span class="ruby-identifier">hooks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">source</span>)
276
- <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
277
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
278
- tell application &quot;Hook&quot;
279
- set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
280
- set _mark2 to make bookmark with data &quot;#{target}&quot;
281
- hook _mark1 and _mark2
282
- return true
283
- end tell
284
- APPLESCRIPT`</span>
285
- <span class="ruby-keyword">end</span>
286
- <span class="ruby-node">&quot;Hooks from #{source} cloned to #{target}&quot;</span>
287
- <span class="ruby-keyword">else</span>
288
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid file specified&#39;</span>
289
- <span class="ruby-keyword">end</span>
290
- <span class="ruby-keyword">end</span></pre>
291
- </div>
292
- </div>
293
-
294
-
295
- </div>
296
-
297
- <div id="method-i-copy_bookmark" class="method-detail ">
298
- <div class="method-heading">
299
- <span class="method-name">copy_bookmark</span><span
300
- class="method-args">(title, url, opts)</span>
301
- <span class="method-click-advice">click to toggle source</span>
302
- </div>
303
-
304
- <div class="method-description">
305
- <p>Create a bookmark from specified title and url and copy to the clipboard.</p>
306
-
307
- <div class="method-source-code" id="copy_bookmark-source">
308
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 187</span>
309
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">copy_bookmark</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
310
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;No URL found&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">empty?</span>
311
- <span class="ruby-identifier">title</span> = <span class="ruby-identifier">title</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-string">&#39;No title&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">title</span>
312
- <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{url})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">url</span>
313
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
314
- <span class="ruby-node">%(Copied #{opts[:markdown] ? &#39;Markdown link&#39; : &#39;Hook URL&#39;} for &#39;#{title}&#39; to clipboard)</span>
315
- <span class="ruby-keyword">end</span></pre>
316
- </div>
317
- </div>
318
-
319
-
320
- </div>
321
-
322
- <div id="method-i-delete_all_hooks" class="method-detail ">
323
- <div class="method-heading">
324
- <span class="method-name">delete_all_hooks</span><span
325
- class="method-args">(url)</span>
326
- <span class="method-click-advice">click to toggle source</span>
327
- </div>
328
-
329
- <div class="method-description">
330
- <p>Delete all hooked files/urls from target file</p>
331
-
332
- <div class="method-source-code" id="delete_all_hooks-source">
333
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 337</span>
334
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_all_hooks</span>(<span class="ruby-identifier">url</span>)
335
- <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>
336
- <span class="ruby-identifier">res</span> = <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">strip</span>
337
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^y/i</span>
338
- <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
339
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
340
- tell application &quot;Hook&quot;
341
- set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
342
- set _mark2 to make bookmark with data &quot;#{url}&quot;
343
- unhook _mark1 and _mark2
344
- return true
345
- end tell
346
- APPLESCRIPT`</span>
347
- <span class="ruby-keyword">end</span>
348
- <span class="ruby-node">&quot;Removed all hooks from #{url}&quot;</span>
349
- <span class="ruby-keyword">end</span>
350
- <span class="ruby-keyword">end</span></pre>
351
- </div>
352
- </div>
353
-
354
-
355
- </div>
356
-
357
- <div id="method-i-delete_hooks" class="method-detail ">
358
- <div class="method-heading">
359
- <span class="method-name">delete_hooks</span><span
360
- class="method-args">(args, opts)</span>
361
- <span class="method-click-advice">click to toggle source</span>
362
- </div>
363
-
364
- <div class="method-description">
365
- <p>Delete hooks between two files/urls</p>
366
-
367
- <div class="method-source-code" id="delete_hooks-source">
368
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 356</span>
369
- <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>)
370
- <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> }
371
- <span class="ruby-identifier">output</span> = []
372
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:all</span>]
373
- <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
374
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{args[i]}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
375
-
376
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">delete_all_hooks</span>(<span class="ruby-identifier">url</span>))
377
- <span class="ruby-keyword">end</span>
378
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
379
- <span class="ruby-keyword">end</span>
380
-
381
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
382
- <span class="ruby-identifier">source</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">0</span>]
383
- <span class="ruby-identifier">target</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">1</span>]
384
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
385
- tell application &quot;Hook&quot;
386
- set _mark1 to make bookmark with data &quot;#{source}&quot;
387
- set _mark2 to make bookmark with data &quot;#{target}&quot;
388
- unhook _mark1 and _mark2
389
- return true
390
- end tell
391
- APPLESCRIPT`</span>
392
- <span class="ruby-node">&quot;Hook removed between #{source} and #{target}&quot;</span>
393
- <span class="ruby-keyword">else</span>
394
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid number of URLs or files specified&#39;</span>
395
- <span class="ruby-keyword">end</span>
396
- <span class="ruby-keyword">end</span></pre>
397
- </div>
398
- </div>
399
-
400
-
401
- </div>
402
-
403
- <div id="method-i-format_regex" class="method-detail ">
404
- <div class="method-heading">
405
- <span class="method-name">format_regex</span><span
406
- class="method-args">(options)</span>
407
- <span class="method-click-advice">click to toggle source</span>
408
- </div>
409
-
410
- <div class="method-description">
411
- <p>Create a single regex for validation of an array by first char or full match.</p>
412
-
413
- <div class="method-source-code" id="format_regex-source">
414
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 9</span>
415
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">format_regex</span>(<span class="ruby-identifier">options</span>)
416
- <span class="ruby-identifier">fmt_rx_array</span> = []
417
- <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">fmt</span><span class="ruby-operator">|</span> <span class="ruby-identifier">fmt_rx_array</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">fmt</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*?)$/</span>, <span class="ruby-string">&#39;\1(\2)?&#39;</span>)) }
418
- <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;^(#{fmt_rx_array.join(&#39;|&#39;)})$&quot;</span>,<span class="ruby-string">&#39;i&#39;</span>)
419
- <span class="ruby-keyword">end</span></pre>
420
- </div>
421
- </div>
422
-
423
-
424
- </div>
425
-
426
- <div id="method-i-get_hooks" class="method-detail ">
427
- <div class="method-heading">
428
- <span class="method-name">get_hooks</span><span
429
- class="method-args">(url)</span>
430
- <span class="method-click-advice">click to toggle source</span>
431
- </div>
432
-
433
- <div class="method-description">
434
- <p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.</p>
435
-
436
- <div class="method-source-code" id="get_hooks-source">
437
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 56</span>
438
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_hooks</span>(<span class="ruby-identifier">url</span>)
439
- <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
440
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
441
-
442
- <span class="ruby-identifier">hooks</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
443
- tell application &quot;Hook&quot;
444
- set _mark to make bookmark with data &quot;#{url}&quot;
445
- if _mark is missing value
446
- return &quot;&quot;
447
- end if
448
- set _hooks to hooked bookmarks of _mark
449
- set _out to {}
450
- repeat with _hook in _hooks
451
- set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
452
- end repeat
453
- set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
454
- set _output to _out as string
455
- set AppleScript&#39;s text item delimiters to astid
456
- return _output
457
- end tell
458
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
459
- <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">split_hooks</span>
460
- <span class="ruby-keyword">end</span></pre>
461
- </div>
462
- </div>
463
-
464
-
465
- </div>
466
-
467
- <div id="method-i-link_all" class="method-detail ">
468
- <div class="method-heading">
469
- <span class="method-name">link_all</span><span
470
- class="method-args">(args)</span>
471
- <span class="method-click-advice">click to toggle source</span>
472
- </div>
473
-
474
- <div class="method-description">
475
- <p>Create bi-directional links between every file/url in the list of arguments</p>
476
-
477
- <div class="method-source-code" id="link_all-source">
478
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 386</span>
479
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_all</span>(<span class="ruby-identifier">args</span>)
480
- <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>
481
- <span class="ruby-identifier">source</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook</span>
482
- <span class="ruby-identifier">link_to</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">reject</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-identifier">url</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
483
- <span class="ruby-identifier">link_to</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span>
484
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
485
- tell application &quot;Hook&quot;
486
- set _mark1 to make bookmark with data &quot;#{source}&quot;
487
- set _mark2 to make bookmark with data &quot;#{url}&quot;
488
- hook _mark1 and _mark2
489
- return true
490
- end tell
491
- APPLESCRIPT`</span>
492
- <span class="ruby-keyword">end</span>
493
- <span class="ruby-keyword">end</span>
494
- <span class="ruby-node">&quot;Linked #{args.length} files to each other&quot;</span>
495
- <span class="ruby-keyword">end</span></pre>
496
- </div>
497
- </div>
498
-
499
-
500
- </div>
501
-
502
- <div id="method-i-link_files" class="method-detail ">
503
- <div class="method-heading">
504
- <span class="method-name">link_files</span><span
505
- class="method-args">(args)</span>
506
- <span class="method-click-advice">click to toggle source</span>
507
- </div>
508
-
509
- <div class="method-description">
510
- <p>Link 2 or more files/urls with bi-directional hooks.</p>
511
-
512
- <div class="method-source-code" id="link_files-source">
513
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 291</span>
514
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_files</span>(<span class="ruby-identifier">args</span>)
515
- <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>
516
- <span class="ruby-identifier">target</span>.<span class="ruby-identifier">valid_hook!</span>
517
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{target}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">target</span>
518
-
519
- <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>
520
- <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook!</span>
521
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{file}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">file</span>
522
-
523
- <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Linking #{file} and #{target}...&quot;</span>
524
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
525
- tell application &quot;Hook&quot;
526
- set _mark1 to make bookmark with data &quot;#{file}&quot;
527
- set _mark2 to make bookmark with data &quot;#{target}&quot;
528
- hook _mark1 and _mark2
529
- return true
530
- end tell
531
- APPLESCRIPT`</span>
532
- <span class="ruby-keyword">end</span>
533
- <span class="ruby-node">&quot;Linked #{args.length} files to #{target}&quot;</span>
534
- <span class="ruby-keyword">end</span></pre>
535
- </div>
536
- </div>
537
-
538
-
539
- </div>
540
-
541
- <div id="method-i-linked_bookmarks" class="method-detail ">
542
- <div class="method-heading">
543
- <span class="method-name">linked_bookmarks</span><span
544
- class="method-args">(args, opts)</span>
545
- <span class="method-click-advice">click to toggle source</span>
546
- </div>
547
-
548
- <div class="method-description">
549
- <p>Get a list of all hooks on a file/url.</p>
550
-
551
- <div class="method-source-code" id="linked_bookmarks-source">
552
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 405</span>
553
- <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>)
554
- <span class="ruby-identifier">result</span> = []
555
-
556
- <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
557
-
558
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
559
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">all_bookmarks</span>, <span class="ruby-identifier">opts</span>)
560
- <span class="ruby-keyword">else</span>
561
- <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">url</span><span class="ruby-operator">|</span>
562
- <span class="ruby-identifier">source_mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
563
- <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:name</span>]
564
-
565
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
566
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
567
- <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;[#{source_mark[:name]}](#{source_mark[:url]})&quot;</span>
568
- <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; &lt;file://#{CGI.escape(source_mark[:path])}&gt;&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
569
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
570
- <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
571
- <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:path]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
572
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
573
- <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
574
- <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:url]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:url</span>]
575
- <span class="ruby-keyword">else</span>
576
- <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;Bookmarks attached to #{source_mark[:path] || source_mark[:url]}&quot;</span>
577
- <span class="ruby-keyword">end</span>
578
-
579
- <span class="ruby-identifier">hooks_arr</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
580
-
581
- <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
582
- <span class="ruby-identifier">result</span>.<span class="ruby-identifier">push</span>({ <span class="ruby-value">file:</span> <span class="ruby-identifier">filename</span>, <span class="ruby-value">links:</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>) })
583
- <span class="ruby-keyword">end</span>
584
-
585
-
586
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;verbose&#39;</span>
587
- <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
588
- <span class="ruby-node">&quot;#{res[:file]}\n\n#{res[:links]}\n&quot;</span>
589
- <span class="ruby-keyword">end</span>
590
- <span class="ruby-keyword">else</span>
591
- <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
592
- <span class="ruby-identifier">res</span>[<span class="ruby-value">:links</span>]
593
- <span class="ruby-keyword">end</span>
594
- <span class="ruby-keyword">end</span>
595
- <span class="ruby-keyword">end</span>
596
- <span class="ruby-identifier">result</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
597
- <span class="ruby-keyword">end</span></pre>
598
- </div>
599
- </div>
600
-
601
-
602
- </div>
603
-
604
- <div id="method-i-open_gui" class="method-detail ">
605
- <div class="method-heading">
606
- <span class="method-name">open_gui</span><span
607
- class="method-args">(url)</span>
608
- <span class="method-click-advice">click to toggle source</span>
609
- </div>
610
-
611
- <div class="method-description">
612
- <p>Open the <a href="Hook.html"><code>Hook</code></a> GUI for browsing/performing actions on a file or url</p>
613
-
614
- <div class="method-source-code" id="open_gui-source">
615
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 262</span>
616
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_gui</span>(<span class="ruby-identifier">url</span>)
617
- <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
618
- tell application &quot;Hook&quot;
619
- set _mark to make bookmark with data &quot;#{url.valid_hook}&quot;
620
- if _mark is missing value
621
- return &quot;Failed to create bookmark for #{url}&quot;
622
- else
623
- invoke on _mark
624
- return &quot;&quot;
625
- end if
626
- end tell
627
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
628
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">empty?</span>
629
- <span class="ruby-keyword">end</span></pre>
630
- </div>
631
- </div>
632
-
633
-
634
- </div>
635
-
636
- <div id="method-i-open_linked" class="method-detail ">
637
- <div class="method-heading">
638
- <span class="method-name">open_linked</span><span
639
- class="method-args">(url)</span>
640
- <span class="method-click-advice">click to toggle source</span>
641
- </div>
642
-
643
- <div class="method-description">
644
- <p>Select from a menu of available hooks and open using macOS `open`.</p>
645
-
646
- <div class="method-source-code" id="open_linked-source">
647
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 278</span>
648
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_linked</span>(<span class="ruby-identifier">url</span>)
649
- <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
650
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
651
- <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;No hooks found for #{url}&quot;</span>
652
- <span class="ruby-keyword">else</span>
653
- <span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
654
- <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>
655
- <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span>
656
- }
657
- <span class="ruby-keyword">end</span>
658
- <span class="ruby-keyword">end</span></pre>
659
- </div>
660
- </div>
661
-
662
-
663
- </div>
664
-
665
- <div id="method-i-output_array" class="method-detail ">
666
- <div class="method-heading">
667
- <span class="method-name">output_array</span><span
668
- class="method-args">(hooks_arr, opts)</span>
669
- <span class="method-click-advice">click to toggle source</span>
670
- </div>
671
-
672
- <div class="method-description">
673
- <p>Output an array of hooks in the given format.</p>
674
-
675
- <div class="method-source-code" id="output_array-source">
676
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 452</span>
677
- <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>)
678
- <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">empty?</span>
679
- <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>]
680
-
681
- <span class="ruby-identifier">output</span> = []
682
-
683
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
684
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
685
- <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
686
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span>
687
- <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>]
688
- <span class="ruby-keyword">else</span>
689
- <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>]
690
- <span class="ruby-keyword">end</span>
691
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;- [#{title}](#{h[:url]})&quot;</span>)
692
- <span class="ruby-keyword">end</span>
693
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
694
- <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
695
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</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">:url</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>])
696
- <span class="ruby-keyword">end</span>
697
- <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
698
- <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
699
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>])
700
- <span class="ruby-keyword">end</span>
701
- <span class="ruby-keyword">else</span>
702
- <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
703
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;Title: #{h[:name]}\nPath: #{h[:path]}\nAddress: #{h[:url]}\n---------------------&quot;</span>)
704
- <span class="ruby-keyword">end</span>
705
- <span class="ruby-keyword">end</span>
706
- <span class="ruby-keyword">else</span>
707
- <span class="ruby-identifier">output</span> = [<span class="ruby-string">&#39;No bookmarks&#39;</span>]
708
- <span class="ruby-keyword">end</span>
709
-
710
- <span class="ruby-identifier">output</span>
711
- <span class="ruby-keyword">end</span></pre>
712
- </div>
713
- </div>
714
-
715
-
716
- </div>
717
-
718
- <div id="method-i-search_bookmarks" class="method-detail ">
719
- <div class="method-heading">
720
- <span class="method-name">search_bookmarks</span><span
721
- class="method-args">(search, opts)</span>
722
- <span class="method-click-advice">click to toggle source</span>
723
- </div>
724
-
725
- <div class="method-description">
726
- <p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return results as formatted list.</p>
727
-
728
- <div class="method-source-code" id="search_bookmarks-source">
729
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 158</span>
730
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_bookmarks</span>(<span class="ruby-identifier">search</span>, <span class="ruby-identifier">opts</span>)
731
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">empty?</span>
732
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">search_name</span>(<span class="ruby-identifier">search</span>)
733
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:names_only</span>]
734
- <span class="ruby-identifier">more_results</span> = <span class="ruby-identifier">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
735
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">more_results</span>).<span class="ruby-identifier">uniq</span>
736
- <span class="ruby-keyword">end</span>
737
- <span class="ruby-keyword">else</span>
738
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">all_bookmarks</span>
739
- <span class="ruby-keyword">end</span>
740
-
741
- <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
742
-
743
- <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">opts</span>)
744
-
745
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^v/</span>
746
- <span class="ruby-node">&quot;Search results for: #{search}\n---------\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
747
- <span class="ruby-keyword">else</span>
748
- <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
749
- <span class="ruby-keyword">end</span>
750
- <span class="ruby-keyword">end</span></pre>
751
- </div>
752
- </div>
753
-
754
-
755
- </div>
756
-
757
- <div id="method-i-search_name" class="method-detail ">
758
- <div class="method-heading">
759
- <span class="method-name">search_name</span><span
760
- class="method-args">(search)</span>
761
- <span class="method-click-advice">click to toggle source</span>
762
- </div>
763
-
764
- <div class="method-description">
765
- <p>Search boomark names/titles. Return array of bookmark hashes.</p>
766
-
767
- <div class="method-source-code" id="search_name-source">
768
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 104</span>
769
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_name</span>(<span class="ruby-identifier">search</span>)
770
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
771
- set searchString to &quot;#{search.strip}&quot;
772
- tell application &quot;Hook&quot;
773
- set _marks to every bookmark whose name contains searchString
774
- set _out to {}
775
- repeat with _hook in _marks
776
- set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
777
- end repeat
778
- set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
779
- set _output to _out as string
780
- set AppleScript&#39;s text item delimiters to astid
781
- return _output
782
- end tell
783
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
784
- <span class="ruby-keyword">end</span></pre>
785
- </div>
786
- </div>
787
-
788
-
789
- </div>
790
-
791
- <div id="method-i-search_path_or_address" class="method-detail ">
792
- <div class="method-heading">
793
- <span class="method-name">search_path_or_address</span><span
794
- class="method-args">(search)</span>
795
- <span class="method-click-advice">click to toggle source</span>
796
- </div>
797
-
798
- <div class="method-description">
799
- <p>Search bookmark paths and addresses. Return array of bookmark hashes.</p>
800
-
801
- <div class="method-source-code" id="search_path_or_address-source">
802
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 122</span>
803
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
804
- <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
805
- set searchString to &quot;#{search.strip}&quot;
806
- tell application &quot;Hook&quot;
807
- set _marks to every bookmark whose path contains searchString or address contains searchString
808
- set _out to {}
809
- repeat with _hook in _marks
810
- set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
811
- end repeat
812
- set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
813
- set _output to _out as string
814
- set AppleScript&#39;s text item delimiters to astid
815
- return _output
816
- end tell
817
- APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
818
- <span class="ruby-keyword">end</span></pre>
819
- </div>
820
- </div>
821
-
822
-
823
- </div>
824
-
825
- <div id="method-i-select_hook" class="method-detail ">
826
- <div class="method-heading">
827
- <span class="method-name">select_hook</span><span
828
- class="method-args">(marks)</span>
829
- <span class="method-click-advice">click to toggle source</span>
830
- </div>
831
-
832
- <div class="method-description">
833
- <p>Generate a menu of available hooks for selecting one or more hooks to operate on. Revamped to use `fzf`, which is embedded as `lib/helpers/fuzzyfilefinder` to avoid any conflicts. Allows multiple selections with tab key, and type-ahead fuzzy filtering of results.</p>
834
-
835
- <div class="method-source-code" id="select_hook-source">
836
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 198</span>
837
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">select_hook</span>(<span class="ruby-identifier">marks</span>)
838
- <span class="ruby-comment"># intpad = marks.length.to_s.length + 1</span>
839
- <span class="ruby-comment"># marks.each_with_index do |mark, i|</span>
840
- <span class="ruby-comment"># STDERR.printf &quot;%#{intpad}d) %s\n&quot;, i + 1, mark[:name]</span>
841
- <span class="ruby-comment"># end</span>
842
- <span class="ruby-comment"># STDERR.print &#39;Open which bookmark: &#39;</span>
843
- <span class="ruby-comment"># sel = STDIN.gets.strip.to_i</span>
844
- <span class="ruby-comment"># raise &#39;Invalid selection&#39; unless sel.positive? &amp;&amp; sel &lt;= marks.length</span>
845
-
846
- <span class="ruby-comment"># marks[sel - 1]</span>
847
-
848
- <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>
849
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
850
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
851
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
852
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
853
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
854
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
855
- <span class="ruby-keyword">else</span>
856
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
857
- <span class="ruby-keyword">end</span>
858
-
859
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
860
- <span class="ruby-identifier">loc</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>])
861
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
862
- <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>])
863
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
864
- <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>
865
- <span class="ruby-keyword">else</span>
866
- <span class="ruby-identifier">loc</span> = <span class="ruby-string">&quot;&quot;</span>
867
- <span class="ruby-keyword">end</span>
868
-
869
- <span class="ruby-node">&quot;#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}&quot;</span>
870
- }.<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> }
871
-
872
- <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>
873
-
874
- <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
875
- <span class="ruby-string">&#39;--header=&quot;esc: cancel, tab: multi-select, return: open &gt; &quot;&#39;</span>,
876
- <span class="ruby-string">&#39;--prompt=&quot; Select hooks &gt; &quot;&#39;</span>,
877
- <span class="ruby-string">&#39;--multi&#39;</span>,
878
- <span class="ruby-string">&#39;--tabstop=4&#39;</span>,
879
- <span class="ruby-string">&#39;--delimiter=&quot;\t&quot;&#39;</span>,
880
- <span class="ruby-string">&#39;--with-nth=1,4&#39;</span>,
881
- <span class="ruby-string">&#39;--height=60%&#39;</span>,
882
- <span class="ruby-string">&#39;--min-height=10&#39;</span>
883
- ]
884
-
885
- <span class="ruby-identifier">fzf</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-keyword">__FILE__</span>), <span class="ruby-string">&#39;../helpers/fuzzyfilefinder&#39;</span>)
886
-
887
- <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(options.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>
888
- <span class="ruby-identifier">res</span> = <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\n/</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
889
- <span class="ruby-identifier">ps</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\t/</span>)
890
- { <span class="ruby-value">name:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">0</span>], <span class="ruby-value">path:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">1</span>], <span class="ruby-value">url:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">2</span>] }
891
- }
892
-
893
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
894
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Cancelled (empty response)&#39;</span>
895
- <span class="ruby-keyword">end</span>
896
-
897
- <span class="ruby-identifier">res</span>
898
- <span class="ruby-keyword">end</span></pre>
899
- </div>
900
- </div>
901
-
902
-
903
- </div>
904
-
905
- <div id="method-i-validate_format" class="method-detail ">
906
- <div class="method-heading">
907
- <span class="method-name">validate_format</span><span
908
- class="method-args">(fmt, options)</span>
909
- <span class="method-click-advice">click to toggle source</span>
910
- </div>
911
-
912
- <div class="method-description">
913
- <p>Check if format fully matches or matches the first character of available options. Return full valid format or nil</p>
914
-
915
- <div class="method-source-code" id="validate_format-source">
916
- <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 18</span>
917
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_format</span>(<span class="ruby-identifier">fmt</span>, <span class="ruby-identifier">options</span>)
918
- <span class="ruby-identifier">valid_format_rx</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span> <span class="ruby-identifier">format</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*)$/</span>, <span class="ruby-string">&#39;^\1(\2)?$&#39;</span>) }
919
- <span class="ruby-identifier">valid_format</span> = <span class="ruby-keyword">nil</span>
920
- <span class="ruby-identifier">valid_format_rx</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rx</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
921
- <span class="ruby-identifier">cmp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rx</span>, <span class="ruby-string">&#39;i&#39;</span>)
922
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">fmt</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">cmp</span>
923
-
924
- <span class="ruby-identifier">valid_format</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">i</span>]
925
- <span class="ruby-keyword">break</span>
926
- <span class="ruby-keyword">end</span>
927
- <span class="ruby-identifier">valid_format</span>
928
- <span class="ruby-keyword">end</span></pre>
929
- </div>
930
- </div>
931
-
932
-
933
- </div>
934
-
935
- </section>
936
-
937
- </section>
938
- </main>
939
-
940
-
941
- <footer id="validator-badges" role="contentinfo">
942
- <p><a href="https://validator.w3.org/check/referer">Validate</a>
943
- <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.3.2.
944
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
945
- </footer>
946
-