UnTabify

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

Das folgende Skriptchen ist entstanden, weil mich gestresst hat, dass Jochen's C-Code, der auf Tabstop=2 formatiert ist, in mutt grundsätzlich mit Tabstop=8 dargestellt wird. Das führt letztendlich dazu, dass die alte und die neue Zeile zum Teil unterschiedlich eingerückt dargestellt werden, was sehr störend wirkt. Ich habe das Skript inzwischen bei mir in die .procmailrc integriert und lasse den Nachrichtentext so jeweils automatisch filtern.

#! /usr/bin/perl -w
my $tabstop = 2;
my $ispatch = 0;
my ($diffstuff, $whitespace, $text);

while(<>) {
  if(m/^\\@\\@ [-\\+,0-9 ]+ \\@\\@$/) { $ispatch = 1 }
  unless(($diffstuff, $whitespace, $text) = m/^([\\+\\- ]?)([ \\t]+)(.+?)$/) {
    print $_; next
  }
  unless($ispatch) { $whitespace = $diffstuff . $whitespace; $diffstuff = "" }

  my $len = 0;
  for (0..(length($whitespace)-1)) {
    if(substr($whitespace, $_, 1) eq ' ') { $len ++; } 
    else { $len += $tabstop - ($len % $tabstop); }
  }

  print $diffstuff, " " x $len, $text, "\
";
}

Das Skript geht den Text einfach zeilenweise durch. Wenn es erkennt (bzw. zumindest vermutet), dass es sich um ein Diff handelt, wird die erste Spalte bei der Berechnung ensprechend außen vor gelassen.

-- StefanSiegl