This is my first post on Perl Monks in the 19 months I've been lurking. The following is a cheap hack, more of a macro than a script, but I use it regularly. It's a handy doo-dad that I wrote in about 5 minutes that saves me a couple minutes of typing everytime I update my journal.

This is for Linux+Emacs. The script invokes Emacs with today's date in YYYYMMDD.blg format, and when Emacs closes (after you presumably save your new file) prompts you to archive all current entries, and delete all but the most recent 5.

I'm not doing any error checks, so you could potentially lose data if the copy fails and the unlink succeeds.

#!/usr/bin/perl chomp (my $d=`date +%Y%m%d`); $d.='.blg'; system "emacs -nw $d"; print "Update archive? :"; $d=<>; if($d=~/^y/i) { $d=`cp *.blg blgarchive`; chomp (my @d=sort `ls *.blg`); # Delete all but the last 5 entries for(0..$#d-5){$d=unlink $d[$_];print "$d[$_] : $d\n";} }

Replies are listed 'Best First'.
•Re: Add/update daily journal (emacs/linux)
by merlyn (Sage) on Sep 08, 2003 at 14:53 UTC
    # chomp (my $d=`date +%Y%m%d`); # $d.='.blg'; my @now = localtime; my $d = sprintf "%04d%02d%02d.blg", $now[5]+1900, $now[4]+1, $now[3]; # system "emacs -nw $d"; system "emacs", "-nw", $d; print "Update archive? :"; # $d=<>; $d = <STDIN>; # don't use <> for interaction when you're prompting if($d=~/^y/i) { # $d=`cp *.blg blgarchive`; use File::Copy; copy $_, "blgarchive" or warn "Cannot copy $_" for glob "*.blg"; # chomp (my @d=sort `ls *.blg`); my @d = glob "*.blg"; # glob is already sorted # Delete all but the last 5 entries # for(0..$#d-5){$d=unlink $d[$_];print "$d[$_] : $d\n";} splice @d, 0, -5; # remove all but the last five entries unlink $_ or warn "Cannot unlink $_: $!" for @d; }

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.