howzit 2.0.25 → 2.0.28
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/.travis.yml +1 -0
- data/CHANGELOG.md +24 -0
- data/lib/howzit/prompt.rb +64 -37
- data/lib/howzit/task.rb +20 -17
- data/lib/howzit/topic.rb +7 -1
- data/lib/howzit/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c2a724cc90c349de14afa896512a32d69bcf2fa44575f69e74b0a6f96d615ebb
|
|
4
|
+
data.tar.gz: 73c54a8893fa66784575235d329ad698da6e7a34a2741e09d2d93149b118f68a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4d4c9e0c7e5c78f10479cea93dffa09fdf768d335210897feb127f849040bced7a05924a60f6621173ececb1fde116fe5a3ecc79270767c12718b1a1f9742281
|
|
7
|
+
data.tar.gz: ff2c18f91883cf4f3b6035b8b304a23575381fd1b9a74333781db8ac000b13d03eb43969bb80d964e3dafeec3556a2152392b2eb074a34561981753233e1fc9e
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
### 2.0.28
|
|
2
|
+
|
|
3
|
+
2022-08-29 18:42
|
|
4
|
+
|
|
5
|
+
#### IMPROVED
|
|
6
|
+
|
|
7
|
+
- If a topic runs multiple directives, stop processing them if one returns a non-zero exit status
|
|
8
|
+
|
|
9
|
+
### 2.0.27
|
|
10
|
+
|
|
11
|
+
2022-08-23 12:25
|
|
12
|
+
|
|
13
|
+
#### IMPROVED
|
|
14
|
+
|
|
15
|
+
- Code cleanup
|
|
16
|
+
|
|
17
|
+
### 2.0.26
|
|
18
|
+
|
|
19
|
+
2022-08-23 11:36
|
|
20
|
+
|
|
21
|
+
#### IMPROVED
|
|
22
|
+
|
|
23
|
+
- Add ctrl-a/d bindings to fzf menu for select/deselect all
|
|
24
|
+
|
|
1
25
|
### 2.0.25
|
|
2
26
|
|
|
3
27
|
2022-08-09 12:46
|
data/lib/howzit/prompt.rb
CHANGED
|
@@ -87,59 +87,86 @@ module Howzit
|
|
|
87
87
|
return [] if !$stdout.isatty || matches.count.zero?
|
|
88
88
|
|
|
89
89
|
if Util.command_exist?('fzf')
|
|
90
|
-
height =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
TTY::Screen.rows
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
settings = [
|
|
97
|
-
'-0',
|
|
98
|
-
'-1',
|
|
99
|
-
'-m',
|
|
100
|
-
"--height=#{height}",
|
|
101
|
-
'--header="Use tab to mark multiple selections, enter to display/run"',
|
|
102
|
-
'--prompt="Select a section > "',
|
|
103
|
-
%(--preview="howzit --no-pager --header-format block --no-color --default --multiple first {}")
|
|
104
|
-
]
|
|
90
|
+
height = height == :auto ? matches.count + 3 : TTY::Screen.rows
|
|
91
|
+
|
|
92
|
+
settings = fzf_options(height)
|
|
105
93
|
res = `echo #{Shellwords.escape(matches.join("\n"))} | fzf #{settings.join(' ')}`.strip
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
94
|
+
return fzf_result(res)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
tty_menu(matches)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def fzf_result(res)
|
|
101
|
+
if res.nil? || res.empty?
|
|
102
|
+
Howzit.console.info 'Cancelled'
|
|
103
|
+
Process.exit 0
|
|
111
104
|
end
|
|
105
|
+
return res.split(/\n/)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def fzf_options(height)
|
|
109
|
+
[
|
|
110
|
+
'-0',
|
|
111
|
+
'-1',
|
|
112
|
+
'-m',
|
|
113
|
+
"--height=#{height}",
|
|
114
|
+
'--header="Tab: add selection, ctrl-a/d: (de)select all, return: display/run"',
|
|
115
|
+
'--bind ctrl-a:select-all,ctrl-d:deselect-all,ctrl-t:toggle-all',
|
|
116
|
+
'--prompt="Select a topic > "',
|
|
117
|
+
%(--preview="howzit --no-pager --header-format block --no-color --default --multiple first {}")
|
|
118
|
+
]
|
|
119
|
+
end
|
|
112
120
|
|
|
121
|
+
##
|
|
122
|
+
## Display a numeric menu on the TTY
|
|
123
|
+
##
|
|
124
|
+
## @param matches The matches from which to select
|
|
125
|
+
##
|
|
126
|
+
def tty_menu(matches)
|
|
113
127
|
return matches if matches.count == 1
|
|
114
128
|
|
|
115
|
-
|
|
116
|
-
stty_save = `stty -g`.chomp
|
|
129
|
+
@stty_save = `stty -g`.chomp
|
|
117
130
|
|
|
118
131
|
trap('INT') do
|
|
119
|
-
system('stty'
|
|
132
|
+
system('stty')
|
|
120
133
|
exit
|
|
121
134
|
end
|
|
122
135
|
|
|
123
136
|
options_list(matches)
|
|
137
|
+
read_selection(matches)
|
|
138
|
+
end
|
|
124
139
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
##
|
|
141
|
+
## Read a single number response from the command line
|
|
142
|
+
##
|
|
143
|
+
## @param matches The matches
|
|
144
|
+
##
|
|
145
|
+
def read_selection(matches)
|
|
146
|
+
printf "Type 'q' to cancel, enter for first item"
|
|
147
|
+
while (line = Readline.readline(': ', true))
|
|
148
|
+
line = read_num(line)
|
|
133
149
|
|
|
134
|
-
|
|
150
|
+
return [matches[line - 1]] if line.positive? && line <= matches.length
|
|
135
151
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
152
|
+
puts 'Out of range'
|
|
153
|
+
read_selection(matches)
|
|
154
|
+
end
|
|
155
|
+
ensure
|
|
156
|
+
system('stty', @stty_save)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
##
|
|
160
|
+
## Convert a response to an Integer
|
|
161
|
+
##
|
|
162
|
+
## @param line The response to convert
|
|
163
|
+
##
|
|
164
|
+
def read_num(line)
|
|
165
|
+
if line =~ /^[a-z]/i
|
|
166
|
+
system('stty', @stty_save) # Restore
|
|
141
167
|
exit
|
|
142
168
|
end
|
|
169
|
+
line == '' ? 1 : line.to_i
|
|
143
170
|
end
|
|
144
171
|
end
|
|
145
172
|
end
|
data/lib/howzit/task.rb
CHANGED
|
@@ -56,11 +56,13 @@ module Howzit
|
|
|
56
56
|
script.write(block)
|
|
57
57
|
script.close
|
|
58
58
|
File.chmod(0o777, script.path)
|
|
59
|
-
system(%(/bin/sh -c "#{script.path}"))
|
|
59
|
+
res = system(%(/bin/sh -c "#{script.path}"))
|
|
60
60
|
ensure
|
|
61
61
|
script.close
|
|
62
62
|
script.unlink
|
|
63
63
|
end
|
|
64
|
+
|
|
65
|
+
res
|
|
64
66
|
end
|
|
65
67
|
|
|
66
68
|
##
|
|
@@ -85,7 +87,7 @@ module Howzit
|
|
|
85
87
|
def run_run
|
|
86
88
|
title = Howzit.options[:show_all_code] ? @action : @title
|
|
87
89
|
Howzit.console.info("{bg}Running {bw}#{title}{x}".c)
|
|
88
|
-
system(@action)
|
|
90
|
+
return system(@action)
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
##
|
|
@@ -95,6 +97,7 @@ module Howzit
|
|
|
95
97
|
title = Howzit.options[:show_all_code] ? @action : @title
|
|
96
98
|
Howzit.console.info("{bg}Copied {bw}#{title}{bg} to clipboard{x}".c)
|
|
97
99
|
Util.os_copy(@action)
|
|
100
|
+
return true
|
|
98
101
|
end
|
|
99
102
|
|
|
100
103
|
##
|
|
@@ -103,22 +106,22 @@ module Howzit
|
|
|
103
106
|
def run
|
|
104
107
|
output = []
|
|
105
108
|
tasks = 1
|
|
106
|
-
if @type == :block
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
109
|
+
res = if @type == :block
|
|
110
|
+
run_block
|
|
111
|
+
else
|
|
112
|
+
case @type
|
|
113
|
+
when :include
|
|
114
|
+
output, tasks = run_include
|
|
115
|
+
when :run
|
|
116
|
+
run_run
|
|
117
|
+
when :copy
|
|
118
|
+
run_copy
|
|
119
|
+
when :open
|
|
120
|
+
Util.os_open(@action)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
120
123
|
|
|
121
|
-
[output, tasks]
|
|
124
|
+
[output, tasks, res]
|
|
122
125
|
end
|
|
123
126
|
|
|
124
127
|
##
|
data/lib/howzit/topic.rb
CHANGED
|
@@ -63,9 +63,15 @@ module Howzit
|
|
|
63
63
|
next unless res
|
|
64
64
|
|
|
65
65
|
end
|
|
66
|
-
run_output, total = task.run
|
|
66
|
+
run_output, total, success = task.run
|
|
67
|
+
|
|
67
68
|
output.concat(run_output)
|
|
68
69
|
tasks += total
|
|
70
|
+
|
|
71
|
+
unless success
|
|
72
|
+
Howzit.console.warn '{br}Error running task{bw} - non-zero exit, ending processing{x}'.c
|
|
73
|
+
break
|
|
74
|
+
end
|
|
69
75
|
end
|
|
70
76
|
else
|
|
71
77
|
Howzit.console.warn "{r}--run: No {br}@directive{xr} found in {bw}#{@title}{x}".c
|
data/lib/howzit/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: howzit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.28
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brett Terpstra
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-08-
|
|
11
|
+
date: 2022-08-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|