hackmac 1.3.0 → 1.4.1
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/VERSION +1 -1
- data/bin/gfxmon +5 -5
- data/hackmac.gemspec +5 -5
- data/lib/hackmac/graph/display.rb +200 -0
- data/lib/hackmac/graph.rb +90 -65
- data/lib/hackmac/utils.rb +5 -6
- data/lib/hackmac/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52eecabaaacf4b30bdfd2c2d49ca2521d45dd81da1c75f1b3a02af4b94a0d01c
|
4
|
+
data.tar.gz: d84925f226ff82966a7a42f21143ee273715f013ed7907ab3f28273797b241f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b13786a08e87c4f162d3ce6090115c286f3feaa476aedf354d94e6a74f4e4fb225769d4fb2a3c304eec4fa77423b96e19b5f401ee0631604e4fda816d1c51b8
|
7
|
+
data.tar.gz: b6bb795279266902645e82382f253c050d2eb0d74c0f2c3ad91f7cf02334f28767727baa86b49d99d9c46081f987c3f12034330b87a7e6a4dd6a5581ef1f57fd
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.1
|
data/bin/gfxmon
CHANGED
@@ -13,7 +13,7 @@ require 'amatch'
|
|
13
13
|
require 'search_ui'
|
14
14
|
include SearchUI
|
15
15
|
|
16
|
-
$opts = go 'c:
|
16
|
+
$opts = go 'c:m:n:jlh', defaults: { ?s => true, ?n => 5 }
|
17
17
|
|
18
18
|
def usage
|
19
19
|
puts <<~end
|
@@ -25,7 +25,7 @@ def usage
|
|
25
25
|
-l output GPU performance data as list
|
26
26
|
-j output GPU performance data as json
|
27
27
|
-n SECONDS measure every SECONDS
|
28
|
-
-
|
28
|
+
-m METRIC output graph for performance METRIC
|
29
29
|
-c COLOR output graph in this terminal COLOR (between 0 - 255)
|
30
30
|
|
31
31
|
end
|
@@ -47,14 +47,14 @@ end
|
|
47
47
|
|
48
48
|
def list(ps)
|
49
49
|
max = ps.keys.max_by(&:size)&.size&.to_i
|
50
|
-
|
50
|
+
include Hackmac::Graph::Formatters
|
51
51
|
puts ps.map { |n, v|
|
52
|
-
("%-#{max}s" % n) + " " + ("%s" %
|
52
|
+
("%-#{max}s" % n) + " " + ("%s" % send(derive_formatter(n), v)).bold
|
53
53
|
}
|
54
54
|
end
|
55
55
|
|
56
56
|
def choose_metric(ps)
|
57
|
-
case metric = $opts[?
|
57
|
+
case metric = $opts[?m]
|
58
58
|
when nil
|
59
59
|
ps_names = ps.keys
|
60
60
|
metric = Search.new(
|
data/hackmac.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: hackmac 1.
|
2
|
+
# stub: hackmac 1.4.1 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "hackmac".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.4.1"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2023-05-
|
11
|
+
s.date = "2023-05-28"
|
12
12
|
s.description = "This ruby gem provides some useful tools for working with a Hackintosh.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["efi".freeze, "gfxmon".freeze, "usb".freeze]
|
15
|
-
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
-
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
15
|
+
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/graph/display.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
+
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/graph/display.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
17
17
|
s.homepage = "http://github.com/flori/hackmac".freeze
|
18
18
|
s.rdoc_options = ["--title".freeze, "Hackmac - Some useful tools for working with a Hackintosh".freeze, "--main".freeze, "README.md".freeze]
|
19
19
|
s.rubygems_version = "3.3.26".freeze
|
@@ -0,0 +1,200 @@
|
|
1
|
+
class Hackmac::Graph
|
2
|
+
class Display
|
3
|
+
ANSI = Term::ANSIColor
|
4
|
+
|
5
|
+
class Cell < Struct.new(:char, :color, :on_color, :styles)
|
6
|
+
def ==(other)
|
7
|
+
to_a == other.to_a
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
ANSI.color(color) {
|
12
|
+
ANSI.on_color(on_color) {
|
13
|
+
styles.inject(char) { |c, s|
|
14
|
+
ANSI.send(s) { c }
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(lines, columns)
|
22
|
+
@lines_range = 1..lines
|
23
|
+
@columns_range = 1..columns
|
24
|
+
clear
|
25
|
+
end
|
26
|
+
|
27
|
+
def clear
|
28
|
+
@x = 1
|
29
|
+
@y = 1
|
30
|
+
@color = 15
|
31
|
+
@on_color = 0
|
32
|
+
@styles = []
|
33
|
+
@cells =
|
34
|
+
Array.new(lines) {
|
35
|
+
Array.new(columns) {
|
36
|
+
Cell.new(' ', @color, @on_color, @styles)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
reset
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset
|
43
|
+
@color = 15
|
44
|
+
@on_color = 0
|
45
|
+
@styles = []
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def each(&block)
|
50
|
+
Enumerator.new do |enum|
|
51
|
+
@lines_range.each do |y|
|
52
|
+
@columns_range.each do |x|
|
53
|
+
enum.yield y, x, @cells[y - 1][x - 1]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end.each(&block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def -(old)
|
60
|
+
dimensions != old.dimensions and raise ArgumentError,
|
61
|
+
"old dimensions #{old.dimensions.inspect} don't match #{dimensions.inspect}"
|
62
|
+
result = ''
|
63
|
+
each.zip(old.each) do |(my, mx, me), (_, _, old)|
|
64
|
+
if me != old
|
65
|
+
result << ANSI.move_to(my, mx) << me.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
result
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_s
|
72
|
+
each.inject(ANSI.clear_screen) do |s, (y, x, c)|
|
73
|
+
s << ANSI.move_to(y, x) << c.to_s
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def inspect
|
78
|
+
"#<#{self.class}: #{columns}×#{lines}>"
|
79
|
+
end
|
80
|
+
|
81
|
+
attr_reader :x
|
82
|
+
|
83
|
+
attr_reader :y
|
84
|
+
|
85
|
+
def lines
|
86
|
+
@lines_range.end
|
87
|
+
end
|
88
|
+
|
89
|
+
def columns
|
90
|
+
@columns_range.end
|
91
|
+
end
|
92
|
+
|
93
|
+
def dimensions
|
94
|
+
[ lines, columns ]
|
95
|
+
end
|
96
|
+
|
97
|
+
def styled(*s)
|
98
|
+
if nope = s.find { !style?(_1) }
|
99
|
+
raise ArgumentError, "#{nope} is not a style"
|
100
|
+
end
|
101
|
+
@styles = s
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
105
|
+
def at(y, x)
|
106
|
+
@lines_range.include?(y) or
|
107
|
+
raise ArgumentError, "y #{y} out of lines range #@lines_range"
|
108
|
+
@columns_range.include?(x) or
|
109
|
+
raise ArgumentError, "x #{x} out of columns range #@columns_range"
|
110
|
+
@y, @x = y, x
|
111
|
+
self
|
112
|
+
end
|
113
|
+
|
114
|
+
def put(char)
|
115
|
+
char.size == 1 or
|
116
|
+
raise ArgumentError, "#{char} is not single character"
|
117
|
+
@cells[@y - 1][@x - 1] = Cell.new(char, @color, @on_color, @styles)
|
118
|
+
self
|
119
|
+
end
|
120
|
+
|
121
|
+
def write(string)
|
122
|
+
string.each_char do |char|
|
123
|
+
put(char)
|
124
|
+
if x < columns - 1
|
125
|
+
at(y, x + 1)
|
126
|
+
else
|
127
|
+
break
|
128
|
+
end
|
129
|
+
end
|
130
|
+
self
|
131
|
+
end
|
132
|
+
|
133
|
+
def top
|
134
|
+
at(1, x)
|
135
|
+
end
|
136
|
+
|
137
|
+
def bottom
|
138
|
+
at(lines, x)
|
139
|
+
end
|
140
|
+
|
141
|
+
def left
|
142
|
+
at(y, 1)
|
143
|
+
end
|
144
|
+
|
145
|
+
def right
|
146
|
+
at(y, columns)
|
147
|
+
end
|
148
|
+
|
149
|
+
def centered
|
150
|
+
at(lines / 2, columns / 2)
|
151
|
+
end
|
152
|
+
|
153
|
+
def write_centered(string)
|
154
|
+
at(@y, (columns - string.size) / 2).write(string)
|
155
|
+
end
|
156
|
+
|
157
|
+
def get
|
158
|
+
@cells[@y - 1][@x - 1]
|
159
|
+
end
|
160
|
+
|
161
|
+
def color(color)
|
162
|
+
@color = attribute!(color)
|
163
|
+
self
|
164
|
+
end
|
165
|
+
|
166
|
+
def on_color(on_color)
|
167
|
+
@on_color = attribute!(on_color)
|
168
|
+
self
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def style?(s)
|
174
|
+
[
|
175
|
+
:bold,
|
176
|
+
:dark,
|
177
|
+
:faint,
|
178
|
+
:italic,
|
179
|
+
:underline,
|
180
|
+
:underscore,
|
181
|
+
:blink,
|
182
|
+
:rapid_blink,
|
183
|
+
:reverse,
|
184
|
+
:negative,
|
185
|
+
:concealed,
|
186
|
+
:conceal,
|
187
|
+
:strikethrough,
|
188
|
+
].member?(s)
|
189
|
+
end
|
190
|
+
|
191
|
+
def attribute?(a)
|
192
|
+
Term::ANSIColor::Attribute[a]
|
193
|
+
end
|
194
|
+
|
195
|
+
def attribute!(a)
|
196
|
+
attribute?(a) or
|
197
|
+
raise ArgumentError, "#{a.inspect} is not a color attribute"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
data/lib/hackmac/graph.rb
CHANGED
@@ -4,7 +4,39 @@ require 'tins'
|
|
4
4
|
class Hackmac::Graph
|
5
5
|
include Term::ANSIColor
|
6
6
|
|
7
|
-
|
7
|
+
include\
|
8
|
+
module Formatters
|
9
|
+
def as_bytes(value)
|
10
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'B')
|
11
|
+
end
|
12
|
+
|
13
|
+
def as_hertz(value)
|
14
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'Hz')
|
15
|
+
end
|
16
|
+
|
17
|
+
def as_celsius(value)
|
18
|
+
"#{value}°"
|
19
|
+
end
|
20
|
+
|
21
|
+
def as_percent(value)
|
22
|
+
"#{value}%"
|
23
|
+
end
|
24
|
+
|
25
|
+
def as_default(value)
|
26
|
+
value.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(
|
33
|
+
title:,
|
34
|
+
value: -> i { 0 },
|
35
|
+
format_value: nil,
|
36
|
+
sleep: nil,
|
37
|
+
color: nil
|
38
|
+
)
|
39
|
+
sleep >= 0 or raise ArgumentError, 'sleep has to be >= 0'
|
8
40
|
@title = title
|
9
41
|
@value = value
|
10
42
|
@format_value = format_value
|
@@ -12,13 +44,12 @@ class Hackmac::Graph
|
|
12
44
|
@continue = false
|
13
45
|
@data = []
|
14
46
|
@color = color
|
47
|
+
@mutex = Mutex.new
|
15
48
|
end
|
16
49
|
|
17
50
|
def start
|
18
51
|
install_handlers
|
19
52
|
full_reset
|
20
|
-
perform hide_cursor
|
21
|
-
@continue = true
|
22
53
|
start_loop
|
23
54
|
end
|
24
55
|
|
@@ -34,42 +65,45 @@ class Hackmac::Graph
|
|
34
65
|
color = pick_color
|
35
66
|
color_light = color.to_rgb_triple.to_hsl_triple.lighten(15) rescue color
|
36
67
|
i = 0
|
68
|
+
@continue = true
|
37
69
|
while @continue
|
38
|
-
@
|
70
|
+
@full_reset and full_reset
|
71
|
+
perform hide_cursor
|
39
72
|
|
40
73
|
@data << @value.(i)
|
41
|
-
@data = data.last(
|
74
|
+
@data = data.last(columns)
|
42
75
|
|
43
76
|
y_width = (data.max - data.min).to_f
|
44
77
|
if y_width == 0
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
maybe_sleep
|
78
|
+
@display.reset.bottom.styled(:bold).
|
79
|
+
write_centered("#@title / #{sleep_duration}").
|
80
|
+
reset.centered.styled(:italic).write_centered("no data")
|
81
|
+
perform_display_diff
|
82
|
+
sleep_now
|
51
83
|
next
|
52
84
|
end
|
53
85
|
|
54
|
-
|
86
|
+
@display.reset
|
55
87
|
data.each_with_index do |value, x|
|
56
|
-
x = x +
|
88
|
+
x = x + columns - data.size + 1
|
57
89
|
y = lines - (((value - data.min) * lines / y_width)).round + 1
|
58
90
|
y.upto(lines) do |iy|
|
59
|
-
|
91
|
+
@display.at(iy, x).on_color(
|
92
|
+
y == iy ? color : color_light
|
93
|
+
).write(' ')
|
60
94
|
end
|
61
95
|
end
|
62
96
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
97
|
+
@display.reset.bottom.styled(:bold).
|
98
|
+
write_centered("#@title #{format_value(data.last)} / #{sleep_duration}")
|
99
|
+
@display.reset.styled(:bold).
|
100
|
+
left.top.write(format_value(data.max)).
|
101
|
+
left.bottom.write(format_value(data.min))
|
68
102
|
|
69
|
-
|
103
|
+
perform_display_diff
|
104
|
+
sleep_now
|
70
105
|
end
|
71
|
-
|
72
|
-
rescue *[ Interrupt, defined?(IRB::Abort) && IRB::Abort ].compact
|
106
|
+
ensure
|
73
107
|
stop
|
74
108
|
end
|
75
109
|
|
@@ -77,18 +111,18 @@ class Hackmac::Graph
|
|
77
111
|
print *a
|
78
112
|
end
|
79
113
|
|
80
|
-
|
114
|
+
def columns
|
115
|
+
@display.columns
|
116
|
+
end
|
81
117
|
|
82
|
-
|
118
|
+
def lines
|
119
|
+
@display.lines
|
120
|
+
end
|
83
121
|
|
84
122
|
attr_reader :data
|
85
123
|
|
86
|
-
def as_title(text)
|
87
|
-
move_to(lines, (cols - text.size) / 2) { bold{text} }
|
88
|
-
end
|
89
|
-
|
90
124
|
def sleep_duration
|
91
|
-
|
125
|
+
"#{@sleep}s"
|
92
126
|
end
|
93
127
|
|
94
128
|
def format_value(value)
|
@@ -102,26 +136,6 @@ class Hackmac::Graph
|
|
102
136
|
end
|
103
137
|
end
|
104
138
|
|
105
|
-
def as_bytes(value)
|
106
|
-
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'B')
|
107
|
-
end
|
108
|
-
|
109
|
-
def as_hertz(value)
|
110
|
-
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'Hz')
|
111
|
-
end
|
112
|
-
|
113
|
-
def as_celsius(value)
|
114
|
-
"#{value}°"
|
115
|
-
end
|
116
|
-
|
117
|
-
def as_percent(value)
|
118
|
-
"#{value}%"
|
119
|
-
end
|
120
|
-
|
121
|
-
def as_default(value)
|
122
|
-
value.to_s
|
123
|
-
end
|
124
|
-
|
125
139
|
def pick_color
|
126
140
|
Term::ANSIColor::Attribute[
|
127
141
|
case @color
|
@@ -139,14 +153,22 @@ class Hackmac::Graph
|
|
139
153
|
]
|
140
154
|
end
|
141
155
|
|
142
|
-
def
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
156
|
+
def sleep_now
|
157
|
+
sleep @sleep
|
158
|
+
end
|
159
|
+
|
160
|
+
def perform_display_diff
|
161
|
+
@mutex.synchronize do
|
162
|
+
unless @old_display && @old_display.dimensions == @display.dimensions
|
163
|
+
@old_display = @display.dup.clear
|
164
|
+
end
|
165
|
+
perform @display - @old_display
|
166
|
+
@display, @old_display = @old_display.clear, @display
|
167
|
+
perform move_to(lines, columns)
|
147
168
|
end
|
148
169
|
end
|
149
170
|
|
171
|
+
|
150
172
|
def normalize_value(value)
|
151
173
|
case value
|
152
174
|
when Float
|
@@ -157,20 +179,23 @@ class Hackmac::Graph
|
|
157
179
|
end
|
158
180
|
|
159
181
|
def full_reset
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
182
|
+
@mutex.synchronize do
|
183
|
+
perform reset, clear_screen, move_home, show_cursor
|
184
|
+
winsize = Tins::Terminal.winsize
|
185
|
+
@display = Hackmac::Graph::Display.new(*winsize)
|
186
|
+
@old_display = Hackmac::Graph::Display.new(*winsize)
|
187
|
+
perform @display
|
188
|
+
@full_reset = false
|
189
|
+
end
|
165
190
|
end
|
166
191
|
|
167
192
|
def install_handlers
|
168
193
|
at_exit { full_reset }
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
move_to(lines / 2, (cols - "Zzz…".size) / 2) { "Zzz…".italic }
|
174
|
-
}
|
194
|
+
trap(:SIGWINCH) do
|
195
|
+
@full_reset = true
|
196
|
+
perform reset, clear_screen, move_home, 'Zzz…'
|
197
|
+
end
|
175
198
|
end
|
176
199
|
end
|
200
|
+
|
201
|
+
require 'hackmac/graph/display'
|
data/lib/hackmac/utils.rb
CHANGED
@@ -13,17 +13,16 @@ module Hackmac
|
|
13
13
|
|
14
14
|
def x(cmd, verbose: true)
|
15
15
|
prompt = cmd =~ /\A\s*sudo/ ? ?# : ?$
|
16
|
+
print "#{prompt} #{cmd}".color(27)
|
17
|
+
puts verbose ? "" : " >/dev/null".yellow
|
16
18
|
output = `#{cmd} 2>&1`
|
17
19
|
if $?.success?
|
18
|
-
|
19
|
-
puts verbose ? "" : " >/dev/null".yellow
|
20
|
+
puts "✅ Command succeded!".green
|
20
21
|
else
|
21
|
-
|
22
|
-
puts verbose ? "" : " >/dev/null".yellow
|
23
|
-
STDERR.puts "command #{cmd.inspect} failed with exit status #{$?.exitstatus}".on_red.white
|
22
|
+
puts "⚠️ Command #{cmd.inspect} failed with exit status #{$?.exitstatus}".on_red.white
|
24
23
|
end
|
25
24
|
if verbose
|
26
|
-
|
25
|
+
puts output.italic
|
27
26
|
end
|
28
27
|
output
|
29
28
|
end
|
data/lib/hackmac/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hackmac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -151,6 +151,7 @@ extra_rdoc_files:
|
|
151
151
|
- lib/hackmac/disks.rb
|
152
152
|
- lib/hackmac/github_source.rb
|
153
153
|
- lib/hackmac/graph.rb
|
154
|
+
- lib/hackmac/graph/display.rb
|
154
155
|
- lib/hackmac/kext.rb
|
155
156
|
- lib/hackmac/kext_upgrader.rb
|
156
157
|
- lib/hackmac/oc.rb
|
@@ -176,6 +177,7 @@ files:
|
|
176
177
|
- lib/hackmac/disks.rb
|
177
178
|
- lib/hackmac/github_source.rb
|
178
179
|
- lib/hackmac/graph.rb
|
180
|
+
- lib/hackmac/graph/display.rb
|
179
181
|
- lib/hackmac/hackmac.yml
|
180
182
|
- lib/hackmac/kext.rb
|
181
183
|
- lib/hackmac/kext_upgrader.rb
|