hookapp 2.0.7 → 2.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS.md +4 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Gemfile.lock +35 -40
  5. data/LICENSE +21 -0
  6. data/README.md +32 -22
  7. data/bin/hook +57 -67
  8. data/hook.rdoc +16 -11
  9. data/hookapp.gemspec +1 -0
  10. data/html/App.html +107 -0
  11. data/html/GLI/Commands/Doc.html +91 -0
  12. data/html/GLI/Commands/MarkdownDocumentListener.html +521 -0
  13. data/html/GLI/Commands.html +91 -0
  14. data/html/GLI.html +91 -0
  15. data/html/Hook/Prompt.html +100 -0
  16. data/html/Hook/PromptFZF.html +243 -0
  17. data/html/Hook/PromptSTD.html +177 -0
  18. data/html/Hook.html +100 -0
  19. data/html/HookApp.html +1008 -0
  20. data/html/Hooker.html +141 -0
  21. data/html/README_rdoc.html +354 -0
  22. data/html/String.html +335 -0
  23. data/html/created.rid +10 -0
  24. data/html/css/fonts.css +167 -0
  25. data/html/css/rdoc.css +639 -0
  26. data/html/fonts/Lato-Light.ttf +0 -0
  27. data/html/fonts/Lato-LightItalic.ttf +0 -0
  28. data/html/fonts/Lato-Regular.ttf +0 -0
  29. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  30. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  31. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  32. data/html/images/add.png +0 -0
  33. data/html/images/arrow_up.png +0 -0
  34. data/html/images/brick.png +0 -0
  35. data/html/images/brick_link.png +0 -0
  36. data/html/images/bug.png +0 -0
  37. data/html/images/bullet_black.png +0 -0
  38. data/html/images/bullet_toggle_minus.png +0 -0
  39. data/html/images/bullet_toggle_plus.png +0 -0
  40. data/html/images/date.png +0 -0
  41. data/html/images/delete.png +0 -0
  42. data/html/images/find.png +0 -0
  43. data/html/images/loadingAnimation.gif +0 -0
  44. data/html/images/macFFBgHack.png +0 -0
  45. data/html/images/package.png +0 -0
  46. data/html/images/page_green.png +0 -0
  47. data/html/images/page_white_text.png +0 -0
  48. data/html/images/page_white_width.png +0 -0
  49. data/html/images/plugin.png +0 -0
  50. data/html/images/ruby.png +0 -0
  51. data/html/images/tag_blue.png +0 -0
  52. data/html/images/tag_green.png +0 -0
  53. data/html/images/transparent.png +0 -0
  54. data/html/images/wrench.png +0 -0
  55. data/html/images/wrench_orange.png +0 -0
  56. data/html/images/zoom.png +0 -0
  57. data/html/index.html +320 -0
  58. data/html/js/darkfish.js +84 -0
  59. data/html/js/navigation.js +105 -0
  60. data/html/js/navigation.js.gz +0 -0
  61. data/html/js/search.js +110 -0
  62. data/html/js/search_index.js +1 -0
  63. data/html/js/search_index.js.gz +0 -0
  64. data/html/js/searcher.js +229 -0
  65. data/html/js/searcher.js.gz +0 -0
  66. data/html/table_of_contents.html +409 -0
  67. data/lib/hook/hookapp.rb +11 -12
  68. data/lib/hook/hooker.rb +1 -0
  69. data/lib/hook/markdown_document_listener.rb +12 -2
  70. data/lib/hook/prompt.rb +113 -0
  71. data/lib/hook/version.rb +1 -1
  72. data/lib/hook.rb +2 -0
  73. data/test/hook_clip_test.rb +1 -1
  74. data/test/hook_link_test.rb +2 -1
  75. data/test/hook_scripts_test.rb +1 -1
  76. metadata +82 -3
  77. data/lib/helpers/fuzzyfilefinder +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 477033a68381137c2a2c67a486896da5d1210fb8d261950beff09df64b0b6566
4
- data.tar.gz: b3de73462923bc91c88c7ab58b3c8fc7195ffe19cb4d09bef2acd3d0e579e7d5
3
+ metadata.gz: 139ecb2e98a6f42e1499541fd62cc8b7605e4223874dec1ed843d05e50d15b9e
4
+ data.tar.gz: afe9d0893cb5ae49a2063228b74580801d78987ebbb4e4374b0bef8bfdd08fde
5
5
  SHA512:
