elelem-builtins 0.2.0 → 0.3.0
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/lib/elelem/builtins/terminal.rb +66 -3
- data/lib/elelem/builtins/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: b41ef11c2e8c30daf67e765f1af94fc1110750fb968ec18104d72bc2d528a15e
|
|
4
|
+
data.tar.gz: 76999276f5b96d1175eb168b2045529875ab4830f35f12324a2ea4591550a1fb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c377b50943111b9792a4ed781823718d231b40fb88da5b30bf535cdb805f392c5c12ce4cf5afb2b48a5422f663095bbedf1b0054297e5192a38f4e398df54c0b
|
|
7
|
+
data.tar.gz: 91a3816d6982f4ae34a908dadf5e63923165d9aa6d521334c4c06e8c090992e448bb14efb334bec92de01ac9d746ff44935de0bd08a66006c44a0cd99f4aff87
|
|
@@ -2,7 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
module Elelem
|
|
4
4
|
module Builtins
|
|
5
|
-
class Terminal
|
|
5
|
+
class Terminal
|
|
6
|
+
def initialize(stream: $stdout, **)
|
|
7
|
+
@stream = stream
|
|
8
|
+
@dots_thread = nil
|
|
9
|
+
@at_line_start = true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def say(text, as: nil)
|
|
13
|
+
stop_dots
|
|
14
|
+
return if blank?(text)
|
|
15
|
+
|
|
16
|
+
text = render(text, as) if as
|
|
17
|
+
write "#{text}\n"
|
|
18
|
+
@at_line_start = true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def print(text)
|
|
22
|
+
stop_dots
|
|
23
|
+
return if blank?(text)
|
|
24
|
+
|
|
25
|
+
write text
|
|
26
|
+
@at_line_start = false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def thinking(text)
|
|
30
|
+
print("\e[2;3m#{text}\e[0m") unless blank?(text)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def doing(name, args, state: "+")
|
|
34
|
+
gap
|
|
35
|
+
say "#{state} \e[36m#{name}\e[0m(#{args})"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def waiting
|
|
39
|
+
stop_dots
|
|
40
|
+
@dots_thread = Thread.new do
|
|
41
|
+
loop do
|
|
42
|
+
@stream.print "."
|
|
43
|
+
@stream.flush
|
|
44
|
+
sleep 0.1
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
6
49
|
def display_file(path, fallback: nil)
|
|
7
50
|
system("bat", "--paging=never", path) || say(fallback || path)
|
|
8
51
|
end
|
|
@@ -10,7 +53,8 @@ module Elelem
|
|
|
10
53
|
private
|
|
11
54
|
|
|
12
55
|
def render(text, as)
|
|
13
|
-
return
|
|
56
|
+
return "\n ✗ #{text}" if as == :error
|
|
57
|
+
return text unless as == :markdown
|
|
14
58
|
|
|
15
59
|
gap
|
|
16
60
|
width = @stream.winsize[1] rescue 80
|
|
@@ -23,8 +67,23 @@ module Elelem
|
|
|
23
67
|
text
|
|
24
68
|
end
|
|
25
69
|
|
|
70
|
+
def gap
|
|
71
|
+
stop_dots
|
|
72
|
+
write("\n") unless @at_line_start
|
|
73
|
+
@at_line_start = true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def stop_dots
|
|
77
|
+
return unless @dots_thread
|
|
78
|
+
|
|
79
|
+
@dots_thread.kill
|
|
80
|
+
@dots_thread = nil
|
|
81
|
+
write("\n")
|
|
82
|
+
@at_line_start = true
|
|
83
|
+
end
|
|
84
|
+
|
|
26
85
|
def write(text)
|
|
27
|
-
|
|
86
|
+
@stream.print text
|
|
28
87
|
(@transcript ||= open_transcript).print text
|
|
29
88
|
end
|
|
30
89
|
|
|
@@ -34,6 +93,10 @@ module Elelem
|
|
|
34
93
|
session_id = "#{Time.now.utc.strftime("%Y%m%dT%H%M%SZ")}-#{Process.pid}"
|
|
35
94
|
File.open(File.join(state_dir, "#{session_id}.transcript"), "a").tap { |f| f.sync = true }
|
|
36
95
|
end
|
|
96
|
+
|
|
97
|
+
def blank?(text)
|
|
98
|
+
text.nil? || text.to_s.strip.empty?
|
|
99
|
+
end
|
|
37
100
|
end
|
|
38
101
|
end
|
|
39
102
|
end
|