http://www.perlmonks.org?node_id=92404

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")))