6
- metadata.gz: c64691a5a0ddc289590408efd13936e352962838f182ec905dfd8ac706197e6f5538d2cbe2a108b1a72f7ace459d90d36d1b789cf48bc7a6871391c871698a24
7
- data.tar.gz: 3b91f789621f9cf091793ac75d9d44b61c09c2c07ae34fc4e84495ee670c2016c8583b71d00c067917f12aff77e603b389773a1cf4acb8a3a12bcd9cea2ac1bb
6
+ metadata.gz: 7ddb41793305f83f4f0b4b09abf4e27c35f19c9f97c23ff5c33a082ef94bec9445572c9481f831131770afaec6fd2c344700405a2bc801e37e5749b500fbfca7
7
+ data.tar.gz: d5020af5a886bd2df01839afc7dc642926307d077b8a36e89e520e420c55724dca7ead7626db0571e7f694c4d92231891a9a219f9b32f811dbe48e47c6581414
data/AUTHORS.md ADDED
@@ -0,0 +1,4 @@
1
+ ## Authors
2
+
3
+ - Brett Terpstra <me@brettterpstra.com>
4
+ - Josh Nichols <joshua.nichols@gmail.com>
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ #### 2.0.10
2
+
3
+ - Fix permissions issues when installed using sudo
4
+
5
+ #### 2.0.9
6
+
7
+ - Fix fzf integration across platforms
8
+
9
+ #### 2.0.8
10
+
11
+ - Bug fixes
12
+ - New tests
13
+
1
14
  #### 2.0.3
2
15
 
3
16
  - Incorporate `fzf` for selecting and filtering hooks
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hookapp (2.0.7)
4
+ hookapp (2.0.10)
5
5
  gli (~> 2.20.1)
6
+ tty-which (~> 0.5, >= 0.5.0)
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
@@ -17,53 +18,47 @@ GEM
17
18
  builder (3.2.4)
18
19
  childprocess (3.0.0)
19
20
  contracts (0.17)
20
- cucumber (7.0.0)
21
+ cucumber (8.0.0)
21
22
  builder (~> 3.2, >= 3.2.4)
22
- cucumber-core (~> 10.0, >= 10.0.1)
23
- cucumber-create-meta (~> 6.0, >= 6.0.1)
24
- cucumber-cucumber-expressions (~> 12.1, >= 12.1.1)
25
- cucumber-gherkin (~> 20.0, >= 20.0.1)
26
- cucumber-html-formatter (~> 16.0, >= 16.0.1)
27
- cucumber-messages (~> 17.0, >= 17.0.1)
28
- cucumber-wire (~> 6.0, >= 6.0.1)
29
- diff-lcs (~> 1.4, >= 1.4.4)
30
- mime-types (~> 3.3, >= 3.3.1)
31
- multi_test (~> 0.1, >= 0.1.2)
23
+ cucumber-ci-environment (~> 9.0, >= 9.0.4)
24
+ cucumber-core (~> 11.0, >= 11.0.0)
25
+ cucumber-cucumber-expressions (~> 15.1, >= 15.1.1)
26
+ cucumber-gherkin (~> 23.0, >= 23.0.1)
27
+ cucumber-html-formatter (~> 19.1, >= 19.1.0)
28
+ cucumber-messages (~> 18.0, >= 18.0.0)
29
+ diff-lcs (~> 1.5, >= 1.5.0)
30
+ mime-types (~> 3.4, >= 3.4.1)
31
+ multi_test (~> 1.1, >= 1.1.0)
32
32
  sys-uname (~> 1.2, >= 1.2.2)
