hookapp 0.0.7 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/LICENSE.md +31 -0
- data/OVERVIEW.md +80 -0
- data/README.md +282 -21
- data/Rakefile +1 -1
- data/bin/hook +127 -10
- data/buildnotes.md +29 -0
- data/hook.rdoc +63 -4
- data/hookapp.gemspec +9 -8
- data/html/App.html +119 -0
- data/html/GLI.html +99 -0
- data/html/GLI/Commands.html +99 -0
- data/html/GLI/Commands/Doc.html +99 -0
- data/html/GLI/Commands/MarkdownDocumentListener.html +717 -0
- data/html/Hook.html +113 -0
- data/html/HookApp.html +1222 -0
- data/html/Hooker.html +119 -0
- data/html/README_rdoc.html +328 -0
- data/html/String.html +427 -0
- data/html/created.rid +9 -0
- data/html/css/fonts.css +167 -0
- data/html/css/rdoc.css +619 -0
- data/html/fonts/Lato-Light.ttf +0 -0
- data/html/fonts/Lato-LightItalic.ttf +0 -0
- data/html/fonts/Lato-Regular.ttf +0 -0
- data/html/fonts/Lato-RegularItalic.ttf +0 -0
- data/html/fonts/SourceCodePro-Bold.ttf +0 -0
- data/html/fonts/SourceCodePro-Regular.ttf +0 -0
- data/html/images/add.png +0 -0
- data/html/images/arrow_up.png +0 -0
- data/html/images/brick.png +0 -0
- data/html/images/brick_link.png +0 -0
- data/html/images/bug.png +0 -0
- data/html/images/bullet_black.png +0 -0
- data/html/images/bullet_toggle_minus.png +0 -0
- data/html/images/bullet_toggle_plus.png +0 -0
- data/html/images/date.png +0 -0
- data/html/images/delete.png +0 -0
- data/html/images/find.png +0 -0
- data/html/images/loadingAnimation.gif +0 -0
- data/html/images/macFFBgHack.png +0 -0
- data/html/images/package.png +0 -0
- data/html/images/page_green.png +0 -0
- data/html/images/page_white_text.png +0 -0
- data/html/images/page_white_width.png +0 -0
- data/html/images/plugin.png +0 -0
- data/html/images/ruby.png +0 -0
- data/html/images/tag_blue.png +0 -0
- data/html/images/tag_green.png +0 -0
- data/html/images/transparent.png +0 -0
- data/html/images/wrench.png +0 -0
- data/html/images/wrench_orange.png +0 -0
- data/html/images/zoom.png +0 -0
- data/html/index.html +308 -0
- data/html/js/darkfish.js +84 -0
- data/html/js/navigation.js +105 -0
- data/html/js/navigation.js.gz +0 -0
- data/html/js/search.js +110 -0
- data/html/js/search_index.js +1 -0
- data/html/js/search_index.js.gz +0 -0
- data/html/js/searcher.js +229 -0
- data/html/js/searcher.js.gz +0 -0
- data/html/table_of_contents.html +409 -0
- data/lib/completion/hook_completion.bash +22 -0
- data/lib/completion/hook_completion.fish +31 -0
- data/lib/completion/hook_completion.zsh +22 -0
- data/lib/helpers/fuzzyfilefinder +0 -0
- data/lib/hook.rb +5 -1
- data/lib/hook/hookapp.rb +489 -0
- data/lib/hook/hooker.rb +1 -344
- data/lib/hook/markdown_document_listener.rb +164 -0
- data/lib/hook/string.rb +60 -0
- data/lib/hook/version.rb +3 -1
- metadata +76 -12
data/html/Hook.html
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
|
7
|
+
<title>module Hook - 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
|
+
|
25
|
+
|
26
|
+
<body id="top" role="document" class="module">
|
27
|
+
<nav role="navigation">
|
28
|
+
<div id="project-navigation">
|
29
|
+
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
|
30
|
+
<h2>
|
31
|
+
<a href="./index.html" rel="home">Home</a>
|
32
|
+
</h2>
|
33
|
+
|
34
|
+
<div id="table-of-contents-navigation">
|
35
|
+
<a href="./table_of_contents.html#pages">Pages</a>
|
36
|
+
<a href="./table_of_contents.html#classes">Classes</a>
|
37
|
+
<a href="./table_of_contents.html#methods">Methods</a>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div id="search-section" role="search" class="project-section initially-hidden">
|
42
|
+
<form action="#" method="get" accept-charset="utf-8">
|
43
|
+
<div id="search-field-wrapper">
|
44
|
+
<input id="search-field" role="combobox" aria-label="Search"
|
45
|
+
aria-autocomplete="list" aria-controls="search-results"
|
46
|
+
type="text" name="search" placeholder="Search" spellcheck="false"
|
47
|
+
title="Type to search, Up and Down to navigate, Enter to load">
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<ul id="search-results" aria-label="Search Results"
|
51
|
+
aria-busy="false" aria-expanded="false"
|
52
|
+
aria-atomic="false" class="initially-hidden"></ul>
|
53
|
+
</form>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
</div>
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
<div id="class-metadata">
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</div>
|
67
|
+
</nav>
|
68
|
+
|
69
|
+
<main role="main" aria-labelledby="module-Hook">
|
70
|
+
<h1 id="module-Hook" class="module">
|
71
|
+
module Hook
|
72
|
+
</h1>
|
73
|
+
|
74
|
+
<section class="description">
|
75
|
+
|
76
|
+
</section>
|
77
|
+
|
78
|
+
|
79
|
+
<section id="5Buntitled-5D" class="documentation-section">
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
<section class="constants-list">
|
86
|
+
<header>
|
87
|
+
<h3>Constants</h3>
|
88
|
+
</header>
|
89
|
+
<dl>
|
90
|
+
|
91
|
+
<dt id="VERSION">VERSION
|
92
|
+
|
93
|
+
<dd>
|
94
|
+
|
95
|
+
|
96
|
+
</dl>
|
97
|
+
</section>
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
</section>
|
104
|
+
|
105
|
+
</main>
|
106
|
+
|
107
|
+
|
108
|
+
<footer id="validator-badges" role="contentinfo">
|
109
|
+
<p><a href="https://validator.w3.org/check/referer">Validate</a>
|
110
|
+
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.
|
111
|
+
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
112
|
+
</footer>
|
113
|
+
|
data/html/HookApp.html
ADDED
@@ -0,0 +1,1222 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
|
7
|
+
<title>module 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
|
+
|
25
|
+
|
26
|
+
<body id="top" role="document" class="module">
|
27
|
+
<nav role="navigation">
|
28
|
+
<div id="project-navigation">
|
29
|
+
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
|
30
|
+
<h2>
|
31
|
+
<a href="./index.html" rel="home">Home</a>
|
32
|
+
</h2>
|
33
|
+
|
34
|
+
<div id="table-of-contents-navigation">
|
35
|
+
<a href="./table_of_contents.html#pages">Pages</a>
|
36
|
+
<a href="./table_of_contents.html#classes">Classes</a>
|
37
|
+
<a href="./table_of_contents.html#methods">Methods</a>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div id="search-section" role="search" class="project-section initially-hidden">
|
42
|
+
<form action="#" method="get" accept-charset="utf-8">
|
43
|
+
<div id="search-field-wrapper">
|
44
|
+
<input id="search-field" role="combobox" aria-label="Search"
|
45
|
+
aria-autocomplete="list" aria-controls="search-results"
|
46
|
+
type="text" name="search" placeholder="Search" spellcheck="false"
|
47
|
+
title="Type to search, Up and Down to navigate, Enter to load">
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<ul id="search-results" aria-label="Search Results"
|
51
|
+
aria-busy="false" aria-expanded="false"
|
52
|
+
aria-atomic="false" class="initially-hidden"></ul>
|
53
|
+
</form>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
</div>
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
<div id="class-metadata">
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
<!-- Method Quickref -->
|
66
|
+
<div id="method-list-section" class="nav-section">
|
67
|
+
<h3>Methods</h3>
|
68
|
+
|
69
|
+
<ul class="link-list" role="directory">
|
70
|
+
|
71
|
+
<li ><a href="#method-i-all_bookmarks">#all_bookmarks</a>
|
72
|
+
|
73
|
+
<li ><a href="#method-i-bookmark_for">#bookmark_for</a>
|
74
|
+
|
75
|
+
<li ><a href="#method-i-bookmark_from_app">#bookmark_from_app</a>
|
76
|
+
|
77
|
+
<li ><a href="#method-i-clip_bookmark">#clip_bookmark</a>
|
78
|
+
|
79
|
+
<li ><a href="#method-i-clone_hooks">#clone_hooks</a>
|
80
|
+
|
81
|
+
<li ><a href="#method-i-copy_bookmark">#copy_bookmark</a>
|
82
|
+
|
83
|
+
<li ><a href="#method-i-delete_all_hooks">#delete_all_hooks</a>
|
84
|
+
|
85
|
+
<li ><a href="#method-i-delete_hooks">#delete_hooks</a>
|
86
|
+
|
87
|
+
<li ><a href="#method-i-format_regex">#format_regex</a>
|
88
|
+
|
89
|
+
<li ><a href="#method-i-get_hooks">#get_hooks</a>
|
90
|
+
|
91
|
+
<li ><a href="#method-i-link_all">#link_all</a>
|
92
|
+
|
93
|
+
<li ><a href="#method-i-link_files">#link_files</a>
|
94
|
+
|
95
|
+
<li ><a href="#method-i-linked_bookmarks">#linked_bookmarks</a>
|
96
|
+
|
97
|
+
<li ><a href="#method-i-open_gui">#open_gui</a>
|
98
|
+
|
99
|
+
<li ><a href="#method-i-open_linked">#open_linked</a>
|
100
|
+
|
101
|
+
<li ><a href="#method-i-output_array">#output_array</a>
|
102
|
+
|
103
|
+
<li ><a href="#method-i-search_bookmarks">#search_bookmarks</a>
|
104
|
+
|
105
|
+
<li ><a href="#method-i-search_name">#search_name</a>
|
106
|
+
|
107
|
+
<li ><a href="#method-i-search_path_or_address">#search_path_or_address</a>
|
108
|
+
|
109
|
+
<li ><a href="#method-i-select_hook">#select_hook</a>
|
110
|
+
|
111
|
+
<li ><a href="#method-i-validate_format">#validate_format</a>
|
112
|
+
|
113
|
+
</ul>
|
114
|
+
</div>
|
115
|
+
|
116
|
+
</div>
|
117
|
+
</nav>
|
118
|
+
|
119
|
+
<main role="main" aria-labelledby="module-HookApp">
|
120
|
+
<h1 id="module-HookApp" class="module">
|
121
|
+
module HookApp
|
122
|
+
</h1>
|
123
|
+
|
124
|
+
<section class="description">
|
125
|
+
|
126
|
+
<p>Hook.app functions</p>
|
127
|
+
|
128
|
+
</section>
|
129
|
+
|
130
|
+
|
131
|
+
<section id="5Buntitled-5D" class="documentation-section">
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
|
142
|
+
<header>
|
143
|
+
<h3>Public Instance Methods</h3>
|
144
|
+
</header>
|
145
|
+
|
146
|
+
|
147
|
+
<div id="method-i-all_bookmarks" class="method-detail ">
|
148
|
+
|
149
|
+
<div class="method-heading">
|
150
|
+
<span class="method-name">all_bookmarks</span><span
|
151
|
+
class="method-args">()</span>
|
152
|
+
|
153
|
+
<span class="method-click-advice">click to toggle source</span>
|
154
|
+
|
155
|
+
</div>
|
156
|
+
|
157
|
+
|
158
|
+
<div class="method-description">
|
159
|
+
|
160
|
+
<p>Get all known bookmarks. Return array of bookmark hashes.</p>
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
<div class="method-source-code" id="all_bookmarks-source">
|
166
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 140</span>
|
167
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">all_bookmarks</span>
|
168
|
+
<span class="ruby-string">`osascript <<'APPLESCRIPT'
|
169
|
+
tell application "Hook"
|
170
|
+
set _marks to every bookmark
|
171
|
+
set _out to {}
|
172
|
+
repeat with _hook in _marks
|
173
|
+
set _out to _out & (name of _hook & "||" & address of _hook & "||" & path of _hook)
|
174
|
+
end repeat
|
175
|
+
set {astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "^^"}
|
176
|
+
set _output to _out as string
|
177
|
+
set AppleScript's text item delimiters to astid
|
178
|
+
return _output
|
179
|
+
end tell
|
180
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
|
181
|
+
<span class="ruby-keyword">end</span></pre>
|
182
|
+
</div>
|
183
|
+
|
184
|
+
</div>
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
</div>
|
190
|
+
|
191
|
+
|
192
|
+
<div id="method-i-bookmark_for" class="method-detail ">
|
193
|
+
|
194
|
+
<div class="method-heading">
|
195
|
+
<span class="method-name">bookmark_for</span><span
|
196
|
+
class="method-args">(url)</span>
|
197
|
+
|
198
|
+
<span class="method-click-advice">click to toggle source</span>
|
199
|
+
|
200
|
+
</div>
|
201
|
+
|
202
|
+
|
203
|
+
<div class="method-description">
|
204
|
+
|
205
|
+
<p>Get a <a href="Hook.html"><code>Hook</code></a> bookmark for file or URL. Return bookmark hash.</p>
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
<div class="method-source-code" id="bookmark_for-source">
|
211
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 32</span>
|
212
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_for</span>(<span class="ruby-identifier">url</span>)
|
213
|
+
<span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
|
214
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid target: #{url}"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
|
215
|
+
|
216
|
+
<span class="ruby-keyword">begin</span>
|
217
|
+
<span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript <<'APPLESCRIPT'
|
218
|
+
tell application "Hook"
|
219
|
+
set _hook to make bookmark with data "#{url}"
|
220
|
+
if _hook is missing value
|
221
|
+
return ""
|
222
|
+
else
|
223
|
+
return name of _hook & "||" & address of _hook & "||" & path of _hook
|
224
|
+
end if
|
225
|
+
end tell
|
226
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
|
227
|
+
<span class="ruby-keyword">rescue</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">e</span>
|
228
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>
|
229
|
+
<span class="ruby-keyword">end</span>
|
230
|
+
|
231
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Error getting bookmark for #{url}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">empty?</span>
|
232
|
+
<span class="ruby-identifier">mark</span>.<span class="ruby-identifier">split_hook</span>
|
233
|
+
<span class="ruby-keyword">end</span></pre>
|
234
|
+
</div>
|
235
|
+
|
236
|
+
</div>
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
</div>
|
242
|
+
|
243
|
+
|
244
|
+
<div id="method-i-bookmark_from_app" class="method-detail ">
|
245
|
+
|
246
|
+
<div class="method-heading">
|
247
|
+
<span class="method-name">bookmark_from_app</span><span
|
248
|
+
class="method-args">(app, opts)</span>
|
249
|
+
|
250
|
+
<span class="method-click-advice">click to toggle source</span>
|
251
|
+
|
252
|
+
</div>
|
253
|
+
|
254
|
+
|
255
|
+
<div class="method-description">
|
256
|
+
|
257
|
+
<p>Get a bookmark from the foreground document of specified app.</p>
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
<div class="method-source-code" id="bookmark_from_app-source">
|
263
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 81</span>
|
264
|
+
<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>)
|
265
|
+
<span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript <<'APPLESCRIPT'
|
266
|
+
tell application "System Events" to set front_app to name of first application process whose frontmost is true
|
267
|
+
tell application "#{app}" to activate
|
268
|
+
delay 2
|
269
|
+
tell application "Hook"
|
270
|
+
set _hook to (bookmark from active window)
|
271
|
+
set _output to (name of _hook & "||" & address of _hook & "||" & path of _hook)
|
272
|
+
end tell
|
273
|
+
tell application front_app to activate
|
274
|
+
return _output
|
275
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hook</span>
|
276
|
+
<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">"#{app.cap} link"</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
|
277
|
+
<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">"[#{title}](#{mark[:url]})"</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
|
278
|
+
|
279
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:copy</span>]
|
280
|
+
<span class="ruby-node">"Copied Markdown link for '#{title}' to clipboard"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
|
281
|
+
<span class="ruby-keyword">else</span>
|
282
|
+
<span class="ruby-identifier">output</span>
|
283
|
+
<span class="ruby-keyword">end</span>
|
284
|
+
<span class="ruby-keyword">end</span></pre>
|
285
|
+
</div>
|
286
|
+
|
287
|
+
</div>
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
|
292
|
+
</div>
|
293
|
+
|
294
|
+
|
295
|
+
<div id="method-i-clip_bookmark" class="method-detail ">
|
296
|
+
|
297
|
+
<div class="method-heading">
|
298
|
+
<span class="method-name">clip_bookmark</span><span
|
299
|
+
class="method-args">(url, opts)</span>
|
300
|
+
|
301
|
+
<span class="method-click-advice">click to toggle source</span>
|
302
|
+
|
303
|
+
</div>
|
304
|
+
|
305
|
+
|
306
|
+
<div class="method-description">
|
307
|
+
|
308
|
+
<p>Create a bookmark for specified file/url and copy to the clipboard.</p>
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
<div class="method-source-code" id="clip_bookmark-source">
|
314
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 181</span>
|
315
|
+
<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>)
|
316
|
+
<span class="ruby-identifier">mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
|
317
|
+
<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>)
|
318
|
+
<span class="ruby-keyword">end</span></pre>
|
319
|
+
</div>
|
320
|
+
|
321
|
+
</div>
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
</div>
|
327
|
+
|
328
|
+
|
329
|
+
<div id="method-i-clone_hooks" class="method-detail ">
|
330
|
+
|
331
|
+
<div class="method-heading">
|
332
|
+
<span class="method-name">clone_hooks</span><span
|
333
|
+
class="method-args">(args)</span>
|
334
|
+
|
335
|
+
<span class="method-click-advice">click to toggle source</span>
|
336
|
+
|
337
|
+
</div>
|
338
|
+
|
339
|
+
|
340
|
+
<div class="method-description">
|
341
|
+
|
342
|
+
<p>Copy all hooks from source file to target file</p>
|
343
|
+
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
<div class="method-source-code" id="clone_hooks-source">
|
348
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 314</span>
|
349
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clone_hooks</span>(<span class="ruby-identifier">args</span>)
|
350
|
+
<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>
|
351
|
+
<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>
|
352
|
+
|
353
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">target</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">source</span>
|
354
|
+
<span class="ruby-identifier">hooks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">source</span>)
|
355
|
+
<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>
|
356
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
357
|
+
tell application "Hook"
|
358
|
+
set _mark1 to make bookmark with data "#{hook[:url]}"
|
359
|
+
set _mark2 to make bookmark with data "#{target}"
|
360
|
+
hook _mark1 and _mark2
|
361
|
+
return true
|
362
|
+
end tell
|
363
|
+
APPLESCRIPT`</span>
|
364
|
+
<span class="ruby-keyword">end</span>
|
365
|
+
<span class="ruby-node">"Hooks from #{source} cloned to #{target}"</span>
|
366
|
+
<span class="ruby-keyword">else</span>
|
367
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-string">'Invalid file specified'</span>
|
368
|
+
<span class="ruby-keyword">end</span>
|
369
|
+
<span class="ruby-keyword">end</span></pre>
|
370
|
+
</div>
|
371
|
+
|
372
|
+
</div>
|
373
|
+
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
</div>
|
378
|
+
|
379
|
+
|
380
|
+
<div id="method-i-copy_bookmark" class="method-detail ">
|
381
|
+
|
382
|
+
<div class="method-heading">
|
383
|
+
<span class="method-name">copy_bookmark</span><span
|
384
|
+
class="method-args">(title, url, opts)</span>
|
385
|
+
|
386
|
+
<span class="method-click-advice">click to toggle source</span>
|
387
|
+
|
388
|
+
</div>
|
389
|
+
|
390
|
+
|
391
|
+
<div class="method-description">
|
392
|
+
|
393
|
+
<p>Create a bookmark from specified title and url and copy to the clipboard.</p>
|
394
|
+
|
395
|
+
|
396
|
+
|
397
|
+
|
398
|
+
<div class="method-source-code" id="copy_bookmark-source">
|
399
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 187</span>
|
400
|
+
<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>)
|
401
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-string">"No URL found"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">empty?</span>
|
402
|
+
<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">'No title'</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">title</span>
|
403
|
+
<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">"[#{title}](#{url})"</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">url</span>
|
404
|
+
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
|
405
|
+
<span class="ruby-node">%(Copied #{opts[:markdown] ? 'Markdown link' : 'Hook URL'} for '#{title}' to clipboard)</span>
|
406
|
+
<span class="ruby-keyword">end</span></pre>
|
407
|
+
</div>
|
408
|
+
|
409
|
+
</div>
|
410
|
+
|
411
|
+
|
412
|
+
|
413
|
+
|
414
|
+
</div>
|
415
|
+
|
416
|
+
|
417
|
+
<div id="method-i-delete_all_hooks" class="method-detail ">
|
418
|
+
|
419
|
+
<div class="method-heading">
|
420
|
+
<span class="method-name">delete_all_hooks</span><span
|
421
|
+
class="method-args">(url)</span>
|
422
|
+
|
423
|
+
<span class="method-click-advice">click to toggle source</span>
|
424
|
+
|
425
|
+
</div>
|
426
|
+
|
427
|
+
|
428
|
+
<div class="method-description">
|
429
|
+
|
430
|
+
<p>Delete all hooked files/urls from target file</p>
|
431
|
+
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
<div class="method-source-code" id="delete_all_hooks-source">
|
436
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 337</span>
|
437
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_all_hooks</span>(<span class="ruby-identifier">url</span>)
|
438
|
+
<span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">print</span> <span class="ruby-node">"Are you sure you want to delete ALL hooks from #{url} (y/N)? "</span>
|
439
|
+
<span class="ruby-identifier">res</span> = <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">strip</span>
|
440
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^y/i</span>
|
441
|
+
<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>
|
442
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
443
|
+
tell application "Hook"
|
444
|
+
set _mark1 to make bookmark with data "#{hook[:url]}"
|
445
|
+
set _mark2 to make bookmark with data "#{url}"
|
446
|
+
unhook _mark1 and _mark2
|
447
|
+
return true
|
448
|
+
end tell
|
449
|
+
APPLESCRIPT`</span>
|
450
|
+
<span class="ruby-keyword">end</span>
|
451
|
+
<span class="ruby-node">"Removed all hooks from #{url}"</span>
|
452
|
+
<span class="ruby-keyword">end</span>
|
453
|
+
<span class="ruby-keyword">end</span></pre>
|
454
|
+
</div>
|
455
|
+
|
456
|
+
</div>
|
457
|
+
|
458
|
+
|
459
|
+
|
460
|
+
|
461
|
+
</div>
|
462
|
+
|
463
|
+
|
464
|
+
<div id="method-i-delete_hooks" class="method-detail ">
|
465
|
+
|
466
|
+
<div class="method-heading">
|
467
|
+
<span class="method-name">delete_hooks</span><span
|
468
|
+
class="method-args">(args, opts)</span>
|
469
|
+
|
470
|
+
<span class="method-click-advice">click to toggle source</span>
|
471
|
+
|
472
|
+
</div>
|
473
|
+
|
474
|
+
|
475
|
+
<div class="method-description">
|
476
|
+
|
477
|
+
<p>Delete hooks between two files/urls</p>
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
|
482
|
+
<div class="method-source-code" id="delete_hooks-source">
|
483
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 356</span>
|
484
|
+
<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>)
|
485
|
+
<span class="ruby-identifier">urls</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&</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> }
|
486
|
+
<span class="ruby-identifier">output</span> = []
|
487
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:all</span>]
|
488
|
+
<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>
|
489
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid target: #{args[i]}"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
|
490
|
+
|
491
|
+
<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>))
|
492
|
+
<span class="ruby-keyword">end</span>
|
493
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">"\n"</span>)
|
494
|
+
<span class="ruby-keyword">end</span>
|
495
|
+
|
496
|
+
<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>
|
497
|
+
<span class="ruby-identifier">source</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">0</span>]
|
498
|
+
<span class="ruby-identifier">target</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">1</span>]
|
499
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
500
|
+
tell application "Hook"
|
501
|
+
set _mark1 to make bookmark with data "#{source}"
|
502
|
+
set _mark2 to make bookmark with data "#{target}"
|
503
|
+
unhook _mark1 and _mark2
|
504
|
+
return true
|
505
|
+
end tell
|
506
|
+
APPLESCRIPT`</span>
|
507
|
+
<span class="ruby-node">"Hook removed between #{source} and #{target}"</span>
|
508
|
+
<span class="ruby-keyword">else</span>
|
509
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-string">'Invalid number of URLs or files specified'</span>
|
510
|
+
<span class="ruby-keyword">end</span>
|
511
|
+
<span class="ruby-keyword">end</span></pre>
|
512
|
+
</div>
|
513
|
+
|
514
|
+
</div>
|
515
|
+
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+
</div>
|
520
|
+
|
521
|
+
|
522
|
+
<div id="method-i-format_regex" class="method-detail ">
|
523
|
+
|
524
|
+
<div class="method-heading">
|
525
|
+
<span class="method-name">format_regex</span><span
|
526
|
+
class="method-args">(options)</span>
|
527
|
+
|
528
|
+
<span class="method-click-advice">click to toggle source</span>
|
529
|
+
|
530
|
+
</div>
|
531
|
+
|
532
|
+
|
533
|
+
<div class="method-description">
|
534
|
+
|
535
|
+
<p>Create a single regex for validation of an array by first char or full match.</p>
|
536
|
+
|
537
|
+
|
538
|
+
|
539
|
+
|
540
|
+
<div class="method-source-code" id="format_regex-source">
|
541
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 9</span>
|
542
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">format_regex</span>(<span class="ruby-identifier">options</span>)
|
543
|
+
<span class="ruby-identifier">fmt_rx_array</span> = []
|
544
|
+
<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">'\1(\2)?'</span>)) }
|
545
|
+
<span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"^(#{fmt_rx_array.join('|')})$"</span>,<span class="ruby-string">'i'</span>)
|
546
|
+
<span class="ruby-keyword">end</span></pre>
|
547
|
+
</div>
|
548
|
+
|
549
|
+
</div>
|
550
|
+
|
551
|
+
|
552
|
+
|
553
|
+
|
554
|
+
</div>
|
555
|
+
|
556
|
+
|
557
|
+
<div id="method-i-get_hooks" class="method-detail ">
|
558
|
+
|
559
|
+
<div class="method-heading">
|
560
|
+
<span class="method-name">get_hooks</span><span
|
561
|
+
class="method-args">(url)</span>
|
562
|
+
|
563
|
+
<span class="method-click-advice">click to toggle source</span>
|
564
|
+
|
565
|
+
</div>
|
566
|
+
|
567
|
+
|
568
|
+
<div class="method-description">
|
569
|
+
|
570
|
+
<p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.</p>
|
571
|
+
|
572
|
+
|
573
|
+
|
574
|
+
|
575
|
+
<div class="method-source-code" id="get_hooks-source">
|
576
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 56</span>
|
577
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_hooks</span>(<span class="ruby-identifier">url</span>)
|
578
|
+
<span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
|
579
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid target: #{url}"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
|
580
|
+
|
581
|
+
<span class="ruby-identifier">hooks</span> = <span class="ruby-node">`osascript <<'APPLESCRIPT'
|
582
|
+
tell application "Hook"
|
583
|
+
set _mark to make bookmark with data "#{url}"
|
584
|
+
if _mark is missing value
|
585
|
+
return ""
|
586
|
+
end if
|
587
|
+
set _hooks to hooked bookmarks of _mark
|
588
|
+
set _out to {}
|
589
|
+
repeat with _hook in _hooks
|
590
|
+
set _out to _out & (name of _hook & "||" & address of _hook & "||" & path of _hook)
|
591
|
+
end repeat
|
592
|
+
set {astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "^^"}
|
593
|
+
set _output to _out as string
|
594
|
+
set AppleScript's text item delimiters to astid
|
595
|
+
return _output
|
596
|
+
end tell
|
597
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
|
598
|
+
<span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">split_hooks</span>
|
599
|
+
<span class="ruby-keyword">end</span></pre>
|
600
|
+
</div>
|
601
|
+
|
602
|
+
</div>
|
603
|
+
|
604
|
+
|
605
|
+
|
606
|
+
|
607
|
+
</div>
|
608
|
+
|
609
|
+
|
610
|
+
<div id="method-i-link_all" class="method-detail ">
|
611
|
+
|
612
|
+
<div class="method-heading">
|
613
|
+
<span class="method-name">link_all</span><span
|
614
|
+
class="method-args">(args)</span>
|
615
|
+
|
616
|
+
<span class="method-click-advice">click to toggle source</span>
|
617
|
+
|
618
|
+
</div>
|
619
|
+
|
620
|
+
|
621
|
+
<div class="method-description">
|
622
|
+
|
623
|
+
<p>Create bi-directional links between every file/url in the list of arguments</p>
|
624
|
+
|
625
|
+
|
626
|
+
|
627
|
+
|
628
|
+
<div class="method-source-code" id="link_all-source">
|
629
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 386</span>
|
630
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_all</span>(<span class="ruby-identifier">args</span>)
|
631
|
+
<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>
|
632
|
+
<span class="ruby-identifier">source</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook</span>
|
633
|
+
<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">&</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> }
|
634
|
+
<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>
|
635
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
636
|
+
tell application "Hook"
|
637
|
+
set _mark1 to make bookmark with data "#{source}"
|
638
|
+
set _mark2 to make bookmark with data "#{url}"
|
639
|
+
hook _mark1 and _mark2
|
640
|
+
return true
|
641
|
+
end tell
|
642
|
+
APPLESCRIPT`</span>
|
643
|
+
<span class="ruby-keyword">end</span>
|
644
|
+
<span class="ruby-keyword">end</span>
|
645
|
+
<span class="ruby-node">"Linked #{args.length} files to each other"</span>
|
646
|
+
<span class="ruby-keyword">end</span></pre>
|
647
|
+
</div>
|
648
|
+
|
649
|
+
</div>
|
650
|
+
|
651
|
+
|
652
|
+
|
653
|
+
|
654
|
+
</div>
|
655
|
+
|
656
|
+
|
657
|
+
<div id="method-i-link_files" class="method-detail ">
|
658
|
+
|
659
|
+
<div class="method-heading">
|
660
|
+
<span class="method-name">link_files</span><span
|
661
|
+
class="method-args">(args)</span>
|
662
|
+
|
663
|
+
<span class="method-click-advice">click to toggle source</span>
|
664
|
+
|
665
|
+
</div>
|
666
|
+
|
667
|
+
|
668
|
+
<div class="method-description">
|
669
|
+
|
670
|
+
<p>Link 2 or more files/urls with bi-directional hooks.</p>
|
671
|
+
|
672
|
+
|
673
|
+
|
674
|
+
|
675
|
+
<div class="method-source-code" id="link_files-source">
|
676
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 291</span>
|
677
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_files</span>(<span class="ruby-identifier">args</span>)
|
678
|
+
<span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>
|
679
|
+
<span class="ruby-identifier">target</span>.<span class="ruby-identifier">valid_hook!</span>
|
680
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid target: #{target}"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">target</span>
|
681
|
+
|
682
|
+
<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>
|
683
|
+
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook!</span>
|
684
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid target: #{file}"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">file</span>
|
685
|
+
|
686
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Linking #{file} and #{target}..."</span>
|
687
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
688
|
+
tell application "Hook"
|
689
|
+
set _mark1 to make bookmark with data "#{file}"
|
690
|
+
set _mark2 to make bookmark with data "#{target}"
|
691
|
+
hook _mark1 and _mark2
|
692
|
+
return true
|
693
|
+
end tell
|
694
|
+
APPLESCRIPT`</span>
|
695
|
+
<span class="ruby-keyword">end</span>
|
696
|
+
<span class="ruby-node">"Linked #{args.length} files to #{target}"</span>
|
697
|
+
<span class="ruby-keyword">end</span></pre>
|
698
|
+
</div>
|
699
|
+
|
700
|
+
</div>
|
701
|
+
|
702
|
+
|
703
|
+
|
704
|
+
|
705
|
+
</div>
|
706
|
+
|
707
|
+
|
708
|
+
<div id="method-i-linked_bookmarks" class="method-detail ">
|
709
|
+
|
710
|
+
<div class="method-heading">
|
711
|
+
<span class="method-name">linked_bookmarks</span><span
|
712
|
+
class="method-args">(args, opts)</span>
|
713
|
+
|
714
|
+
<span class="method-click-advice">click to toggle source</span>
|
715
|
+
|
716
|
+
</div>
|
717
|
+
|
718
|
+
|
719
|
+
<div class="method-description">
|
720
|
+
|
721
|
+
<p>Get a list of all hooks on a file/url.</p>
|
722
|
+
|
723
|
+
|
724
|
+
|
725
|
+
|
726
|
+
<div class="method-source-code" id="linked_bookmarks-source">
|
727
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 405</span>
|
728
|
+
<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>)
|
729
|
+
<span class="ruby-identifier">result</span> = []
|
730
|
+
|
731
|
+
<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">&&</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'paths'</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">"\0"</span> <span class="ruby-operator">:</span> <span class="ruby-string">"\n"</span>
|
732
|
+
|
733
|
+
<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>
|
734
|
+
<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>)
|
735
|
+
<span class="ruby-keyword">else</span>
|
736
|
+
<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>
|
737
|
+
<span class="ruby-identifier">source_mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
|
738
|
+
<span class="ruby-identifier">filename</span> = <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:name</span>]
|
739
|
+
|
740
|
+
<span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
|
741
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
|
742
|
+
<span class="ruby-identifier">filename</span> = <span class="ruby-node">"[#{source_mark[:name]}](#{source_mark[:url]})"</span>
|
743
|
+
<span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">" <file://#{CGI.escape(source_mark[:path])}>"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
|
744
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
|
745
|
+
<span class="ruby-identifier">filename</span> = <span class="ruby-node">"File: #{source_mark[:name]}"</span>
|
746
|
+
<span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">" (#{source_mark[:path]})"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
|
747
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
|
748
|
+
<span class="ruby-identifier">filename</span> = <span class="ruby-node">"File: #{source_mark[:name]}"</span>
|
749
|
+
<span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">" (#{source_mark[:url]})"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:url</span>]
|
750
|
+
<span class="ruby-keyword">else</span>
|
751
|
+
<span class="ruby-identifier">filename</span> = <span class="ruby-node">"Bookmarks attached to #{source_mark[:path] || source_mark[:url]}"</span>
|
752
|
+
<span class="ruby-keyword">end</span>
|
753
|
+
|
754
|
+
<span class="ruby-identifier">hooks_arr</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
|
755
|
+
|
756
|
+
<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>)
|
757
|
+
<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>) })
|
758
|
+
<span class="ruby-keyword">end</span>
|
759
|
+
|
760
|
+
|
761
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></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">'verbose'</span>
|
762
|
+
<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>
|
763
|
+
<span class="ruby-node">"#{res[:file]}\n\n#{res[:links]}\n"</span>
|
764
|
+
<span class="ruby-keyword">end</span>
|
765
|
+
<span class="ruby-keyword">else</span>
|
766
|
+
<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>
|
767
|
+
<span class="ruby-identifier">res</span>[<span class="ruby-value">:links</span>]
|
768
|
+
<span class="ruby-keyword">end</span>
|
769
|
+
<span class="ruby-keyword">end</span>
|
770
|
+
<span class="ruby-keyword">end</span>
|
771
|
+
<span class="ruby-identifier">result</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
|
772
|
+
<span class="ruby-keyword">end</span></pre>
|
773
|
+
</div>
|
774
|
+
|
775
|
+
</div>
|
776
|
+
|
777
|
+
|
778
|
+
|
779
|
+
|
780
|
+
</div>
|
781
|
+
|
782
|
+
|
783
|
+
<div id="method-i-open_gui" class="method-detail ">
|
784
|
+
|
785
|
+
<div class="method-heading">
|
786
|
+
<span class="method-name">open_gui</span><span
|
787
|
+
class="method-args">(url)</span>
|
788
|
+
|
789
|
+
<span class="method-click-advice">click to toggle source</span>
|
790
|
+
|
791
|
+
</div>
|
792
|
+
|
793
|
+
|
794
|
+
<div class="method-description">
|
795
|
+
|
796
|
+
<p>Open the <a href="Hook.html"><code>Hook</code></a> GUI for browsing/performing actions on a file or url</p>
|
797
|
+
|
798
|
+
|
799
|
+
|
800
|
+
|
801
|
+
<div class="method-source-code" id="open_gui-source">
|
802
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 262</span>
|
803
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_gui</span>(<span class="ruby-identifier">url</span>)
|
804
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript <<'APPLESCRIPT'
|
805
|
+
tell application "Hook"
|
806
|
+
set _mark to make bookmark with data "#{url.valid_hook}"
|
807
|
+
if _mark is missing value
|
808
|
+
return "Failed to create bookmark for #{url}"
|
809
|
+
else
|
810
|
+
invoke on _mark
|
811
|
+
return ""
|
812
|
+
end if
|
813
|
+
end tell
|
814
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
|
815
|
+
<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>
|
816
|
+
<span class="ruby-keyword">end</span></pre>
|
817
|
+
</div>
|
818
|
+
|
819
|
+
</div>
|
820
|
+
|
821
|
+
|
822
|
+
|
823
|
+
|
824
|
+
</div>
|
825
|
+
|
826
|
+
|
827
|
+
<div id="method-i-open_linked" class="method-detail ">
|
828
|
+
|
829
|
+
<div class="method-heading">
|
830
|
+
<span class="method-name">open_linked</span><span
|
831
|
+
class="method-args">(url)</span>
|
832
|
+
|
833
|
+
<span class="method-click-advice">click to toggle source</span>
|
834
|
+
|
835
|
+
</div>
|
836
|
+
|
837
|
+
|
838
|
+
<div class="method-description">
|
839
|
+
|
840
|
+
<p>Select from a menu of available hooks and open using macOS `open`.</p>
|
841
|
+
|
842
|
+
|
843
|
+
|
844
|
+
|
845
|
+
<div class="method-source-code" id="open_linked-source">
|
846
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 278</span>
|
847
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_linked</span>(<span class="ruby-identifier">url</span>)
|
848
|
+
<span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
|
849
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
|
850
|
+
<span class="ruby-identifier">warn</span> <span class="ruby-node">"No hooks found for #{url}"</span>
|
851
|
+
<span class="ruby-keyword">else</span>
|
852
|
+
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
|
853
|
+
<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>
|
854
|
+
<span class="ruby-node">`open '#{mark[:url]}'`</span>
|
855
|
+
}
|
856
|
+
<span class="ruby-keyword">end</span>
|
857
|
+
<span class="ruby-keyword">end</span></pre>
|
858
|
+
</div>
|
859
|
+
|
860
|
+
</div>
|
861
|
+
|
862
|
+
|
863
|
+
|
864
|
+
|
865
|
+
</div>
|
866
|
+
|
867
|
+
|
868
|
+
<div id="method-i-output_array" class="method-detail ">
|
869
|
+
|
870
|
+
<div class="method-heading">
|
871
|
+
<span class="method-name">output_array</span><span
|
872
|
+
class="method-args">(hooks_arr, opts)</span>
|
873
|
+
|
874
|
+
<span class="method-click-advice">click to toggle source</span>
|
875
|
+
|
876
|
+
</div>
|
877
|
+
|
878
|
+
|
879
|
+
<div class="method-description">
|
880
|
+
|
881
|
+
<p>Output an array of hooks in the given format.</p>
|
882
|
+
|
883
|
+
|
884
|
+
|
885
|
+
|
886
|
+
<div class="method-source-code" id="output_array-source">
|
887
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 452</span>
|
888
|
+
<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>)
|
889
|
+
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">empty?</span>
|
890
|
+
<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">''</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:files_only</span>]
|
891
|
+
|
892
|
+
<span class="ruby-identifier">output</span> = []
|
893
|
+
|
894
|
+
<span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
|
895
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
|
896
|
+
<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>
|
897
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span>
|
898
|
+
<span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>]
|
899
|
+
<span class="ruby-keyword">else</span>
|
900
|
+
<span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>]
|
901
|
+
<span class="ruby-keyword">end</span>
|
902
|
+
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">"- [#{title}](#{h[:url]})"</span>)
|
903
|
+
<span class="ruby-keyword">end</span>
|
904
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
|
905
|
+
<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>
|
906
|
+
<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>])
|
907
|
+
<span class="ruby-keyword">end</span>
|
908
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
|
909
|
+
<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>
|
910
|
+
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>])
|
911
|
+
<span class="ruby-keyword">end</span>
|
912
|
+
<span class="ruby-keyword">else</span>
|
913
|
+
<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>
|
914
|
+
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">"Title: #{h[:name]}\nPath: #{h[:path]}\nAddress: #{h[:url]}\n---------------------"</span>)
|
915
|
+
<span class="ruby-keyword">end</span>
|
916
|
+
<span class="ruby-keyword">end</span>
|
917
|
+
<span class="ruby-keyword">else</span>
|
918
|
+
<span class="ruby-identifier">output</span> = [<span class="ruby-string">'No bookmarks'</span>]
|
919
|
+
<span class="ruby-keyword">end</span>
|
920
|
+
|
921
|
+
<span class="ruby-identifier">output</span>
|
922
|
+
<span class="ruby-keyword">end</span></pre>
|
923
|
+
</div>
|
924
|
+
|
925
|
+
</div>
|
926
|
+
|
927
|
+
|
928
|
+
|
929
|
+
|
930
|
+
</div>
|
931
|
+
|
932
|
+
|
933
|
+
<div id="method-i-search_bookmarks" class="method-detail ">
|
934
|
+
|
935
|
+
<div class="method-heading">
|
936
|
+
<span class="method-name">search_bookmarks</span><span
|
937
|
+
class="method-args">(search, opts)</span>
|
938
|
+
|
939
|
+
<span class="method-click-advice">click to toggle source</span>
|
940
|
+
|
941
|
+
</div>
|
942
|
+
|
943
|
+
|
944
|
+
<div class="method-description">
|
945
|
+
|
946
|
+
<p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return results as formatted list.</p>
|
947
|
+
|
948
|
+
|
949
|
+
|
950
|
+
|
951
|
+
<div class="method-source-code" id="search_bookmarks-source">
|
952
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 158</span>
|
953
|
+
<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>)
|
954
|
+
<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>
|
955
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">search_name</span>(<span class="ruby-identifier">search</span>)
|
956
|
+
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:names_only</span>]
|
957
|
+
<span class="ruby-identifier">more_results</span> = <span class="ruby-identifier">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
|
958
|
+
<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>
|
959
|
+
<span class="ruby-keyword">end</span>
|
960
|
+
<span class="ruby-keyword">else</span>
|
961
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">all_bookmarks</span>
|
962
|
+
<span class="ruby-keyword">end</span>
|
963
|
+
|
964
|
+
<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">'paths'</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">"\0"</span> <span class="ruby-operator">:</span> <span class="ruby-string">"\n"</span>
|
965
|
+
|
966
|
+
<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>)
|
967
|
+
|
968
|
+
<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>
|
969
|
+
<span class="ruby-node">"Search results for: #{search}\n---------\n"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">"\n"</span>)
|
970
|
+
<span class="ruby-keyword">else</span>
|
971
|
+
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
|
972
|
+
<span class="ruby-keyword">end</span>
|
973
|
+
<span class="ruby-keyword">end</span></pre>
|
974
|
+
</div>
|
975
|
+
|
976
|
+
</div>
|
977
|
+
|
978
|
+
|
979
|
+
|
980
|
+
|
981
|
+
</div>
|
982
|
+
|
983
|
+
|
984
|
+
<div id="method-i-search_name" class="method-detail ">
|
985
|
+
|
986
|
+
<div class="method-heading">
|
987
|
+
<span class="method-name">search_name</span><span
|
988
|
+
class="method-args">(search)</span>
|
989
|
+
|
990
|
+
<span class="method-click-advice">click to toggle source</span>
|
991
|
+
|
992
|
+
</div>
|
993
|
+
|
994
|
+
|
995
|
+
<div class="method-description">
|
996
|
+
|
997
|
+
<p>Search boomark names/titles. Return array of bookmark hashes.</p>
|
998
|
+
|
999
|
+
|
1000
|
+
|
1001
|
+
|
1002
|
+
<div class="method-source-code" id="search_name-source">
|
1003
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 104</span>
|
1004
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_name</span>(<span class="ruby-identifier">search</span>)
|
1005
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
1006
|
+
set searchString to "#{search.strip}"
|
1007
|
+
tell application "Hook"
|
1008
|
+
set _marks to every bookmark whose name contains searchString
|
1009
|
+
set _out to {}
|
1010
|
+
repeat with _hook in _marks
|
1011
|
+
set _out to _out & (name of _hook & "||" & address of _hook & "||" & path of _hook)
|
1012
|
+
end repeat
|
1013
|
+
set {astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "^^"}
|
1014
|
+
set _output to _out as string
|
1015
|
+
set AppleScript's text item delimiters to astid
|
1016
|
+
return _output
|
1017
|
+
end tell
|
1018
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
|
1019
|
+
<span class="ruby-keyword">end</span></pre>
|
1020
|
+
</div>
|
1021
|
+
|
1022
|
+
</div>
|
1023
|
+
|
1024
|
+
|
1025
|
+
|
1026
|
+
|
1027
|
+
</div>
|
1028
|
+
|
1029
|
+
|
1030
|
+
<div id="method-i-search_path_or_address" class="method-detail ">
|
1031
|
+
|
1032
|
+
<div class="method-heading">
|
1033
|
+
<span class="method-name">search_path_or_address</span><span
|
1034
|
+
class="method-args">(search)</span>
|
1035
|
+
|
1036
|
+
<span class="method-click-advice">click to toggle source</span>
|
1037
|
+
|
1038
|
+
</div>
|
1039
|
+
|
1040
|
+
|
1041
|
+
<div class="method-description">
|
1042
|
+
|
1043
|
+
<p>Search bookmark paths and addresses. Return array of bookmark hashes.</p>
|
1044
|
+
|
1045
|
+
|
1046
|
+
|
1047
|
+
|
1048
|
+
<div class="method-source-code" id="search_path_or_address-source">
|
1049
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 122</span>
|
1050
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
|
1051
|
+
<span class="ruby-node">`osascript <<'APPLESCRIPT'
|
1052
|
+
set searchString to "#{search.strip}"
|
1053
|
+
tell application "Hook"
|
1054
|
+
set _marks to every bookmark whose path contains searchString or address contains searchString
|
1055
|
+
set _out to {}
|
1056
|
+
repeat with _hook in _marks
|
1057
|
+
set _out to _out & (name of _hook & "||" & address of _hook & "||" & path of _hook)
|
1058
|
+
end repeat
|
1059
|
+
set {astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "^^"}
|
1060
|
+
set _output to _out as string
|
1061
|
+
set AppleScript's text item delimiters to astid
|
1062
|
+
return _output
|
1063
|
+
end tell
|
1064
|
+
APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
|
1065
|
+
<span class="ruby-keyword">end</span></pre>
|
1066
|
+
</div>
|
1067
|
+
|
1068
|
+
</div>
|
1069
|
+
|
1070
|
+
|
1071
|
+
|
1072
|
+
|
1073
|
+
</div>
|
1074
|
+
|
1075
|
+
|
1076
|
+
<div id="method-i-select_hook" class="method-detail ">
|
1077
|
+
|
1078
|
+
<div class="method-heading">
|
1079
|
+
<span class="method-name">select_hook</span><span
|
1080
|
+
class="method-args">(marks)</span>
|
1081
|
+
|
1082
|
+
<span class="method-click-advice">click to toggle source</span>
|
1083
|
+
|
1084
|
+
</div>
|
1085
|
+
|
1086
|
+
|
1087
|
+
<div class="method-description">
|
1088
|
+
|
1089
|
+
<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>
|
1090
|
+
|
1091
|
+
|
1092
|
+
|
1093
|
+
|
1094
|
+
<div class="method-source-code" id="select_hook-source">
|
1095
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 198</span>
|
1096
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">select_hook</span>(<span class="ruby-identifier">marks</span>)
|
1097
|
+
<span class="ruby-comment"># intpad = marks.length.to_s.length + 1</span>
|
1098
|
+
<span class="ruby-comment"># marks.each_with_index do |mark, i|</span>
|
1099
|
+
<span class="ruby-comment"># STDERR.printf "%#{intpad}d) %s\n", i + 1, mark[:name]</span>
|
1100
|
+
<span class="ruby-comment"># end</span>
|
1101
|
+
<span class="ruby-comment"># STDERR.print 'Open which bookmark: '</span>
|
1102
|
+
<span class="ruby-comment"># sel = STDIN.gets.strip.to_i</span>
|
1103
|
+
<span class="ruby-comment"># raise 'Invalid selection' unless sel.positive? && sel <= marks.length</span>
|
1104
|
+
|
1105
|
+
<span class="ruby-comment"># marks[sel - 1]</span>
|
1106
|
+
|
1107
|
+
<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>
|
1108
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
|
1109
|
+
<span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
|
1110
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
|
1111
|
+
<span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
|
1112
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
|
1113
|
+
<span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
|
1114
|
+
<span class="ruby-keyword">else</span>
|
1115
|
+
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
|
1116
|
+
<span class="ruby-keyword">end</span>
|
1117
|
+
|
1118
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
|
1119
|
+
<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>])
|
1120
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
|
1121
|
+
<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>])
|
1122
|
+
<span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
|
1123
|
+
<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">" - "</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>
|
1124
|
+
<span class="ruby-keyword">else</span>
|
1125
|
+
<span class="ruby-identifier">loc</span> = <span class="ruby-string">""</span>
|
1126
|
+
<span class="ruby-keyword">end</span>
|
1127
|
+
|
1128
|
+
<span class="ruby-node">"#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}"</span>
|
1129
|
+
}.<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> }
|
1130
|
+
|
1131
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-string">"Error processing available hooks"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">empty?</span>
|
1132
|
+
|
1133
|
+
<span class="ruby-identifier">args</span> = [<span class="ruby-string">'--layout=reverse-list'</span>,
|
1134
|
+
<span class="ruby-string">'--header="esc: cancel, tab: multi-select, return: open > "'</span>,
|
1135
|
+
<span class="ruby-string">'--prompt=" Select hooks > "'</span>,
|
1136
|
+
<span class="ruby-string">'--multi'</span>,
|
1137
|
+
<span class="ruby-string">'--tabstop=4'</span>,
|
1138
|
+
<span class="ruby-string">'--delimiter="\t"'</span>,
|
1139
|
+
<span class="ruby-string">'--with-nth=1,4'</span>,
|
1140
|
+
<span class="ruby-string">'--height=60%'</span>,
|
1141
|
+
<span class="ruby-string">'--min-height=10'</span>
|
1142
|
+
]
|
1143
|
+
|
1144
|
+
<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">'../helpers/fuzzyfilefinder'</span>)
|
1145
|
+
|
1146
|
+
<span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(options.join("\n"))} | '#{fzf}' #{args.join(' ')}`</span>.<span class="ruby-identifier">chomp</span>
|
1147
|
+
<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>
|
1148
|
+
<span class="ruby-identifier">ps</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\t/</span>)
|
1149
|
+
{ <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>] }
|
1150
|
+
}
|
1151
|
+
|
1152
|
+
<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>
|
1153
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-string">'Cancelled (empty response)'</span>
|
1154
|
+
<span class="ruby-keyword">end</span>
|
1155
|
+
|
1156
|
+
<span class="ruby-identifier">res</span>
|
1157
|
+
<span class="ruby-keyword">end</span></pre>
|
1158
|
+
</div>
|
1159
|
+
|
1160
|
+
</div>
|
1161
|
+
|
1162
|
+
|
1163
|
+
|
1164
|
+
|
1165
|
+
</div>
|
1166
|
+
|
1167
|
+
|
1168
|
+
<div id="method-i-validate_format" class="method-detail ">
|
1169
|
+
|
1170
|
+
<div class="method-heading">
|
1171
|
+
<span class="method-name">validate_format</span><span
|
1172
|
+
class="method-args">(fmt, options)</span>
|
1173
|
+
|
1174
|
+
<span class="method-click-advice">click to toggle source</span>
|
1175
|
+
|
1176
|
+
</div>
|
1177
|
+
|
1178
|
+
|
1179
|
+
<div class="method-description">
|
1180
|
+
|
1181
|
+
<p>Check if format fully matches or matches the first character of available options. Return full valid format or nil</p>
|
1182
|
+
|
1183
|
+
|
1184
|
+
|
1185
|
+
|
1186
|
+
<div class="method-source-code" id="validate_format-source">
|
1187
|
+
<pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 18</span>
|
1188
|
+
<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>)
|
1189
|
+
<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">'^\1(\2)?$'</span>) }
|
1190
|
+
<span class="ruby-identifier">valid_format</span> = <span class="ruby-keyword">nil</span>
|
1191
|
+
<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>
|
1192
|
+
<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">'i'</span>)
|
1193
|
+
<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>
|
1194
|
+
|
1195
|
+
<span class="ruby-identifier">valid_format</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">i</span>]
|
1196
|
+
<span class="ruby-keyword">break</span>
|
1197
|
+
<span class="ruby-keyword">end</span>
|
1198
|
+
<span class="ruby-identifier">valid_format</span>
|
1199
|
+
<span class="ruby-keyword">end</span></pre>
|
1200
|
+
</div>
|
1201
|
+
|
1202
|
+
</div>
|
1203
|
+
|
1204
|
+
|
1205
|
+
|
1206
|
+
|
1207
|
+
</div>
|
1208
|
+
|
1209
|
+
|
1210
|
+
</section>
|
1211
|
+
|
1212
|
+
</section>
|
1213
|
+
|
1214
|
+
</main>
|
1215
|
+
|
1216
|
+
|
1217
|
+
<footer id="validator-badges" role="contentinfo">
|
1218
|
+
<p><a href="https://validator.w3.org/check/referer">Validate</a>
|
1219
|
+
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.
|
1220
|
+
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
1221
|
+
</footer>
|
1222
|
+
|