App-Textcast
view release on metacpan or search on metacpan
#------------------#
# This is Todo.txt #
#------------------#
handle cursor hidding
restore start state, eg white screens remain dark
handle all the options passed as arguments
option to display
percentage played
time and time left
show terminal bottom if possible
lib/App/Textcast.pm view on Meta::CPAN
) ;
print $CLEAR ;
my $previous_time = my $start_time = [gettimeofday] ;
my ($screenshot_index, $sub_process_ended) = (0, 0) ;
while (not $sub_process_ended)
{
($sub_process_ended, my $screen_diff, my $cursor_x, my $cursor_y) = check_sub_process_output($vt_process) ;
my $now = [gettimeofday] ;
my $elapsed = tv_interval($previous_time, $now);
$previous_time = $now ;
my $screenshot_file_name = "$output_directory/$screenshot_index" ;
write_file($screenshot_file_name, $screen_diff) ;
my ($terminal_columns, $terminal_rows) = $get_terminal_size->() ;
append_file
(
"$output_directory/index",
'{'
. "file => $screenshot_index, "
. sprintf('delay => %0.3f, ', $elapsed)
. "cursor_x => $cursor_x, "
. "cursor_y => $cursor_y, "
. 'size => ' . length($screen_diff) . ', '
. "terminal_rows => $terminal_rows, "
. "terminal_columns => $terminal_columns, "
. "},\n"
) ;
$screenshot_index++ ;
}
my $record_time = tv_interval($start_time, [gettimeofday]);
lib/App/Textcast.pm view on Meta::CPAN
# split sleep time in smaller chunks if we want to handle the user input
Readonly my $ONE_MILLION => 1_000_000 ;
usleep $sleep_time * $ONE_MILLION if($sleep_time > 0) ;
$frame_display_time = [gettimeofday] ;
print #$SHOW_CURSOR,
read_file($file),
position_cursor($file_information->{cursor_y}, $file_information->{cursor_x}) ;
$frame_display_time = tv_interval($frame_display_time , [gettimeofday]) ;
}
else
{
carp "Error: Can't find '$file'! Skipping.\n" ;
push @skipped_frames, $file ;
}
}
lib/App/Textcast.pm view on Meta::CPAN
I<Returns> - Nothing
I<Exceptions> - None
=cut
my ($status, $status_row, $status_column) = @_ ;
print $SAVE_CURSOR_POSITION,
position_cursor($status_row, $status_column),
$CLEAR_LINE,
$status,
$RESTORE_CURSOR_POSITION ;
return ;
}
#---------------------------------------------------------------------------------------------------------
sub position_cursor
{
=head2 [p] position_cursor($row, $column)
Create an ANSI command to position the cursor on the terminal.
I<Arguments>
=over 2
=item * $row - Integer - row position for the status
=item * $column - Integer - column position for the status
=back
lib/App/Textcast.pm view on Meta::CPAN
my @screenshot_information ;
if(-e "$input_directory/index")
{
print "Parsing index ...\n" ;
my @entries = read_file("$input_directory/index") ;
my $line = 0 ;
my $regex = '{file => 0, delay => 0.0, cursor_x => 1, cursor_y => 1, size => 1, terminal_rows => 1, terminal_columns => 1, },' ;
$regex =~ s/^{/^{/sxm ;
$regex =~ s/([^[:digit:]]+)$/$1\$/sxmg ;
$regex =~ s/[[:digit:]]+/[[:digit:]]+/sxmg ;
my @errors ;
for my $entry (@entries)
{
unless($entry =~ $regex)
{
lib/App/Textcast.pm view on Meta::CPAN
Check the sub process output.
I<Arguments>
=over 2
=item * $vt_process -
=back
I<Returns> - $eof, $screen_data, $cursor_x, $cursor_y
I<Exceptions> - None
=cut
my ($vt_process) = @_;
my $vt = $vt_process->{VT} ;
my ($eof, $screen_data) ;
( run in 0.229 second using v1.01-cache-2.11-cpan-4d50c553e7e )