33
- cucumber-core (10.0.1)
34
- cucumber-gherkin (~> 20.0, >= 20.0.1)
35
- cucumber-messages (~> 17.0, >= 17.0.1)
36
- cucumber-tag-expressions (~> 3.0, >= 3.0.1)
37
- cucumber-create-meta (6.0.1)
38
- cucumber-messages (~> 17.0, >= 17.0.1)
39
- sys-uname (~> 1.2, >= 1.2.2)
40
- cucumber-cucumber-expressions (12.1.3)
41
- cucumber-gherkin (20.0.1)
42
- cucumber-messages (~> 17.0, >= 17.0.1)
43
- cucumber-html-formatter (16.0.1)
44
- cucumber-messages (~> 17.0, >= 17.0.1)
45
- cucumber-messages (17.1.1)
46
- cucumber-tag-expressions (3.0.1)
47
- cucumber-wire (6.1.1)
48
- cucumber-core (~> 10.0, >= 10.0.1)
49
- cucumber-cucumber-expressions (~> 12.1, >= 12.1.2)
50
- cucumber-messages (~> 17.0, >= 17.0.1)
51
- diff-lcs (1.4.4)
52
- ffi (1.15.4)
33
+ cucumber-ci-environment (9.0.4)
34
+ cucumber-core (11.0.0)
35
+ cucumber-gherkin (~> 23.0, >= 23.0.1)
36
+ cucumber-messages (~> 18.0, >= 18.0.0)
37
+ cucumber-tag-expressions (~> 4.1, >= 4.1.0)
38
+ cucumber-cucumber-expressions (15.2.0)
39
+ cucumber-gherkin (23.0.1)
40
+ cucumber-messages (~> 18.0, >= 18.0.0)
41
+ cucumber-html-formatter (19.1.0)
42
+ cucumber-messages (~> 18.0, >= 18.0.0)
43
+ cucumber-messages (18.0.0)
44
+ cucumber-tag-expressions (4.1.0)
45
+ diff-lcs (1.5.0)
46
+ ffi (1.15.5)
53
47
  gli (2.20.1)
54
- mime-types (3.3.1)
48
+ mime-types (3.4.1)
55
49
  mime-types-data (~> 3.2015)
56
- mime-types-data (3.2021.0901)
57
- multi_test (0.1.2)
50
+ mime-types-data (3.2022.0105)
51
+ multi_test (1.1.0)
58
52
  rake (13.0.6)
59
- rdoc (6.3.2)
60
- rspec-expectations (3.10.1)
53
+ rdoc (6.3.3)
54
+ rspec-expectations (3.11.0)
61
55
  diff-lcs (>= 1.2.0, < 2.0)
62
- rspec-support (~> 3.10.0)
63
- rspec-support (3.10.2)
56
+ rspec-support (~> 3.11.0)
57
+ rspec-support (3.11.0)
64
58
  sys-uname (1.2.2)
65
59
  ffi (~> 1.1)
66
- thor (1.1.0)
60
+ thor (1.2.1)
61
+ tty-which (0.5.0)
67
62
 
68
63
  PLATFORMS
69
64
  ruby
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Brett Terpstra
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -3,9 +3,10 @@
3
3
  CLI interface for Hook.app (macOS)
4
4
 
5
5
  > Hook.app is a productivity tool for macOS <https://hookproductivity.com/>.
6
- This gem includes a `hook` binary that allows interaction with the features of Hook.app.
7
6
 
8
- *v2.0.7*
7
+ This gem includes a `hook` binary that allows interaction with the features of Hook.app.
8
+
9
+ *v2.0.10*
9
10
 
10
11
  ## Installation
11
12
 
@@ -100,13 +101,13 @@ Display the program version
100
101
 
101
102
  ## Commands
102
103
 
103
- ### `$ hook` <mark>`clip|cp`</mark> ` FILE_OR_URL`
104
+ ### `$ hook` <mark>`clip|cp`</mark> `FILE_OR_URL`
104
105
 
105
106
  *Copy Hook URL for file/url to clipboard*
106
107
 
107
108
  > Creates a bookmark for the specified file or URL and copies its Hook URL to the clipboard.
108
109
  >
