#!/usr/bin/perl -w $d_dir="/home/stein/.diary"; ################################################# # hier die gewuenschten Themen eintragen @kapitel=qw( life: computer: arbeit: drogen: pflanzen: schlaf: traum:); $trenner="####################\n# "; $|=1; $cs= `clear`; if (! -d $d_dir){ print "Seems you're running diary for the first time.\n"; print "Should I create the diary folder $d_dir? (y/n) "; while (1){ $t=getone(); if ($t eq "y"){ print "y\n";system("mkdir $d_dir"); last;} if ($t eq "n"){ print "n\nOK, Goodbye!\n"; exit;} } } use Term::ANSIColor; while (1){ print $cs; print color 'bold blue'; print " Today (t)\t Browse (b)\t Quit (q)"; $t=""; $t=getone(); print " $t\n"; if ($t eq "t"){&edit(0);} if ($t eq "b"){&browse;} if ($t eq "q"){print color 'reset'; print $cs; exit;} } sub view{ $f=shift @_; $z=0; while (<$d_dir/*.dia>){ $d_file=$_; $z++; last if ($z == $f); } print color 'reset'; system("less $d_file"); } sub browse{ $z=0; print $cs; print color 'bold blue'; print "Nummer (#)\t Back (q)\n"; print color 'reset'; while (<$d_dir/*.dia>){ $_ =~ s@$d_dir/@@; print color 'red'; print "$z"; print color 'reset'; print " $_\t"; print "\n" if ($z%4 == 3); $z++; } print "\n? "; $t=""; $t=; chomp $t; unless ($t eq "q"){ &view($t); } $t=""; # Sonst schlaegt's durch in die naechste Abfrage } sub edit{ $f=shift @_; ################################################# # Eintrag von heute? if ($f == 0){ @t=localtime(); # $d_name=$t[5] ."_" . $t[7] .".dia"; my $y=$t[5]+1900; my $mon=$t[4]+1; substr($mon, 0, 0)="0" x (2 - length($mon)); my $day=$t[3]; substr($day, 0, 0)="0" x (2 - length($day)); $d_name="$y.$mon.$day.dia"; $d_file="$d_dir/$d_name"; if (! -f "$d_file"){ open (T, ">$d_file") || die "Kann das Sch.. $d_file nicht oeffnen! $! \n"; $time=localtime(); print T "% $time\n\n"; foreach (@kapitel){ print T "$trenner$_\n\n"; } open (TODO, "<$d_dir/.todo"); do { local $/; $todo=;}; close TODO; print T "#####################\n# todo:\n$todo"; close T; } }else{ $z=0; while (<$d_dir/*.dia>){ $d_file=$_; $z++; last if ($z == $f); } } print color 'reset'; system("vi +2 $d_file"); ################################################# # Lese Todo-Eintrag aus.... open (F, "<$d_file"); while (){ last if ($_ =~ /^\# todo:$/) } do { local $/; $todo=;}; close F; ################################################# # und schreibe in staendiges File open (TODO, ">$d_dir/.todo"); print TODO $todo; close TODO; } BEGIN { use POSIX qw(:termios_h); my ($term, $oterm, $echo, $noecho, $fd_stdin); $fd_stdin = fileno(STDIN); $term = POSIX::Termios->new(); $term->getattr($fd_stdin); $oterm = $term->getlflag(); $echo = ECHO | ECHOK | ICANON; $noecho = $oterm & ~$echo; sub cbreak { $term->setlflag($noecho); $term->setcc(VTIME, 1); $term->setattr($fd_stdin, TCSANOW); } sub cooked { $term->setlflag($oterm); $term->setcc(VTIME, 0); $term->setattr($fd_stdin, TCSANOW); } sub getone { my $key = ''; cbreak(); sysread(STDIN, $key, 1); cooked(); return $key; } } END { cooked() }