Comparing changes
v0.2.0
→
v0.3.0
2 commits
3 files changed
Commits
Changed files (3)
lib
elelem
builtins
lib/elelem/builtins/terminal.rb
@@ -2,7 +2,50 @@
module Elelem
module Builtins
- class Terminal < Elelem::Terminal
+ class Terminal
+ def initialize(stream: $stdout, **)
+ @stream = stream
+ @dots_thread = nil
+ @at_line_start = true
+ end
+
+ def say(text, as: nil)
+ stop_dots
+ return if blank?(text)
+
+ text = render(text, as) if as
+ write "#{text}\n"
+ @at_line_start = true
+ end
+
+ def print(text)
+ stop_dots
+ return if blank?(text)
+
+ write text
+ @at_line_start = false
+ end
+
+ def thinking(text)
+ print("\e[2;3m#{text}\e[0m") unless blank?(text)
+ end
+
+ def doing(name, args, state: "+")
+ gap
+ say "#{state} \e[36m#{name}\e[0m(#{args})"
+ end
+
+ def waiting
+ stop_dots
+ @dots_thread = Thread.new do
+ loop do
+ @stream.print "."
+ @stream.flush
+ sleep 0.1
+ end
+ end
+ end
+
def display_file(path, fallback: nil)
system("bat", "--paging=never", path) || say(fallback || path)
end
@@ -10,7 +53,8 @@ module Elelem
private
def render(text, as)
- return super unless as == :markdown
+ return "\n ✗ #{text}" if as == :error
+ return text unless as == :markdown
gap
width = @stream.winsize[1] rescue 80
@@ -23,8 +67,23 @@ module Elelem
text
end
+ def gap
+ stop_dots
+ write("\n") unless @at_line_start
+ @at_line_start = true
+ end
+
+ def stop_dots
+ return unless @dots_thread
+
+ @dots_thread.kill
+ @dots_thread = nil
+ write("\n")
+ @at_line_start = true
+ end
+
def write(text)
- super
+ @stream.print text
(@transcript ||= open_transcript).print text
end
@@ -34,6 +93,10 @@ module Elelem
session_id = "#{Time.now.utc.strftime("%Y%m%dT%H%M%SZ")}-#{Process.pid}"
File.open(File.join(state_dir, "#{session_id}.transcript"), "a").tap { |f| f.sync = true }
end
+
+ def blank?(text)
+ text.nil? || text.to_s.strip.empty?
+ end
end
end
end
lib/elelem/builtins/version.rb
@@ -2,6 +2,6 @@
module Elelem
module Builtins
- VERSION = "0.2.0"
+ VERSION = "0.3.0"
end
end
Gemfile.lock
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
- elelem-builtins (0.2.0)
+ elelem-builtins (0.3.0)
elelem (~> 0.13)
fileutils (~> 1.8)
json (~> 3.0)
@@ -97,7 +97,7 @@ CHECKSUMS
bundler (4.0.20) sha256=7978a8ac648767f5e635bc522445b79e80a52b907a39a36c2d8085ed6bc762ae
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
elelem (0.13.0)
- elelem-builtins (0.2.0)
+ elelem-builtins (0.3.0)
erb (6.0.7) sha256=c5ca6dc25b0ef974a44dc8f59fe847577122483b1968a38dec305c60bf91ee92
fileutils (1.8.0) sha256=8c6b1df54e2540bdb2f39258f08af78853aa70bad52b4d394bbc6424593c6e02
hana (1.3.7) sha256=5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d