hookapp 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +6 -0
- data/bin/hook +27 -11
- data/hook.rdoc +26 -4
- data/lib/hook/hooker.rb +55 -14
- data/lib/hook/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af7f2f009d2c02cad8385099d036499770fc256c7ee62f54bb154dddef391450
|
4
|
+
data.tar.gz: a57bea2c1682d71e5f37f95ef81f2cc20a25f18b53febbc29630abd2d73dfa9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd32ce6c7e9348e398acce8988f2e50a762d2cf4dae21e3a3c02d1f2310371a8c79b22bda56e60bd5398329769b66f5a94cf6af95c4d1701e489cbd7f9cdc8a3
|
7
|
+
data.tar.gz: 0e4d669d29e3121ac1f7411550b853abf5bafc32d05fd480892e4276a74af4c310aa9d4afa9aadab4ab99164badfb4146a8343ea4e5212a803fbcd34aa570d2b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -28,6 +28,7 @@ Run `hook help` for usage:
|
|
28
28
|
COMMANDS
|
29
29
|
clip - Copy Hook URL for file/url to clipboard
|
30
30
|
clone, cp - Clone all hooks from one file or url onto another
|
31
|
+
from - Get a Hook URL for the frontmost window of an app
|
31
32
|
help - Shows a list of commands or help for one command
|
32
33
|
link, ln - Create bidirectional hooks between two or more files/urls
|
33
34
|
list, ls - List hooks on a file or url
|
@@ -67,6 +68,11 @@ You can also open a file in the Hook GUI using `hook open file1.md`.
|
|
67
68
|
|
68
69
|
### Changelog
|
69
70
|
|
71
|
+
#### 0.0.5
|
72
|
+
|
73
|
+
- `hook from APP_NAME` command
|
74
|
+
- General code cleanup
|
75
|
+
|
70
76
|
#### 0.0.4
|
71
77
|
|
72
78
|
- Fix "conversion of nil into string" error
|
data/bin/hook
CHANGED
@@ -17,14 +17,6 @@ class App
|
|
17
17
|
|
18
18
|
hooker = nil
|
19
19
|
|
20
|
-
# desc 'Describe some switch here'
|
21
|
-
# switch [:s,:switch]
|
22
|
-
|
23
|
-
# desc 'Describe some flag here'
|
24
|
-
# default_value 'the default'
|
25
|
-
# arg_name 'The name of the argument'
|
26
|
-
# flag [:f,:flagname]
|
27
|
-
|
28
20
|
desc 'List hooks on a file or url'
|
29
21
|
arg_name 'FILE_OR_URL [FILE_OR_URL...]'
|
30
22
|
command %i[list ls] do |c|
|
@@ -81,11 +73,35 @@ class App
|
|
81
73
|
arg_name 'FILE_OR_URL'
|
82
74
|
command %i[clip] do |c|
|
83
75
|
c.desc 'Copy as Markdown'
|
84
|
-
c.switch %i[m markdown]
|
76
|
+
c.switch %i[m markdown], { negatable: false, default_value: false }
|
77
|
+
|
78
|
+
c.desc 'Copy from application'
|
79
|
+
c.flag %i[a app], { arg_name: 'APP_NAME' }
|
85
80
|
|
86
81
|
c.action do |_global_options, options, args|
|
87
|
-
|
88
|
-
|
82
|
+
raise 'Wrong number of arguments. Requires a path/url or -a APP_NAME' if args.length != 1 && !options[:a]
|
83
|
+
|
84
|
+
if options[:a]
|
85
|
+
puts hooker.bookmark_from_app(options[:a], { copy: true, markdown: options[:m] })
|
86
|
+
else
|
87
|
+
puts hooker.clip_bookmark(args[0], { markdown: options[:m] })
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'Get a Hook URL for the frontmost window of an app'
|
93
|
+
arg_name 'APPLICATION_NAME'
|
94
|
+
command %i[from] do |c|
|
95
|
+
c.desc 'Output as Markdown'
|
96
|
+
c.switch %i[m markdown], { negatable: false, default_value: false }
|
97
|
+
|
98
|
+
c.desc 'Copy to clipboard'
|
99
|
+
c.switch %i[c copy], { negatable: false, default_value: false }
|
100
|
+
|
101
|
+
c.action do |_global_options, options, args|
|
102
|
+
raise "Wrong number of arguments (1 expected, #{args.length} given)" if args.length != 1
|
103
|
+
|
104
|
+
puts hooker.bookmark_from_app(args[0], { copy: options[:c], markdown: options[:m] })
|
89
105
|
end
|
90
106
|
end
|
91
107
|
|
data/hook.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== hook - CLI interface for Hook.app (macOS)
|
2
2
|
|
3
|
-
v0.0.
|
3
|
+
v0.0.4
|
4
4
|
|
5
5
|
=== Global Options
|
6
6
|
=== --help
|
@@ -19,7 +19,14 @@ Copy Hook URL for file/url to clipboard
|
|
19
19
|
|
20
20
|
|
21
21
|
===== Options
|
22
|
-
===== -
|
22
|
+
===== -a|--app APP_NAME
|
23
|
+
|
24
|
+
Copy from application
|
25
|
+
|
26
|
+
[Default Value] None
|
27
|
+
|
28
|
+
|
29
|
+
===== -m|--markdown
|
23
30
|
Copy as Markdown
|
24
31
|
|
25
32
|
|
@@ -28,6 +35,21 @@ Copy as Markdown
|
|
28
35
|
Clone all hooks from one file or url onto another
|
29
36
|
|
30
37
|
|
38
|
+
==== Command: <tt>from APPLICATION_NAME</tt>
|
39
|
+
Get a Hook URL for the frontmost window of an app
|
40
|
+
|
41
|
+
|
42
|
+
===== Options
|
43
|
+
===== -c|--copy
|
44
|
+
Copy to clipboard
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
===== -m|--markdown
|
49
|
+
Output as Markdown
|
50
|
+
|
51
|
+
|
52
|
+
|
31
53
|
==== Command: <tt>help command</tt>
|
32
54
|
Shows a list of commands or help for one command
|
33
55
|
|
@@ -38,7 +60,7 @@ List commands one per line, to assist with shell completion
|
|
38
60
|
|
39
61
|
|
40
62
|
|
41
|
-
==== Command: <tt>link|ln SOURCE [SOURCE
|
63
|
+
==== Command: <tt>link|ln SOURCE [SOURCE...] TARGET</tt>
|
42
64
|
Create bidirectional hooks between two or more files/urls
|
43
65
|
|
44
66
|
|
@@ -53,7 +75,7 @@ Paste URL from clipboard
|
|
53
75
|
|
54
76
|
|
55
77
|
|
56
|
-
==== Command: <tt>list|ls FILE_OR_URL [FILE_OR_URL
|
78
|
+
==== Command: <tt>list|ls FILE_OR_URL [FILE_OR_URL...]</tt>
|
57
79
|
List hooks on a file or url
|
58
80
|
|
59
81
|
|
data/lib/hook/hooker.rb
CHANGED
@@ -29,6 +29,26 @@ class String
|
|
29
29
|
def valid_hook!
|
30
30
|
replace valid_hook
|
31
31
|
end
|
32
|
+
|
33
|
+
# Capitalize only if no uppercase
|
34
|
+
def cap
|
35
|
+
unless self =~ /[A-Z]/
|
36
|
+
capitalize
|
37
|
+
else
|
38
|
+
self
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def cap!
|
43
|
+
replace cap
|
44
|
+
end
|
45
|
+
|
46
|
+
def clip
|
47
|
+
res = `/bin/echo -n #{Shellwords.escape(self)} | pbcopy`.strip
|
48
|
+
raise "Failed to copy to clipboard" unless res.empty?
|
49
|
+
|
50
|
+
true
|
51
|
+
end
|
32
52
|
end
|
33
53
|
|
34
54
|
# Hook.app CLI interface
|
@@ -85,15 +105,39 @@ class Hooker
|
|
85
105
|
hooks.split_hooks
|
86
106
|
end
|
87
107
|
|
88
|
-
def
|
108
|
+
def bookmark_from_app(app, opts)
|
109
|
+
mark = `osascript <<'APPLESCRIPT'
|
110
|
+
tell application "System Events" to set front_app to name of first application process whose frontmost is true
|
111
|
+
tell application "#{app}" to activate
|
112
|
+
delay 2
|
113
|
+
tell application "Hook"
|
114
|
+
set _hook to (bookmark from active window)
|
115
|
+
set _output to (title of _hook & "||" & address of _hook & "||" & path of _hook)
|
116
|
+
end tell
|
117
|
+
tell application front_app to activate
|
118
|
+
return _output
|
119
|
+
APPLESCRIPT`.strip.split_hook
|
120
|
+
title = mark[:name].empty? ? "#{app.cap} link" : mark[:name]
|
121
|
+
output = opts[:markdown] ? "[#{title}](#{mark[:url]})" : mark[:url]
|
122
|
+
|
123
|
+
if opts[:copy]
|
124
|
+
"Copied Markdown link for '#{title}' to clipboard" if output.clip
|
125
|
+
else
|
126
|
+
output
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def clip_bookmark(url, opts)
|
89
131
|
mark = bookmark_for(url)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
132
|
+
copy_bookmark(mark[:name], mark[:url], opts)
|
133
|
+
end
|
134
|
+
|
135
|
+
def copy_bookmark(title, url, opts)
|
136
|
+
raise "No URL found" if url.empty?
|
137
|
+
title = title.empty? ? 'No title' : mark[:name]
|
138
|
+
output = opts[:markdown] ? "[#{title}](#{url})" : url
|
139
|
+
output.clip
|
140
|
+
%(Copied #{opts[:markdown] ? 'Markdown link' : 'Hook URL'} for '#{title}' to clipboard)
|
97
141
|
end
|
98
142
|
|
99
143
|
def select_hook(marks)
|
@@ -103,12 +147,9 @@ class Hooker
|
|
103
147
|
end
|
104
148
|
STDERR.print 'Open which bookmark: '
|
105
149
|
sel = STDIN.gets.strip.to_i
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
warn 'Invalid selection'
|
110
|
-
Process.exit 1
|
111
|
-
end
|
150
|
+
raise 'Invalid selection' unless sel.positive? && sel <= marks.length
|
151
|
+
|
152
|
+
marks[sel - 1]
|
112
153
|
end
|
113
154
|
|
114
155
|
def open_gui(url)
|
data/lib/hook/version.rb
CHANGED