109
- > The copied Hook URL can be used to link to other files (use `hook link --paste FILE/URL),
110
+ > The copied Hook URL can be used to link to other files (use `hook link --paste FILE/URL`,
110
111
  > or to paste into another app as a link. Use the -m flag to copy a full Markdown link.
111
112
 
112
113
  #### Options
@@ -121,15 +122,17 @@ Copy as Markdown
121
122
 
122
123
  * * * * * *
123
124
 
124
- ### `$ hook` <mark>`clone`</mark> ` SOURCE TARGET`
125
+ ### `$ hook` <mark>`clone`</mark> `SOURCE TARGET`
125
126
 
126
127
  *Clone all hooks from one file or url onto another*
127
128
 
128
- > Copy all the files and urls that the first file is hooked to onto another file. Exactly two arguments (SOURCE, TARGET) required.
129
+ > Copy all the files and urls that the first file is hooked to onto another file.
130
+ >
131
+ > Exactly two arguments (SOURCE, TARGET) required.
129
132
 
130
133
  * * * * * *
131
134
 
132
- ### `$ hook` <mark>`find|search`</mark> ` SEARCH_STRING`
135
+ ### `$ hook` <mark>`find|search`</mark> `[SEARCH_STRING]`
133
136
 
134
137
  *Search bookmarks*
135
138
 
@@ -139,7 +142,7 @@ Copy as Markdown
139
142
 
140
143
  #### Options
141
144
 
142
- ##### `-o` | `--output_format` format
145
+ ##### `-o` | `--output_format` FORMAT
143
146
 
144
147
  Output format [(h)ooks, (p)aths, (m)arkdown, (v)erbose]
145
148
 
@@ -159,7 +162,7 @@ Separate results with NULL separator, only applies with "paths" output for singl
159
162
 
160
163
  * * * * * *
161
164
 
162
- ### `$ hook` <mark>`from`</mark> ` APPLICATION_NAME`
165
+ ### `$ hook` <mark>`from`</mark> `APPLICATION_NAME`
163
166
 
164
167
  *Get a Hook URL for the frontmost window of an app*
165
168
 
@@ -180,7 +183,7 @@ Output as Markdown
180
183
 
181
184
  * * * * * *
182
185
 
183
- ### `$ hook` <mark>`help`</mark> ` command`
186
+ ### `$ hook` <mark>`help`</mark> `command`
184
187
 
185
188
  *Shows a list of commands or help for one command*
186
189
 
@@ -194,7 +197,7 @@ List commands one per line, to assist with shell completion
194
197
 
195
198
  * * * * * *
196
199
 
197
- ### `$ hook` <mark>`link|ln`</mark> ` SOURCE [SOURCE...] TARGET`
200
+ ### `$ hook` <mark>`link|ln`</mark> `SOURCE... TARGET`
198
201
 
199
202
  *Create bidirectional hooks between two or more files/urls*
200
203
 
@@ -218,7 +221,7 @@ Paste URL from clipboard
218
221
 
219
222
  * * * * * *
220
223
 
221
- ### `$ hook` <mark>`list|ls`</mark> ` FILE_OR_URL [FILE_OR_URL...]`
224
+ ### `$ hook` <mark>`list|ls`</mark> `[FILE_OR_URL]...`
222
225
 
223
226
  *List hooks on a file or url*
224
227
 
@@ -228,7 +231,7 @@ Paste URL from clipboard
228
231
 
229
232
  #### Options
230
233
 
231
- ##### `-o` | `--output_format` format
234
+ ##### `-o` | `--output_format` FORMAT
232
235
 
233
236
  Output format [(h)ooks, (p)aths, (m)arkdown, (v)erbose]
234
237
 
@@ -250,15 +253,17 @@ Generate a menu to select hook(s) for opening
250
253
 
251
254
  * * * * * *
252
255
 
253
- ### `$ hook` <mark>`open|gui`</mark> ` FILE_OR_URL`
256
+ ### `$ hook` <mark>`open|gui`</mark> `FILE_OR_URL`
254
257
 
255
258
  *Open the specified file or url in Hook GUI*
256
259
 
257
- > Opens Hook.app on the specified file/URL for browsing and performing actions. Exactly one argument (File/URL) required.
260
+ > Opens Hook.app on the specified file/URL for browsing and performing actions.
261
+ >
262
+ > Exactly one argument (File/URL) required.
258
263
 
259
264
  * * * * * *
260
265
 
261
- ### `$ hook` <mark>`percent`</mark> ` STRING`
266
+ ### `$ hook` <mark>`percent`</mark> `STRING`
262
267
 
263
268
  *Percent encode/decode a string*
264
269
 
@@ -266,17 +271,17 @@ Generate a menu to select hook(s) for opening
266
271
 
267
272
  #### Commands
268
273
 
269
- ##### `$ hook` <mark>`decode`</mark> ` STRING`
274
+ ##### `$ hook` <mark>`percent decode`</mark> `STRING`
270
275
 
271
276
  *decode a percent-encoded string*
272
277
 
273
- ##### `$ hook` <mark>`encode`</mark> ` STRING`
278
+ ##### `$ hook` <mark>`percent encode`</mark> `STRING`
274
279
 
275
280
  *percent encode a string*
276
281
 
277
282
  * * * * * *
278
283
 
279
- ### `$ hook` <mark>`remove|rm`</mark> ` ITEM_1 ITEM_2`
284
+ ### `$ hook` <mark>`remove|rm`</mark> `FILE_OR_URL...`
280
285
 
281
286
  *Remove a hook between two files/urls*
282
287
 
@@ -296,7 +301,7 @@ Remove ALL links on files, requires confirmation
296
301
 
297
302
  * * * * * *
298
303
 
299
- ### `$ hook` <mark>`scripts`</mark> ` SHELL`
304
+ ### `$ hook` <mark>`scripts`</mark> `SHELL`
300
305
 
301
306
  *Shell completion examples*
302
307
 
@@ -304,7 +309,7 @@ Remove ALL links on files, requires confirmation
304
309
 
305
310
  * * * * * *
306
311
 
307
- ### `$ hook` <mark>`select`</mark> ` FILE_OR_URL`
312
+ ### `$ hook` <mark>`select`</mark> `FILE_OR_URL`
308
313
 
309
314
  *Select from hooks on a file/url and open in default application*
310
315
 
@@ -315,6 +320,11 @@ Remove ALL links on files, requires confirmation
315
320
  * * * * * *
316
321
 
317
322
  #### [Default Command] help
323
+ ## Authors
324
+
325
+ - Brett Terpstra <me@brettterpstra.com>
326
+ - Josh Nichols <joshua.nichols@gmail.com>
327
+
318
328
  ## Credits
319
329
 
320
330
  HookApp embeds [Fuzzy Finder](https://github.com/junegunn/fzf) under the [MIT License](https://github.com/junegunn/fzf/blob/master/LICENSE)
@@ -348,5 +358,5 @@ This software is licensed under the MIT License.
348
358
  THE SOFTWARE.
349
359
 
350
360
 
351
- Documentation generated 2021-09-25 07:37
361
+ Documentation generated 2022-05-28 08:26
352
362
 
data/bin/hook CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby -W1
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'hook'
@@ -10,7 +10,8 @@ class App
10
10
 
11
11
  program_desc 'CLI interface for Hook.app (macOS)'
12
12
  program_long_desc 'Hook.app is a productivity tool for macOS <https://hookproductivity.com/>.
13
- This gem includes a `hook` binary that allows interaction with the features of Hook.app.'
13
+
14
+ This gem includes a `hook` binary that allows interaction with the features of Hook.app.'
14
15
  default_command 'help'
15
16
  autocomplete_commands = true
16
17
  synopsis_format(:terminal)
@@ -24,12 +25,10 @@ class App
24
25
  stdin = nil
25
26
 
26
27
  desc 'List hooks on a file or url'
27
- long_desc %{
28
- Output a list of all hooks attached to given url(s) or file(s) in the specified format (default "paths").
29
-
30
- Run `hook list` with no file/url argument to list all bookmarks.}
28
+ long_desc %(Output a list of all hooks attached to given url(s) or file(s) in the specified format (default "paths").
31
29
 
32
- arg_name 'FILE_OR_URL [FILE_OR_URL...]'
30
+ Run `hook list` with no file/url argument to list all bookmarks.)
31
+ arg_name 'FILE_OR_URL', [:optional, :multiple]
33
32
  command %i[list ls] do |c|
34
33
  c.desc 'Generate a menu to select hook(s) for opening'
35
34
  c.long_desc 'This option is a shortcut to `hook select` and overrides any other arguments.'
@@ -44,20 +43,22 @@ Run `hook list` with no file/url argument to list all bookmarks.}
44
43
  valid_formats = %w[hooks paths markdown verbose]
45
44
  fmt_list = valid_formats.map { |fmt| fmt.sub(/^(.)(.*?)$/, '(\1)\2') }.join(', ')
46
45
  c.desc "Output format [#{fmt_list}]"
47
- c.flag %i[o output_format], { arg_name: 'format', default_value: 'paths' }
46
+ c.arg_name 'FORMAT'
47
+ c.flag %i[o output_format], { arg_name: 'FORMAT', default_value: 'paths' }
48
48
 
49
49
  c.action do |_global_options, options, args|
50
50
  if options[:s]
51
- return hookapp.open_linked(args[0])
52
- end
53
- valid_format = hookapp.validate_format(options[:o], valid_formats)
54
- exit_now!("Invalid output format: \"#{options[:o]}\"", 6) unless valid_format
51
+ hookapp.open_linked(args[0])
52
+ else
53
+ valid_format = hookapp.validate_format(options[:o], valid_formats)
54
+ help_now!("Invalid output format: \"#{options[:o]}\"", 6) unless valid_format
55
55
 
56
- result = hookapp.linked_bookmarks(args, { files_only: options[:f],
57
- format: valid_format,
58
- null_separator: options[:null] })
56
+ result = hookapp.linked_bookmarks(args, { files_only: options[:f],
57
+ format: valid_format,
58
+ null_separator: options[:null] })
59
59
 
60
- puts result
60
+ puts result
61
+ end
61
62
  end
62
63
  end
63
64
 
@@ -65,25 +66,21 @@ Run `hook list` with no file/url argument to list all bookmarks.}
65
66
  # the full shell name as the extension, e.g. "hook_completion.bash".
66
67
  desc 'Shell completion examples'
67
68
  valid_shells = %w[bash zsh fish]
68
- long_desc %{
69
- Output completion script example for the specified shell (#{valid_shells.join(', ')})
70
- }
69
+ long_desc %(Output completion script example for the specified shell (#{valid_shells.join(', ')}))
71
70
  arg_name 'SHELL'
72
71
  command %i[scripts] do |c|
73
72
  c.action do |_global_options, _options, args|
74
73
  if args.length > 1
75
- exit_now!("Invalid number of arguments, (expected 1)", 5)
74
+ help_now!('Invalid number of arguments, (expected 1)', 5)
76
75
  elsif args.nil? || args.empty?
77
- exit_now!("Specify a shell (#{valid_shells.join(', ')})", 0)
76
+ help_now!("Specify a shell (#{valid_shells.join(', ')})", 0)
77
+ elsif valid_shells.include?(args[0])
78
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), '../lib/completion'))
79
+ completion = File.join(base_dir, "hook_completion.#{args[0]}")
80
+ script = IO.read(completion)
81
+ $stdout.puts script
78
82
  else
79
- if valid_shells.include?(args[0])
80
- base_dir = File.expand_path(File.join(File.dirname(__FILE__), '../lib/completion'))
81
- completion = File.join(base_dir, "hook_completion.#{args[0]}")
82
- script = IO.read(completion)
83
- $stdout.puts script
84
- else
85
- exit_now!("Invalid shell name, must be one of #{valid_shells.join(', ')}", 1)
86
- end
83
+ help_now!("Invalid shell name, must be one of #{valid_shells.join(', ')}", 1)
87
84
  end
88
85
  end
89
86
  end
@@ -91,11 +88,10 @@ Output completion script example for the specified shell (#{valid_shells.join(',
91
88
 
92
89
 
93
90
  desc 'Search bookmarks'
94
- long_desc %{
95
- Search bookmark urls and names for a string and output in specified format (default "paths").
91
+ long_desc %(Search bookmark urls and names for a string and output in specified format (default "paths").
96
92
 
97
- Run `hook find` with no search argument to list all bookmarks.}
98
- arg_name 'SEARCH_STRING'
93
+ Run `hook find` with no search argument to list all bookmarks.)
94
+ arg_name 'SEARCH_STRING', :optional
99
95
  command %i[find search] do |c|
100
96
  c.desc 'Output only bookmarks with file paths (exclude e.g. emails)'
101
97
  c.switch %i[f files_only], { negatable: false, default_value: false }
@@ -107,7 +103,7 @@ Run `hook find` with no search argument to list all bookmarks.}
107
103
  fmt_list = valid_formats.map { |fmt| fmt.sub(/^(.)(.*?)$/, '(\1)\2') }.join(', ')
108
104
 
109
105
  c.desc "Output format [#{fmt_list}]"
110
- c.flag %i[o output_format], { arg_name: 'format', default_value: 'paths' }
106
+ c.flag %i[o output_format], { arg_name: 'FORMAT', default_value: 'paths' }
111
107
 
112
108
  c.desc "Search only bookmark names"
113
109
  c.switch %i[n names_only], { negatable: false, default_value: false }
@@ -126,16 +122,15 @@ Run `hook find` with no search argument to list all bookmarks.}
126
122
  end
127
123
 
128
124
  desc 'Create bidirectional hooks between two or more files/urls'
129
- long_desc %{
130
- If two files/urls are provided, links will be bi-directional.
125
+ long_desc 'If two files/urls are provided, links will be bi-directional.
131
126
  If three or more are provided, `link` defaults to creating bi-directional
132
127
  links between each file and the last file in the list. Use `-a` to create
133
128
  bi-directional links between every file in the list.
134
129
 
135
130
  If using `--paste`, the URL/hook link in the clipboard will be used as one argument,
136
131
  to be combined with one or more file/url arguments.
137
- }
138
- arg_name 'SOURCE [SOURCE...] TARGET'
132
+ '
133
+ arg_name 'SOURCE... TARGET'
139
134
  command %i[link ln] do |c|
140
135
  c.desc 'Link every listed file or url to every other'
141
136
  c.switch %i[a all], { negatable: false, default_value: false }
@@ -161,12 +156,10 @@ to be combined with one or more file/url arguments.
161
156
  end
162
157
 
163
158
  desc 'Copy Hook URL for file/url to clipboard'
164
- long_desc %{
165
- Creates a bookmark for the specified file or URL and copies its Hook URL to the clipboard.
159
+ long_desc %{Creates a bookmark for the specified file or URL and copies its Hook URL to the clipboard.
166
160
 
167
- The copied Hook URL can be used to link to other files (use `hook link --paste FILE/URL),
168
- or to paste into another app as a link. Use the -m flag to copy a full Markdown link.
169
- }
161
+ The copied Hook URL can be used to link to other files (use `hook link --paste FILE/URL`,
162
+ or to paste into another app as a link. Use the -m flag to copy a full Markdown link.}
170
163
  arg_name 'FILE_OR_URL'
