ansiterm 0.4 → 0.4.2

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: 92d53d94db9dcd9ed7d7369d4b7df040c5da231bfb2985399b783716f12c7fa0
4
- data.tar.gz: 7a50dcdbadfe4cf828de6b98ac674f36052525e0fc5c390a4d018167ccffb4cb
3
+ metadata.gz: 769f26bf92779ce6c3530bd496dc889cccbcbda18b6447472d910b00810749b4
4
+ data.tar.gz: 9f4599f5b8146011dcb6b56101536a14b4a4317baa2f528e3f947170d6c42366
5
5
  SHA512:
6
- metadata.gz: a0c1b315496296dd0a9c6015c5907a0d08eb6d4c4a17756d8ce22f4929b6ff571e448bf9b83a902949be6b625706e9d796d9c59d742f90fb5b0f7b2ffec3c1a9
7
- data.tar.gz: c595e0ca1516a21f033317f997f31981bc6899263ce8407065244d76f8bb41bfe339a5435df048be64a149da36e692bcfc04e695e95cc9664e379a5ed8e7e4e6
6
+ metadata.gz: d2656c8bdee346170e74c725712fe202474cb779d3c74067b9df42769a8fdc736ecc550859a658b1e4f44ff827a5657e49627ab437de464fa5427c8b126cc822
7
+ data.tar.gz: 998ee1fa03b7d442edcd5f2535d9ad8c5ff16ea7c26795e35e9f42a9540b374608194ab3a32aef627e4e6daf4c1b3e85402c548222333052df4e223c38e497f4
@@ -24,7 +24,7 @@ module AnsiTerm
24
24
  end
25
25
 
26
26
  def cls
27
- @lines = (1..@h).map { nil } #AnsiTerm::String.new } #AnsiTerm::String.new("\e[37;40;0m"+(" "*@w)) }
27
+ @lines = (1..@h).map { nil }
28
28
  end
29
29
 
30
30
  def reset
@@ -46,32 +46,30 @@ module AnsiTerm
46
46
  end
47
47
  end
48
48
 
49
- def scroll
50
- while @y >= @h
51
- @lines.shift
52
- @lines << nil #AnsiTerm::String.new #"" #AnsiTerm::String.new("\e[37;40;0m"+(" "*@w))
53
- @y -= 1
54
- end
55
- true
56
- end
57
-
58
49
  def print *args
59
50
  args.each do |str|
60
- @lines[@y] ||= AnsiTerm::String.new("\e[0m")
61
- @dirty << @y
51
+ @lines[@y] ||= AnsiTerm::String.new
62
52
  l = @lines[@y]
63
53
 
64
54
  if l.length < @x
65
55
  l << (" "*(@x - l.length))
66
56
  end
67
- l[@x..@x+str.length] = str
68
- # l[@x] << str
69
- # if @x + s.length > @w
70
- # l[@x .. @w-1] = s[0 .. @w - @x]
71
- # @x = 0
72
- # @y += 1
73
- # scroll if @y >= @h
74
- # end
57
+
58
+ r=@x..@x+str.length-1
59
+ #p [r, str]
60
+ l[r] = str
61
+ end
62
+ end
63
+
64
+ # This scrolls the *buffer* up
65
+ # If you want it to also scroll the *cache*
66
+ # pass `scroll_cache: true`. This will presume
67
+ # that you've scrolled the *terminal* yourself.
68
+ def scroll_up(num=1, scroll_cache: false)
69
+ @lines.slice!(0)
70
+ @lines << AnsiTerm::String.new
71
+ if scroll_cache
72
+ @cache.slice!(0)
75
73
  end
76
74
  end
77
75
 
@@ -81,27 +79,24 @@ module AnsiTerm
81
79
  cachemiss=0
82
80
  @lines.each_with_index do |line,y|
83
81
  line ||= ""
84
- line = line[0..(@w-1)]
82
+ line = line[0..@w]
85
83
  l = line.length
