Module: AsciinemaWin

Defined in:
lib/asciinema_win.rb,
lib/asciinema_win.rb,
lib/asciinema_win/cli.rb,
lib/asciinema_win/export.rb,
lib/asciinema_win/player.rb,
lib/asciinema_win/themes.rb,
lib/asciinema_win/version.rb,
lib/asciinema_win/recorder.rb,
lib/asciinema_win/asciicast.rb,
lib/asciinema_win/ansi_parser.rb,
lib/asciinema_win/win32_screen.rb,
lib/asciinema_win/screen_buffer.rb,
lib/asciinema_win/output_organizer.rb

Overview

AsciinemaWin - Native Windows Terminal Recorder in Pure Ruby

A zero-dependency terminal recording and playback system for Windows. Uses Ruby’s built-in Fiddle for Win32 Console API access and integrates Rich-Ruby for terminal rendering. Compatible with asciinema’s asciicast v2 format.

Examples:

Record a terminal session

AsciinemaWin.record("session.cast", title: "My Recording")

Play back a recording

AsciinemaWin.play("session.cast", speed: 1.5)

Get recording info

info = AsciinemaWin.info("session.cast")
puts "Duration: #{info[:duration]}s"

Defined Under Namespace

Modules: Asciicast, Export, OutputOrganizer, Themes, Win32Screen Classes: AnsiParser, CLI, Error, ExportError, FormatError, PlatformError, PlaybackError, Player, RawPlayer, Recorder, RecordingError, ScreenBuffer

Constant Summary collapse

VERSION =

Returns Gem version following semantic versioning.

Returns:

  • (String)

    Gem version following semantic versioning

"0.3.0"

Class Method Summary collapse

Class Method Details

.cat(input_path) ⇒ void

This method returns an undefined value.

Output recording to stdout without timing (for piping)

Parameters:

  • input_path (String)

    Path to the recording file

Raises:



117
118
119
120
121
122
# File 'lib/asciinema_win.rb', line 117

def cat(input_path)
  # RawPlayer dumps output events with no timing and no screen-control
  # escapes, so the result is safe to pipe (matches the `cat` CLI command).
  player = RawPlayer.new
  player.play(input_path)
end

.info(input_path) ⇒ Hash

Get metadata about a recording

Examples:

info = AsciinemaWin.info("session.cast")
puts "Size: #{info[:width]}x#{info[:height]}"
puts "Duration: #{info[:duration]}s"

Parameters:

  • input_path (String)

    Path to the recording file

Returns:

  • (Hash)

    Recording metadata including width, height, duration, title

Raises:



134
135
136
# File 'lib/asciinema_win.rb', line 134

def info(input_path)
  Asciicast::Reader.info(input_path)
end

.play(input_path, speed: 1.0, idle_time_limit: nil, pause_on_markers: false) ⇒ void

This method returns an undefined value.

Play back a recording from a file

Examples:

Normal playback

AsciinemaWin.play("session.cast")

Fast playback

AsciinemaWin.play("session.cast", speed: 2.0)

Parameters:

  • input_path (String)

    Path to the recording file

  • speed (Float) (defaults to: 1.0)

    Playback speed multiplier (1.0 = normal)

  • idle_time_limit (Float, nil) (defaults to: nil)

    Cap idle time between frames

  • pause_on_markers (Boolean) (defaults to: false)

    Pause playback at markers

Raises:



102
103
104
105
106
107
108
109
110
# File 'lib/asciinema_win.rb', line 102

def play(input_path, speed: 1.0, idle_time_limit: nil, pause_on_markers: false)
  player = Player.new(
    speed: speed,
    idle_time_limit: idle_time_limit,
    pause_on_markers: pause_on_markers
  )

  player.play(input_path)
end

.record(output_path, title: nil, command: nil, idle_time_limit: 2.0, env_vars: %w[SHELL TERM],) {|Recorder| ... } ⇒ void

This method returns an undefined value.

Record a terminal session to a file

Examples:

Record interactively

AsciinemaWin.record("session.cast", title: "Demo") do |rec|
  # Recording happens until block exits or user presses Ctrl+D
end

Record a command

AsciinemaWin.record("session.cast", command: "dir /s")

Parameters:

  • output_path (String)

    Path to save the recording

  • title (String, nil) (defaults to: nil)

    Recording title

  • command (String, nil) (defaults to: nil)

    Command to record (runs in subprocess)

  • idle_time_limit (Float) (defaults to: 2.0)

    Maximum idle time between events

  • env_vars (Array<String>) (defaults to: %w[SHELL TERM],)

    Environment variables to capture

Yields:

  • (Recorder)

    Optional block for manual recording control

Raises:



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/asciinema_win.rb', line 74

def record(output_path, title: nil, command: nil, idle_time_limit: 2.0, env_vars: %w[SHELL TERM], &block)
  ensure_windows!

  recorder = Recorder.new(
    title: title,
    command: command,
    idle_time_limit: idle_time_limit,
    env_vars: env_vars
  )

  recorder.record(output_path, &block)
end

.run(args = ARGV) ⇒ Integer

Run the CLI with the given arguments

Parameters:

  • args (Array<String>) (defaults to: ARGV)

    Command-line arguments

Returns:

  • (Integer)

    Exit code



142
143
144
# File 'lib/asciinema_win.rb', line 142

def run(args = ARGV)
  CLI.run(args)
end