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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9add550f4e090bdfedad12f0ace36276ab00db2f2c1c1af51d0dd2c2dfaef8c
4
- data.tar.gz: 3e1dc2c8c59c56b273161578ac5628fdfac317f2a0cbca3566ea878255d4610a
3
+ metadata.gz: b41ef11c2e8c30daf67e765f1af94fc1110750fb968ec18104d72bc2d528a15e
4
+ data.tar.gz: 76999276f5b96d1175eb168b2045529875ab4830f35f12324a2ea4591550a1fb
5
5
  SHA512:
6
- metadata.gz: '08a66e554544c36454bdc6f99e0987ddbda1072a4216acd9b34a3b9201cd73c204a40504e6e0ceef8c37bafca13086530ac5213116954b5268b334f362d376f2'
7
- data.tar.gz: 8cae217a61971f7f9b572ee88e58969b2b1cdfd2b6020dd03f0192406059350556649498823be467f874cf5535be2579f393d01d23151f714c1ae645297884e1
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 < Elelem::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 super unless as == :markdown
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
- super
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Elelem
4
4
  module Builtins
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elelem-builtins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan