[Remind-Fans] re-read INCLUDE files

san.srcf at clockwatching.net san.srcf at clockwatching.net
Tue May 22 13:43:57 EDT 2007


Hi,

 	So I've had this same issue.  I ended up writing a Perl script to deal with the different ways I wanted the different kinds of reminders to show up.  Basically I wanted birthdays to be presented differently than to-do list stuff, etc.  Anyway I know if this is not the most elegant solution, but here it's attached in case you wanted to spend the time to hack it up to do what you want.

 	I placed this in my personal bin dir so it would get run instead of the system remind (the sys "rem" is a script that calls whatever remind is first in your path) and the remind files are in a directory called ".remind" in my home dir.  See the script for details.

 	Hope this helps,

 		-S


> Message: 1
> Date: Mon, 21 May 2007 11:23:10 -0400
> From: Paul Hoffman <nkuitse at nkuitse.com>
> Subject: Re: [Remind-Fans] re-read INCLUDE files in daemon mode
> To: Users of the <remind-fans at whatexit.org>
> Message-ID: <20070521152310.GD5965 at dyuven.local>
> Content-Type: text/plain; charset=utf8
>
> On Mon, May 21, 2007 at 02:58:01PM +0100, Stuart Houghton wrote:
>
>> Hi,  I like to organise my .reminders file so that it just contains
>> INCLUDE statements for things like 'birthdays.txt'. 'todo-list.txt'
>> etc.
>>
>> When I run in daemon or server mode, there doesn't seem to be a way of
>> getting remind to expand these INCLUDEs when it re-reads the
>> .reminders file.
>>
>> Is this possible, or do I just have to run an individual daemon for
>> each of the includes?
>
> Well, I suppose you could just cat all your INCLUDEd files to .reminders
> when any of them changes, run remind in server mode, and use a FIFO to
> control it.  Off the top of my head:
>
> $ cd
> $ mkdir -p .remind/include
> $ vim .remind/include/birthdays.txt
> $ vim .remind/include/todo-list.txt
> (etc. -- move everything out of .reminders!)
> $ mkfifo .remind/server-control
> $ cat <<EOS > ./my-remind.sh
>> #!/bin/bash
>> # Start remind in server mode
>> remind -z0 .reminders < .remind/server-control &
>> # Clear previous list of all reminders
>> : > .remind/prev
>> # Loop forever
>> while true; do
>>     # N.B.: This next line requires bash
>>     if ! cmp .remind/prev <(cat .remind/include/*.txt); then
>>         # Something has changed -- "rewrite" .reminders
>>         # and remember all reminders
>>         cat .remind/include/*.txt | tee .remind/prev > .reminders
>>         # Tell remind to re-read all reminders
>>         echo REREAD > .remind/server-control
>>     fi
>>     sleep 15  # or however long you wish
>> done
>> EOS
> $ chmod a+x ./my-remind.sh
> $ ./my-remind.sh &
>
> There are sure to be bugs there, of course, and I doubt it's the best
> approach, but FWIW...
>
> Paul.
>
> -- 
> Paul Hoffman <nkuitse at nkuitse.com>
>
>
>
> ------------------------------
>
> _______________________________________________
> Remind-fans mailing list
> Remind-fans at lists.whatexit.org
> http://lists.whatexit.org/mailman/listinfo/remind-fans
>
>
> End of Remind-fans Digest, Vol 39, Issue 8
> ******************************************
>
-------------- next part --------------
#!/usr/bin/perl -w

use strict;

# This program runs remind for me, so I can just type "remind" and it will do
# the right thing.

my $SYS_REM="/usr/local/bin/remind";
#my $SYS_REM="~/bin/src/remind-03.00.24/src/remind";
my $dir="~/.remind";

my $bdayfile="$dir/" . "birthdays";
my $normfiles="$dir/" . join(" $dir/",
	("shorttime", "longtime", "periodic", "holidays", "tv/*.sch") );
my $todo=`cat "$dir/to-do.txt"`;



# Now let's start the code.

# If this was called from rem, then we don't add the added .reminders.
my $arg;
my $rem_args = "-h -"; # hush (no output if no reminders), and stdin.
foreach $arg (0 .. $#ARGV) {
	if( "$ARGV[$arg]" ne "$ENV{'HOME'}" . "/.reminders" ) {
		#Check if it's is an option or not.
		if( substr($ARGV[$arg], 0, 1) eq "-" ) {
			$rem_args = $ARGV[$arg] . " " . $rem_args;
		} else {
			$rem_args = $rem_args . " " . $ARGV[$arg];
		}
	}
}


# The Birthdays.
my $bdayrem = "";
open(FI, "$bdayfile") or $bdayrem = "rem: Could not open $dir/$bdayfile";
while(<FI>) {
	if(/^\#/) { next;
	} elsif(/^([0-3]?[0-9]\s+[a-zA-Z]{3})\s+(.+)\s+born\s+([0-9]{4})\s+(.*)/) {
		#print "::$1::$2::$3::$4::\n";
		$bdayrem = $bdayrem
			. "\nREM $1 +10 MSG Birthday soon:  _$2_  is "
			. "[year(trigdate())-$3] %b.  $4";
	} elsif(/^([0-3]?[0-9] [a-zA-Z]{3})\b(.+)\bis\b(.+)$/) {
		$bdayrem = $bdayrem
						. "\nREM $1 +10 MSG Birthday soon:  _$2_  is $3 %b";
	} else {
		if(not /^[\s]*$/) {
			$bdayrem = $bdayrem . "\nMisformed birthday line: $_";
		}
	}
}
close(FI);

# Run remind for birthday's and norm files.
my $rem_out = `echo "$bdayrem" | cat - $normfiles | "$SYS_REM" $rem_args`;

# Now add the to do list.
chomp $rem_out;
if(not $todo =~ /^[\s]*$/) {
	#$todo =~ s/^/    /gm;
	chomp $todo;
	$rem_out = $rem_out
		. "\n*****************************************************************\n"
		. $todo . "\n";
}


# If there is anything to remind, do so.
if($rem_out) { # If remind actually had some output.
	print "*****************************************************************\n"
		. "*****************************************************************\n"
		. "\n"
		. $rem_out
		. "*****************************************************************\n"
		. "*****************************************************************\n"
		;
}
-------------- next part --------------
# Allowable lines:
# Cmments anything with '#' as the first char.
# {day} {month} {name} born in {year} [comments]
#    Ex:  27 Dec Hazel Anne Carrol born 1974
#    Ex:  27 Dec Hazel Anne Carrol born 1974 Dont talk to this one.
# {day} {month} {name} is {description of age}
#    Ex:  23 Jul Doyle is ??


# 27 Dec Hazel Anne Carrol born 1974

# 3 Feb Emily w/ Mason is 25 or 26 in 2005.

17 Mar Pleman born 1980 In 2012 he's leaving LA; maybe remind him? (See email called 'primes'.)

27 Mar J is ??

13 may cw is 30 in 2006

23 Jul Urpn is 34 in 2005

23 Jul Doyle is ??

21 sep Kar is older than me by 6 days shy of a month.

04 Dec Mason is ??

09 Apr V born 1948

10 Apr John is ??

28 Apr Jer is ??


More information about the Remind-fans mailing list