(*
Reply to digest
Michael Schürig 1997, Public Domain
Required Scripting Additions:
"Jon's Commands" by Jon Pugh, freely available from
<http://iw.cts.com/~jonpugh/Default.html> (and info-mac)
"Kamprath's Text Utilities" by Michael F. Kamprath, freely available from
<http://www.leonardo.net/kamprath/claireware.html> (and info-mac).
Usage: Select the digested message you want to reply to including its headers.
Listserver address is used for address (reply-to field if present, else from field).
Hold down the control key to include attribution with date, time and author;
otherwise only author is used.
Latest changes:
Markus Frischknecht (mailto:mfrischknecht@access.ch) 20/7/1999:
- added use of personalities
- try on error for getting reply-to field; if not present,
use from field.
This script is public domain. Use and change at will, but if you release a
modified version please include the information above.
*)
property nl : ASCII character 10
set AddDate to ("control" is in (keys pressed)) -- OSA Menu uses "option" for itself
-- set up double tell mechanism
tell application "Finder"
try
-- MacOS 8.0 and 8.1, but also works for Sys 7.5 and 7.6
set EU to (process 1 whose creator type is "CSOm") as «class psn »
on error
-- Eudora is not running, so abort
beep
end try
end tell
tell application "Eudora Pro 3.1.3"
try
set qmsg to selected text
set subj to my extractField("Subject", qmsg)
set who to my extractField("From", qmsg)
if AddDate then
set when to my extractField("Date", qmsg)
set attrib to "On " & when & ", " & who & " wrote:" & return
else
-- control key wasn't down: just use name of author:
set attrib to who & " wrote:" & return
end if
try
-- get proper reply address; we also have to adjust which part to use
set replyTo to field "reply-to" of message ""
set replyTo to text 11 thru -1 of replyTo -- remove leading "reply-to: "
on error
set replyTo to field "from" of message ""
set replyTo to text 7 thru -1 of replyTo -- remove leading "from: "
end try
try
-- in Pro version: get personality of current msg, use on new msg
set msgPersonality to personality of message "" -- works fine
set personalityPresent to true
on error
-- no personalities present in this version of Eudora
set personalityPresent to false
end try
-- now create new message and edit it
set msg to make new message at end of mailbox "Out"
if personalityPresent then
set personality of msg to msgPersonality -- apply same personality as orig. msg
end if
set field "To" of msg to replyTo
set SubjQuoteStr to get setting 7020
set SubjQouteLength to length of SubjQuoteStr
-- if already starts with quote (e.g. "Re: "), then do not add a second copy (check length etc...?)
if (text 1 thru SubjQouteLength of subj) is not SubjQuoteStr then
set field "Subject" of msg to (SubjQuoteStr & subj)
else
set field "Subject" of msg to subj
end if
set msgBody to my makeBody(qmsg)
set field "" of msg to (attrib & msgBody)
on error errMsg
if length of errMsg > 255 then
set errMsg to text 1 thru 255 of errMsg
end if
display dialog errMsg buttons {"OK"} default button 1
end try
end tell
on extractField(fldnm, msg)
set fld to find text after (fldnm & ":") in the text msg stopping at return
if fld is "" then error "No " & fldnm & " found in the selected text."
repeat while first character of fld is " "
set fld to text 2 thru -1 of fld
end repeat
return fld
end extractField
on makeBody(msg)
-- remove headers (they're separated by a blank line)
set off to offset of return & return in msg
-- until end of msg: offset -1
set msg to text (off + 1) thru -1 of msg
-- add quote chars
set msg to replace string return in the text msg with string (nl & "> ")
set msg to replace string (nl & "> >") in the text msg with string (nl & ">>")
set msg to replace string nl in the text msg with string return
set msg to text (2) thru -1 of msg -- get rid of first empty line (1 CR)
-- MF:
-- if selection ended with CR, an additional quote prefix is now at end of msg
-- delete, just CR wanted
set msglength to length of msg
set last2char to text (msglength - 1) thru -1 of msg
if last2char is equal to "> " then
set msg to text (1) thru (msglength - 2) of msg & return
end if
-- end of new
return msg
end makeBody