I'm a Palm Pilot user. At work we use Windows NT and use MS
Exchange/Outlook 97 for mail/PIM stuff. I like to copy files I am working
on into Palm memos for review, so I wrote this script to automate this:
#!/usr/bin/perl -w
# Takes the text file(s) specified on the command line and puts them
# into Outlook notes. If you have a Palm pilot and use Chapura's
# PocketMirror, then Outlook notes get copied into Palm memos when
# you synchronise.
use strict;
use diagnostics;
use Win32::OLE;
use Win32::OLE::Const;
die "This script is only good for Windows." unless ($^O eq "MSWin32");
my $Outlook; # Generally sunny, and naively optomistic.
# Make sure we have Outlook, and that it is running. Chicken out if
# either of these is not the case.
eval {$Outlook = Win32::OLE->GetActiveObject('Outlook.Application')};
die "Outlook not installed." if $@;
die "Outlook needs to be running." unless defined $Outlook;
# Outlook OLE constants
my $olc = Win32::OLE::Const->Load($Outlook);
# We have to expand all wild-cards, because the Windows command shell
# doesn't. We only want plain, text files, and we want to read them
# whole, not a line at a time.
@ARGV = map { glob } @ARGV;
@ARGV = grep { -f && -T } @ARGV;
undef $/;
while (<>) {
# New note for each file.
my $note = $Outlook->CreateItem($olc->{olNoteItem});
# The Outlook note will consist of the filename followed by the file
# contents.
# The reason the note is prefixed with the filename is so that Palm
# pilot can differentiate between them. If this wasn't done and, for
# instance, this script was run on a group of Perl scripts (perl
# txt2note.pl *.pl) then when these notes were synched to the Palm,
# you would see a whole load of memos on your Palm entitled
# "#!/usr/bin/perl -w".
$note->{Body} = $ARGV . "\n" . $_;
# Optional note properties.
$note->{Categories} = "Business";
$note->{Width} = 800;
$note->{Height} = 600;
$note->{Top} = 20;
$note->{Left} = 20;
# Close and save note.
$note->close($olc->{olSave});
}
I wrote the following Emacs lisp code in my _emacs file that runs the
script on the current buffer:
;; Make F9 key copy the entire buffer to a new MS Outlook note
(global-set-key [f9] ' copy-buffer-to-outlook-note)
; Copy entire buffer to MS Outlook note
(defun copy-buffer-to-outlook-note ()
"Copy current buffer to MS Outlook note."
(interactive)
(shell-command-on-region (point-min) (point-max) "perl d:/perl/txt2n
+ote.pl")))