171
164
  command %i[clip cp] do |c|
172
165
  c.desc 'Copy as Markdown'
@@ -187,12 +180,10 @@ or to paste into another app as a link. Use the -m flag to copy a full Markdown
187
180
  end
188
181
 
189
182
  desc 'Get a Hook URL for the frontmost window of an app'
190
- long_desc %{
191
- Specify an application by name (without '.app') to bring that app to the foreground and create a bookmark
183
+ long_desc %(Specify an application by name (without '.app') to bring that app to the foreground and create a bookmark
192
184
  for the active document, note, task, etc., returning a Hook URL.
193
185
 
194
- Use -m to get the response as Markdown, and/or -c to copy the result directly to the clipboard.
195
- }
186
+ Use -m to get the response as Markdown, and/or -c to copy the result directly to the clipboard.)
196
187
  arg_name 'APPLICATION_NAME'
197
188
  command %i[from] do |c|
198
189
  c.desc 'Output as Markdown'
@@ -209,12 +200,10 @@ Use -m to get the response as Markdown, and/or -c to copy the result directly to
209
200
  end
210
201
 
211
202
  desc 'Remove a hook between two files/urls'
212
- long_desc %{
213
- Remove a hook between two files or URLs. If you use --all, all hooks on a given file will be removed.
203
+ long_desc %(Remove a hook between two files or URLs. If you use --all, all hooks on a given file will be removed.
214
204
 
215
- If --all isn't specified, exactly two arguments (Files/URLs) are required.
216
- }
217
- arg_name 'ITEM_1 ITEM_2'
205
+ If --all isn't specified, exactly two arguments (Files/URLs) are required.)
206
+ arg_name 'FILE_OR_URL', :multiple
218
207
  command %i[remove rm] do |c|
219
208
  c.desc 'Remove ALL links on files, requires confirmation'
220
209
  c.switch %i[a all], { negatable: false, default_value: false }
@@ -227,9 +216,9 @@ If --all isn't specified, exactly two arguments (Files/URLs) are required.
227
216
  end
228
217
 
229
218
  desc 'Clone all hooks from one file or url onto another'
230
- long_desc %{
231
- Copy all the files and urls that the first file is hooked to onto another file. Exactly two arguments (SOURCE, TARGET) required.
232
- }
219
+ long_desc 'Copy all the files and urls that the first file is hooked to onto another file.
220
+
221
+ Exactly two arguments (SOURCE, TARGET) required.'
233
222
  arg_name 'SOURCE TARGET'
234
223
  command %i[clone] do |c|
235
224
  c.action do |_global_options, _options, args|
@@ -241,35 +230,36 @@ Copy all the files and urls that the first file is hooked to onto another file.
241
230
  end
242
231
 
243
232
  desc 'Select from hooks on a file/url and open in default application'
244
- long_desc %{
245
- If the target file/URL has hooked items, a menu will be provided. Selecting one or more files
233
+ long_desc %(If the target file/URL has hooked items, a menu will be provided. Selecting one or more files
246
234
  from this menu will open the item(s) using the default application assigned to the
247
- filetype by macOS. Allows multiple selections with tab key, and type-ahead fuzzy filtering of results.
248
- }
235
+ filetype by macOS. Allows multiple selections with tab key, and type-ahead fuzzy filtering of results.)
249
236
  arg_name 'FILE_OR_URL'
250
237
  command %i[select] do |c|
251
238
  c.action do |_global_options, _options, args|
252
- exit_now!("Wrong number of arguments. One file path or url required (#{args.length} given)", 5) if args.length != 1
239
+ help_now!("Wrong number of arguments. One file path or url required (#{args.length} given)", 5) if args.length != 1
253
240
 
254
241
  hookapp.open_linked(args[0])
255
242
  end
256
243
  end
257
244
 
258
245
  desc 'Open the specified file or url in Hook GUI'
259
- long_desc %{
260
- Opens Hook.app on the specified file/URL for browsing and performing actions. Exactly one argument (File/URL) required.
261
- }
246
+ long_desc 'Opens Hook.app on the specified file/URL for browsing and performing actions.
247
+
248
+ Exactly one argument (File/URL) required.'
262
249
  arg_name 'FILE_OR_URL'
263
250
  command %i[open gui] do |c|
264
251
  c.action do |_global_options, _options, args|
265
- exit_now!("Wrong number of arguments. One file path or url required (#{args.length} given)", 5) if args.length != 1
252
+ if args.length != 1
253
+ help_now!("Wrong number of arguments. One file path
254
+ or url required (#{args.length} given)", 5)
255
+ end
266
256
 
267
257
  hookapp.open_gui(args[0])
268
258
  end
269
259
  end
270
260
 
271
261
  desc 'Percent encode/decode a string'
272
- long_desc %{Use encode or decode to apply Hook's url encoding to a string argument. Use '-' to read input from STDIN.}
262
+ long_desc %(Use encode or decode to apply Hook's url encoding to a string argument. Use '-' to read input from STDIN.)
273
263
  arg_name 'STRING'
274
264
  command :percent do |c|
275
265
  c.desc 'percent encode a string'
@@ -279,7 +269,7 @@ Opens Hook.app on the specified file/URL for browsing and performing actions. Ex
279
269
  if stdin
280
270
  string = stdin
281
271
  else
282
- exit_now!('no string provided') unless args.size.positive?
272
+ help_now!('No string provided') unless args.size.positive?
283
273
 
284
274
  string = args.join(' ').strip
285
275
  end
@@ -295,7 +285,7 @@ Opens Hook.app on the specified file/URL for browsing and performing actions. Ex
295
285
  if stdin
296
286
  string = stdin
297
287
  else
298
- exit_now! ('no string provided') unless args.size.positive?
288
+ help_now!('no string provided') unless args.size.positive?
299
289
 
300
290
  string = args.join(' ').strip
301
291
  end