Commit 5a8c718
Changed files (4)
lib/elelem/builtins/terminal.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Elelem
+ module Builtins
+ class Terminal < Elelem::Terminal
+ def display_file(path, fallback: nil)
+ system("bat", "--paging=never", path) || say(fallback || path)
+ end
+
+ private
+
+ def render(text, as)
+ return super unless as == :markdown
+
+ gap
+ width = $stdout.winsize[1] rescue 80
+ IO.popen(["glow", "-s", "dark", "-w", width.to_s, "-"], "r+") do |io|
+ io.write(text)
+ io.close_write
+ io.read
+ end
+ rescue Errno::ENOENT
+ text
+ end
+
+ def write(text)
+ super
+ (@transcript ||= open_transcript).print text
+ end
+
+ def open_transcript
+ state_dir = File.join(ENV.fetch("XDG_STATE_HOME", File.expand_path("~/.local/state")), "elelem", "sessions")
+ FileUtils.mkdir_p(state_dir)
+ 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
+ end
+ end
+end
+
+Elelem.configure { |config| config.output { Elelem::Builtins::Terminal.new } }
lib/elelem/builtins.rb
@@ -70,3 +70,4 @@ require_relative "builtins/tools"
require_relative "builtins/read"
require_relative "builtins/write"
require_relative "builtins/execute"
+require_relative "builtins/terminal"
elelem-builtins.gemspec
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
end
spec.require_paths = ["lib"]
- spec.add_dependency "elelem", "~> 0.12"
+ spec.add_dependency "elelem", "~> 0.13"
spec.add_dependency "fileutils", "~> 1.8"
spec.add_dependency "json", "~> 2.21"
spec.add_dependency "open3", "~> 0.2"
Gemfile.lock
@@ -2,7 +2,7 @@ PATH
remote: .
specs:
elelem-builtins (0.1.0)
- elelem (~> 0.11)
+ elelem (~> 0.13)
fileutils (~> 1.8)
json (~> 2.21)
open3 (~> 0.2)
@@ -14,9 +14,8 @@ GEM
specs:
bigdecimal (4.1.2)
diff-lcs (1.6.2)
- elelem (0.11.0)
+ elelem (0.13.0)
erb (~> 6.0)
- fileutils (~> 1.8)
io-console (~> 0.9)
json (~> 2.21)
json_schemer (~> 2.5)
@@ -26,8 +25,6 @@ GEM
pathname (~> 0.5)
reline (~> 0.7)
shellwords (~> 0.2)
- stringio (~> 3.2)
- tempfile (~> 0.3)
uri (~> 1.0)
erb (6.0.7)
fileutils (1.8.0)
@@ -99,7 +96,7 @@ CHECKSUMS
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
bundler (4.0.20) sha256=7978a8ac648767f5e635bc522445b79e80a52b907a39a36c2d8085ed6bc762ae
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
- elelem (0.11.0)
+ elelem (0.13.0)
elelem-builtins (0.1.0)
erb (6.0.7) sha256=c5ca6dc25b0ef974a44dc8f59fe847577122483b1968a38dec305c60bf91ee92
fileutils (1.8.0) sha256=8c6b1df54e2540bdb2f39258f08af78853aa70bad52b4d394bbc6424593c6e02