Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Eudora.replyToDigest
on replyToDigest(toField="") {
<<reply to the selected text in a digest message
<<Pioneerware by Scott S. Lawton 5/22/95
<<Internet: ssl@prefab.com
<<CompuServe: 70214,424
<<Advertisement: our cool Player utility lets scripts control anything via the user interface
<<choose menus, set checkboxes, dismiss dialogs & even query the text of an error msg.
<<Dick Munroe (munroe@acornsw.com) 23-Jul-96
<<Try to figure out the list address if one isn't provided.
<<
<<Dick Munroe (munroe@acornsw.com) 20-Aug-96
<<Add signature.
<<
<<Dick Munroe (munroe@acornsw.com) 21-Aug-96
<<Check internet config if there is no eudora signature.
<<
<<Fri, Aug 23, 1996 by Preston Holmes <pholmes@ucsd.edu>
<<Better check for digest return address
<<Will prompt in last resort
local {
defaultListAddress = "lists.acornsw.com";
s;
theLine;
dateField;
fromField;
subjectField;
textField = "";
theMsg;
i = 1;
j;
colon =':'; << more readable (to me)
msg};
<<moderately useful general-purpose function (could use a better name)
on getCharsAfter(textString, delimiter) {
local {
index = string.patternMatch(delimiter, textString) + 1; << go 1 beyond the delimiter
space =' '}; << more readable (to me)
return string.popLeading( string.mid(textString, index, infinity), space )};
with objectModel, Eudora, eventInfo {
if toField == "" {
msg = getCurrentMessageObject();
<<
<<Try to get the list name from the subject
<<
try {
toField = get (msg.field["Reply-To"]) - "Reply-To: "}
else {
toField = getMessageSubject(msg);
if (string.lower(toField) contains " digest v") {
j = string.patternMatch (" Digest V", toField);
toField = string.mid (toField, 1, j -1);
toField = string.popLeading (toField, ' ');
toField = string.popTrailing (toField, ' ');
toField = toField + "@" + defaultListAddress}
else {
if not dialog.ask ("Address of list?", @toField) {
return}}}};
try {
s = getSelectedText()}
else {
dialog.alert ("No digest text was selected");
return};
theLine = string.nthField(s, cr, i);
while not (theLine contains colon) { << skip "---" and blank lines and such
++i;
theLine = string.nthField(s, cr, i)};
dateField = getCharsAfter(theLine, colon); << I actually ignore this field at the moment
++i;
fromField = getCharsAfter(string.nthField(s, cr, i), colon);
++i;
subjectField = getCharsAfter(string.nthField(s, cr, i), colon);
++i; << i.e. advance beyond subject
++i; << skip the blank line
<<not sure if there's a more elegant way to get the remainder...
for j = i to string.countFields(s, cr) {
textField = textField + string.nthField(s, cr, j) + cr};
if not ( string.lower(subjectField) beginsWith "re:" ) {
subjectField = "Re: " + subjectField};
textField = ">" + string.replaceAll(textField, cr, cr + ">"); << "quote" the text
local {
signature = ""};
try {
signature = Eudora.getSignature()};
if (signature == "") and defined(ic) {
try {
signature = ic.getICPreference(ic.eventInfo.signature)}};
theMsg = createMessage(); << creates new message, returns an ObjectSpecifier
setMessageTo(theMsg, toField);
setMessageSubject(theMsg, subjectField);
setMessageText(theMsg, fromField + " typed:" + cr + textField + signature)}};
<<setMessageText(theMsg, "On " + dateField + ", " + fromField + " typed:" + cr + textField)
replyToDigest()
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.