Vt Rs Versions Save

asciinema virtual terminal

v0.8.3

7 months ago
  • added Vt::builder() for more flexible building of Vt with desired settings
  • collected cursor col/row/visible in proper Cursor struct

Previously:

let mut vt = Vt::new(80, 24);
vt.resizable(true);

// or

let mut vt = Vt::with_scrollback_limit(80, 24, Some(1000));

Now:

let mut vt = Vt::builder().size(80, 24).resizable(true).scrollback_limit(1000).build();

v0.8.2

7 months ago
  • added pre-allocation of params vec for easy parsing speed increase
  • refactored Vt - extracted parser and terminal from Vt, created parser::Executor trait
  • optimized Pen struct - uses bitmap for set of boolean attributes now
  • reordered parser's branch decision code for most optimal (and common) input scenarios
  • refactored benchmarks
  • added example for conversion to plain text to examples/ directory

Above optimizations made vt.feed_str() roughly 15% faster for typical output stream when compared to v0.8.1, and up to 70% faster when compared to v0.8.0.


criterion benchmark output:

marcin@stacja ~/S/r/a/avt (main)> cargo criterion --bench vt
   Compiling avt v0.8.2 (/home/marcin/Sync/repos/asciinema/avt)
    Finished bench [optimized] target(s) in 1.47s
Gnuplot not found, using plotters backend
feed mixed in bulk      time:   [7.5430 ms 7.5508 ms 7.5592 ms]                               
                        change: [-46.947% -46.386% -45.812%] (p = 0.00 < 0.05)
                        Performance has improved.

feed mixed in chunks    time:   [10.366 ms 10.377 ms 10.389 ms]                                 
                        change: [-24.810% -24.309% -23.812%] (p = 0.00 < 0.05)
                        Performance has improved.

feed cacademo in bulk   time:   [7.2855 ms 7.3083 ms 7.3308 ms]                                  
                        change: [-3.5582% -3.0732% -2.5738%] (p = 0.00 < 0.05)
                        Performance has improved.

feed cacademo in chunks time:   [8.7286 ms 8.7468 ms 8.7652 ms]                                    
                        change: [-4.5469% -4.2336% -3.9129%] (p = 0.00 < 0.05)
                        Performance has improved.

feed licenses in bulk   time:   [9.9353 ms 9.9457 ms 9.9600 ms]                                  
                        change: [-69.408% -69.061% -68.712%] (p = 0.00 < 0.05)
                        Performance has improved.

feed licenses in chunks time:   [17.706 ms 17.717 ms 17.728 ms]                                    
                        change: [-50.115% -49.719% -49.312%] (p = 0.00 < 0.05)
                        Performance has improved.

feed licenses-lolcat in bulk                                                                             
                        time:   [5.1391 ms 5.1548 ms 5.1672 ms]
                        change: [-19.531% -19.145% -18.763%] (p = 0.00 < 0.05)
                        Performance has improved.

feed licenses-lolcat in chunks                                                                            
                        time:   [6.4648 ms 6.4864 ms 6.5072 ms]
                        change: [-11.768% -11.436% -11.098%] (p = 0.00 < 0.05)
                        Performance has improved.

v0.8.1

7 months ago
  • improved buffer performance when scrollback is full
  • optimized parser to favor "print path" which is most common

Above optimizations made vt.feed_str() roughly 50% faster for typical output stream (when compared to v0.8.0).

v0.7.4

7 months ago
  • implemented line wrapping without cutoff/truncation
  • fixed view scroll up when print wraps at the bottom margin (which is not always the same as when it wraps at last row)

v0.7.3

7 months ago
  • fixed handling of CSI e (VPR) to move cursor down (like CUD) instead of up (like CUU)

v0.7.2

7 months ago
  • BS (backspace) behavior is now consistent with Xterm, Gnome Terminal, Alacritty and Terminal.app
  • terminal is not resizable by default now, can be enabled via vt.resizable = true
  • added chars() and text() to Line for getting line's text
  • more tests for various control sequences

v0.8.0

7 months ago
  • implemented proper scrollback (infinite, fixed size, or disabled)
  • new vt.text() -> Vec<String> method for obtaining terminal text, including all history (scrollback)
  • greatly improved resizing behaviour - no more text truncation at the right edge
  • RI CSI sequence is now confined to the scroll region (between top and bottom margins)
  • vastly improved property test generators
  • fixed crash in vt.dump() when cursor is outside of the scroll region and origin mode is enabled