86
- #if l > @w
87
- # $editor&.log("WARNING: #{l} > @w #{@w}")
88
- #end
89
84
  s = line.to_str
90
85
  if @cache[y] != s
91
- out << ANSI.cup(y,0) << s << ANSI.sgr(:reset) << ANSI.el #<< X\n"
86
+ # Move to start of line; output line; clear to end
87
+ #if l > 0
88
+ out << "\e[#{y+1};1H" << s
89
+ if l < @w
90
+ out << "\e[0m\e[0K"
91
+ end
92
+ #end
92
93
  cachemiss += s.length
93
94
  old = @cache[y]
94
95
  @cache[y] = s
95
- #$editor.pry([y,old, s])
96
96
  else
97
97
  cachehit += @cache[y].length
98
98
  end
99
- # FIXME: This is only worthwhile if a background colour is set
100
- #if l < @w
101
- # out << ANSI.csi("m",0,38,48,2,48,48,64) << "-"*(@w-l)
102
- #end
103
99
  end
104
- @dirty = Set[]
105
100
  out
106
101
  end
107
102
  end
@@ -89,11 +89,13 @@ module AnsiTerm
89
89
  end
90
90
 
91
91
  def[]= range, str
92
- s = @str
93
- a = @attrs
92
+ s = @str.dup
93
+ a = @attrs.dup
94
94
  parse(str)
95
- @str = s[0..(range.min-1)].to_s + @str + s[(range.max)..-1].to_s
96
- @attrs = a[0..(range.min-1)].to_a + @attrs + a[(range.max)..-1].to_a
95
+ s[range] = @str
96
+ @str = s
97
+ a[range] = @attrs
98
+ @attrs = a
97
99
  end
98
100
 
99
101
  def[] i
@@ -1,3 +1,3 @@
1
1
  module AnsiTerm
2
- VERSION = "0.4"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -0,0 +1,41 @@
1
+
2
+ $: << File.dirname(__FILE__)+"/../lib"
3
+
4
+ require 'ansiterm'
5
+ require 'io/console'
6
+
7
+ h,w = IO.console.winsize
8
+
9
+ t = AnsiTerm::Buffer.new(w,h-1)
10
+
11
+ t.cls
12
+ t.move_cursor(1,1)
13
+ t.print([h,w].inspect)
14
+ t.move_cursor(0,0)
15
+ t.print("UL")
16
+ t.move_cursor(w-2,0)
17
+ t.print("UR")
18
+ t.move_cursor(w-2,h-2)
19
+ t.print("LR")
20
+ t.move_cursor(0,h-2)
21
+ t.print("LL")
22
+ t.move_cursor(1,2)
23
+ t.print ("Hello world. UL/UR/LL/LR should fit the corners but one line above the bottom.")
24
+ print t.to_s
25
+ gets
26
+ t.scroll_up
27
+ t.move_cursor(0,0)
28
+ t.print("ul")
29
+ t.move_cursor(w-2,0)
30
+ t.print("ur")
31
+ t.move_cursor(w-2,h-2)
32
+ t.print("lr")
33
+ t.move_cursor(0,h-2)
34
+ t.print("ll")
35
+
36
+ t.move_cursor(1,2)
37
+ t.print ("We've scrolled one line up. This should display right below the Hello World.")
38
+ t.move_cursor(1,3)
39
+ t.print ("Old LL/LR should be visible one line up; new, lower case ones replacing them")
40
+ print t.to_s
41
+ gets
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansiterm
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vidar Hokstad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-11 00:00:00.000000000 Z
11
+ date: 2022-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,7 @@ files:
73
73
  - lib/ansiterm/buffer.rb
74
74
  - lib/ansiterm/string.rb
75
75
  - lib/ansiterm/version.rb
76
+ - visual-spec/buffer.rb
76
77
  homepage: https://github.com/vidarh/ansiterm
77
78
  licenses:
78
79
  - MIT