[pve-devel] [PATCH pve-client] Poll the size of the terminal and resize if needed
Wolfgang Bumiller
w.bumiller at proxmox.com
Thu Jun 7 14:05:14 CEST 2018
Shouldn't we be getting a SIGWINCH we could handle instead of polling?
On Thu, Jun 07, 2018 at 01:17:59PM +0200, René Jochum wrote:
> Signed-off-by: René Jochum <r.jochum at proxmox.com>
> ---
> PVE/APIClient/Commands/lxc.pm | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/PVE/APIClient/Commands/lxc.pm b/PVE/APIClient/Commands/lxc.pm
> index e0d21ae..058660c 100644
> --- a/PVE/APIClient/Commands/lxc.pm
> +++ b/PVE/APIClient/Commands/lxc.pm
> @@ -262,8 +262,25 @@ __PACKAGE__->register_method ({
>
> my $ctrl_a_pressed_before = 0;
>
> + my $last_check = time();
> + my $check_terminal_size = sub {
> + my $now = time();
> + if ($now > $last_check + 5) {
> + my ($ncols, $nrows) = PVE::PTY::tcgetsize(*STDIN);
> + if ($ncols != $columns or $nrows != $rows) {
> + $columns = $ncols;
> + $rows = $nrows;
> + $frame = $create_websockt_frame->("1:$columns:$rows:");
> + $full_write->($web_socket, $frame);
> + }
> + $last_check = $now;
> + }
> + };
> +
> while (1) {
> while(my @ready = $select->can_read(3)) {
> + $check_terminal_size->();
> +
> foreach my $fh (@ready) {
>
> if ($fh == $web_socket) {
> @@ -300,6 +317,8 @@ __PACKAGE__->register_method ({
> }
> }
> }
> + $check_terminal_size->();
> +
> # got timeout
> $full_write->($web_socket, $create_websockt_frame->("2")); # ping server to keep connection alive
> }
> --
> 2.11.0
More information about the pve-devel
mailing list