DBTS> Recently I've begun to use mytop. Everything is very comfortable except
DBTS> the fact that the terminal flickers when repainting. I've written the
DBTS> patch removing this effect.

DBTS> Unfortunately I can't test it on many platforms so I've realised it as
DBTS> an additional option --vt100.

last version for this patch (attache)

no artefacts )

--- old/mytop-1.6/mytop	2008-04-23 11:37:57.000000000 +0400
+++ new/mytop-1.6/mytop	2008-04-23 11:37:34.000000000 +0400
@@ -73,6 +73,7 @@
 ## Default Config Values
 
 my %config = (
+    vt100         => 0,
     batchmode     => 0,
     color         => 1,
     db            => '',
@@ -104,6 +105,15 @@
 
 my $CLEAR = $WIN ? '': `clear`;
 
+my %vt100_commands=
+(
+  CURSOR_TO_START     => "\x1b[0;0f",
+  CURSOR_SAVE         => "\x1b[s",
+  CURSOR_RESTORE      => "\x1b[u",
+  EEL                 => "\x1b[K",  # Erase end of line
+  EEB                 => "\x1b[J",  # Erase down
+);
+
 ## Term::ReadKey values
 
 my $RM_RESET   = 0;
@@ -140,6 +150,7 @@
 Getopt::Long::Configure('no_ignore_case', 'bundling');
 
 GetOptions(
+    "vt100"               => \$config{vt100},
     "color!"              => \$config{color},
     "user|u=s"            => \$config{user},
     "pass|password|p=s"   => \$config{pass},
@@ -158,6 +169,9 @@
     "sort=s"              => \$config{sort},
 );
 
+($config{batchmode} or not -t STDOUT)
+  and $config{vt100}=0;
+
 ## User may have put the port with the host.
 
 if ($config{host} =~ s/:(\d+)$//)
@@ -171,6 +185,7 @@
 {
     require Term::ReadKey;
     Term::ReadKey->import();
+    Clear();
 }
 
 ## User may want to disable color.
@@ -682,6 +697,13 @@
     }
 }
 
+sub CursorToStartNotClear()
+{
+  $config{vt100} or return Clear;
+  $WIN and return Clear;
+  print $vt100_commands{CURSOR_TO_START};
+}
+
 my $last_time;
 
 sub GetData()
@@ -693,6 +715,8 @@
 
     my ($width, $height, $wpx, $hpx, $lines_left);
 
+    local $\=$config{vt100}?"$vt100_commands{EEL}":'';
+
     if (not $config{batchmode})
     {
         ($width, $height, $wpx, $hpx) = GetTerminalSize();
@@ -810,7 +834,7 @@
         my $host_width = 52;
         my $up_width   = $width - $host_width;
 
-        Clear() unless $config{batchmode};
+        CursorToStartNotClear() unless $config{batchmode};
         print RESET();
 
         printf "%-${host_width}s%${up_width}s\n",
@@ -896,7 +920,7 @@
 
     if (not $config{batchmode} and not $config{header})
     {
-        Clear();
+        CursorToStartNotClear();
         print RESET();
     }
 
@@ -1059,6 +1082,8 @@
 
     }
 
+    $config{vt100} and 
+      print "$vt100_commands{EEL}$vt100_commands{EEB}";
 }
 
 ###########################################################################
@@ -1709,6 +1734,11 @@
 Use if you'd like B<mytop> to connect to a specific database by
 default. Default: none.
 
+=item B<--vt100>
+
+For  screen re-drawing use esc-sequence vt100. It is remove terminal 
+twinkling.
+
 =item B<-b> or B<--batch> or B<--batchmode>
 
 In batch mode, mytop runs only once, does not clear the screen, and

Attachment: signature.asc
Description: Digital signature

Reply via email to