NAME

Terminal::Control - Perl extension for the terminal window control

SYNOPSIS

use Terminal::Control;

# Clear screen using escape sequences.
clear_screen();

# Reset screen using escape sequences.
reset_screen();

# Get terminal size calling ioctl and output the result on the screen.
my ($rows, $cols, $xpix, $ypix) = winsize();
printf ("%s\n%s\n%s\n%s\n", $rows, $cols, $xpix, $ypix);

# Get chars from terminal size and output the result on the screen.
($rows, $cols) = chars();
# Print chars.
printf ("%s\n%s\n", $rows, $cols);

# Get pixels from terminal size and output the result on the screen.
($xpix, $ypix) = pixels();
printf ("%s\n%s\n", $xpix, $ypix);

# Get the cursor position using escape sequences.
my ($y, $x) = get_cursor_position();
printf ("%s\n%s\n", $y, $x);

# Set the cursor position using escape sequences.
my $y = 20; 
my $x = 80; 
set_cursor_position($y, $x);

# Enable echo of commands using stty. 
echo_on();

# Disable echo of commands using stty. 
echo_off();

# Enable cursor using escape sequences.
cursor_on();

# Disable cursor using escape sequences.
cursor_off();

# Set timeout in microseconds.
my $timeout = 1000000;
# Get window and screen size using escape sequences.
window_size_chars($timeout);
windows_size_pixels($timeout);
screen_size_chars($timeout);
screen_size_pixels($timeout);

Requirement for Full Functionality

The Perl header sys/ioctl.ph is required for the ioctl call of the function TIOCGWINSZ to get the window size. The equivalent C/C++ header is sys/ioctl.h. The Perl command h2ph converts .h C/C++ header files to .ph Perl header files.

In contrast to modules in general, the module installation process cannot be told to create a sys/ioctl.ph. This is necessary manually via the h2ph command.

To prevent tests within CPAN from failing due to a missing sys/ioctl.ph, a fallback solution based on the Shell command stty is implemented.

Introduction

The module can be used on Unix-like systems.

Motivation

The idea for the necessity of the module arises from the fact that especially the Perl system command call system("reset") of the Shell command reset is noticeably slow. The Shell command reset is slow, the Perl system command call system("reset") is slower. By using so-called ASCII escape sequences, a significant acceleration can be achieved. The logical consequence is the programming of a Perl command that replaces the Perl system command call. A simple method is the best way to realise this. There is no need to implement a special class to achive this.

Benchmark

Exemplary comparison comparison of time of execution:

system("reset") => 1.026892 Seconds = 1026,892 Milliseconds = 1026892 Microseconds

reset_screen() => 0.000076 Seconds = 0,076 Milliseconds = 76 Microseconds

This one example already shows a significant advantage of the new routine.

DESCRIPTION

Implemented Methods

The following methods have been implemented so far:

  • clear_screen()

  • reset_screen()

  • get_cursor_position()

  • set_cursor_position($rows, $cols)

  • winsize()

  • chars()

  • pixels()

  • echo_on()

  • echo_off()

  • cursor_on()

  • cursor_off()

  • screen_size_chars($timeout)

  • screen_size_pixels($timeout)

  • window_size_chars($timeout)

  • windows_size_pixels($timeout)

Aliases

clear_screen and reset_screen can also be used with this aliases:

reset_terminal  <=  reset_screen
clear_terminal  <=  clear_screen
reset           <=  reset_screen
clear           <=  clear_screen

Method description

The method clear_screen is clearing the terminal. This is similar to the Perl system command call system('clear'). The method reset_screen is reseting the terminal. This is similar to the Perl system command call system('reset').

The method winsize gets the dimensions in x-direction and y-direction of the terminal. The methods chars and pixels extract chars (rows and cols) and pixels (xpix and ypix.)

The method get_cursor_position() gets the current cursor position in the terminal window. The method set_cursor_position() sets the cursor position in the terminal window.

echo_on() and echo_off() turnes echo of commands on or off. cursor_on and cursor_off shows or hides the cursor.

Programmable background

The methods clear_screen() and reset_screen() are using escape sequences. Doing this no other Perl modules are needed to clear and reset a screen. Both are in principle one liners.

The method winsize is using the C/C++ header for the system ioctl call and there the command TIOCGWINSZ. The call return winsize in rows and cols and xpix and ypix.

SEE ALSO

ASCII escape sequences

AUTHOR

Dr. Peter Netz, <ztenretep@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2022 by Dr. Peter Netz

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.30.0 or, at your option, any later version of Perl 5 you may have available.