Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!wuarchive!cs.utexas.edu!sun-barr!newstop!sun!parns.nsc.com From: michael@parns.nsc.com (Michael Wagnitz) Newsgroups: comp.sources.x Subject: REPOST: v08i099: xmail, Patch2, Part04/05 Message-ID: <141525@sun.Eng.Sun.COM> Date: 29 Aug 90 19:00:52 GMT Sender: news@sun.Eng.Sun.COM Lines: 1448 Approved: argv@sun.com Submitted-by: michael@parns.nsc.com (Michael Wagnitz) Posting-number: Volume 8, Issue 99 Archive-name: xmail/patch2.04 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'Patch.02d' <<'END_OF_FILE' X! markIndex(" "); X } X } X break; X--- 246,252 ---- X sprintf(tmp, "%d", msgnum); X XtFree(msg); X msg = QueryMail(tmp); X! markIndex("> "); X } X } X break; X*************** X*** 256,268 **** X markIndex("D"); X num = msgnum; X msgnum = index_handler(++msgnum, 0); /* next msg */ X! if (msgnum != num) markIndex(" "); X } X if (*Command == 'u') { X c = QueryMail("="); X sscanf(c, "%d", &msgnum); X XtFree(c); X! iw = WidgetOf(WidgetOf(toplevel, "topBox"),"indexWindow"); X if (TextGetLastPos(iw) < (XtTextPosition) 4) { X c = QueryMail("h"); X writeText(iw, c, FALSE); X--- 269,282 ---- X markIndex("D"); X num = msgnum; X msgnum = index_handler(++msgnum, 0); /* next msg */ X! if (msgnum != num) X! markIndex("> "); X } X if (*Command == 'u') { X c = QueryMail("="); X sscanf(c, "%d", &msgnum); X XtFree(c); X! iw = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow"); X if (TextGetLastPos(iw) < (XtTextPosition) 4) { X c = QueryMail("h"); X writeText(iw, c, FALSE); X*************** X*** 269,275 **** X XtFree(c); X } X msgnum = index_handler(msgnum, 1); X! markIndex(" "); X } X c = QueryMail("file"); /* resets current msg to 1 */ X (void) UpdateTitleBar(c); X--- 283,289 ---- X XtFree(c); X } X msgnum = index_handler(msgnum, 1); X! markIndex("> "); X } X c = QueryMail("file"); /* resets current msg to 1 */ X (void) UpdateTitleBar(c); X*************** X*** 281,295 **** X /* X ** In response to a request to view new mail, first reset the mailbox flag. X ** If mail came back with an error, complain to the user. Otherwise, clear X! ** the Newmail command button highlighting, and (if it exists) destroy the X! ** current folder popup list. Then display any new mail text. X */ X case C_NEWMAIL: X button = WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), X "commandPanel"), "Folder"); X UnsetNewmail(button, NULL, NULL); X- if (popup = WidgetOf(button, "popupList")) X- XtDestroyWidget(popup); X if (O_BELL == match(output_pattern, msg)) { X if (strncmp(msg, "No mail for ", 12) == 0) { X Bell("No mail in system mailbox\n"); X--- 295,306 ---- X /* X ** In response to a request to view new mail, first reset the mailbox flag. X ** If mail came back with an error, complain to the user. Otherwise, clear X! ** the Newmail command button highlighting. Then display any new mail text. X */ X case C_NEWMAIL: X button = WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), X "commandPanel"), "Folder"); X UnsetNewmail(button, NULL, NULL); X if (O_BELL == match(output_pattern, msg)) { X if (strncmp(msg, "No mail for ", 12) == 0) { X Bell("No mail in system mailbox\n"); X*************** X*** 316,322 **** X sprintf(tmp, "%d", msgnum); X XtFree(msg); X msg = QueryMail(tmp); X! markIndex(" "); /* 'cause we just read it */ X } X } X } X--- 327,333 ---- X sprintf(tmp, "%d", msgnum); X XtFree(msg); X msg = QueryMail(tmp); X! markIndex("> "); /* 'cause we just read it */ X } X } X } X*************** X*** 419,424 **** X--- 430,446 ---- X if (strcmp(&output[j], MailPrompt) == 0) { X output[j] = '\0'; /* Drop prompt from end of text */ X break; /* and return from read routine */ X+ } X+ X+ if (!strcmp(Command,"Start")) { /* see if somehow missed the prompt */ X+ j = strlen(output) - 3; /* no accidents allowed here either */ X+ if (j < 0) j = 0; /* no string references before zero */ X+ if (strcmp(&output[j], "\n& ") == 0) { /* if default mail prompt */ X+ output[++j] = '\0'; /* drop prompt from end of string */ X+ XtFree(MailPrompt); /* intended prompt is now bogus */ X+ MailPrompt = XtNewString("& "); /* reset the mail prompt */ X+ break; /* and return from read routine */ X+ } X } X X if (O_BELL == match(output_pattern,output) && !strcmp(Command,"Start")) X*** ../v1.1/utils.c Mon Jun 4 09:48:42 1990 X--- utils.c Mon Aug 27 11:09:22 1990 X*************** X*** 32,38 **** X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X--- 32,38 ---- X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X*************** X*** 72,95 **** X char *s; X { X XtTextBlock textblock; X! XtTextPosition pos; X Widget w = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow"); X X X! pos = XtTextGetInsertionPoint(w) + 1; X X! XtTextSetInsertionPoint(w, pos); X X textblock.firstPos = 0; X! textblock.length = 1; X textblock.ptr = s; X textblock.format = FMT8BIT; X X! XtTextReplace(w, pos, pos + 1, &textblock); X X XtTextSetInsertionPoint(w, pos); X- X- SetSelect(w, NULL, NULL, NULL); X } /* markIndex */ X X X--- 72,110 ---- X char *s; X { X XtTextBlock textblock; X! XtTextPosition pos, old; X Widget w = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow"); X+ char *p; X+ int size = strlen(s); X X X! pos = XtTextGetInsertionPoint(w); X X! if (*s == '>') /* first, remove any existing pointer */ X! if (p = index(IndexBuf, '>')) { X! old = p - IndexBuf; X! XtTextSetInsertionPoint(w, old); X! textblock.firstPos = 0; X! textblock.length = 1; X! textblock.ptr = " "; X! textblock.format = FMT8BIT; X! XtTextReplace(w, old, old + 1, &textblock); X! } X X+ for (p = IndexBuf + pos; p > IndexBuf && *(p - 1) != '\n'; p--); X+ X+ pos = (p - IndexBuf); X+ X+ XtTextSetInsertionPoint(w, (*s == '>') ? pos : ++pos); X+ X textblock.firstPos = 0; X! textblock.length = size; X textblock.ptr = s; X textblock.format = FMT8BIT; X X! XtTextReplace(w, pos, pos + size, &textblock); X X XtTextSetInsertionPoint(w, pos); X } /* markIndex */ X X X*************** X*** 186,192 **** X String msg; X { X Arg args[1]; X! char *p, *index(); X char buf[BUFSIZ]; X int worthy = 0; /* only msgs with ending newline are */ X X--- 201,207 ---- X String msg; X { X Arg args[1]; X! char *p; X char buf[BUFSIZ]; X int worthy = 0; /* only msgs with ending newline are */ X X*** ../v1.1/windows.c Mon Jun 4 09:48:44 1990 X--- windows.c Mon Aug 27 11:09:22 1990 X*************** X*** 32,38 **** X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X--- 32,38 ---- X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X*************** X*** 50,56 **** X X X #include "global.h" X! #include "Mailwatch.h" X #include "patchlevel.h" X #include "icon.mail" X #include "national.bm" X--- 50,56 ---- X X X #include "global.h" X! #include "MailwatchP.h" X #include "patchlevel.h" X #include "icon.mail" X #include "national.bm" X*************** X*** 164,170 **** X XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(b_Trans)); X for (indx = 0; list[indx] != NULL; indx++) { X strcpy(tag, list[indx]->label); /* set window name by label */ X! if ((c = (char *)index(tag, ' '))) *c = '\0'; /* first word only */ X sprintf(trans, "%-*.*s", j, j, list[indx]->label); X if (Labels[indx]) /* add accel. note if needed */ X strcat(trans, Labels[indx]); X--- 164,170 ---- X XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(b_Trans)); X for (indx = 0; list[indx] != NULL; indx++) { X strcpy(tag, list[indx]->label); /* set window name by label */ X! if ((c = index(tag, ' '))) *c = '\0'; /* first word only */ X sprintf(trans, "%-*.*s", j, j, list[indx]->label); X if (Labels[indx]) /* add accel. note if needed */ X strcat(trans, Labels[indx]); X*************** X*** 284,292 **** X b1.label = "Newmail"; b1.func = (XtCallbackProc) DoIt; b1.data = "file %"; X #ifdef SUNOS_4 X b2.label = "inc (no commit)"; b2.func = (XtCallbackProc) DoIt; b2.data = "inc"; X! list[0] = &b1; list[1] = &b2; list[2] = NULL; X #else X! list[0] = &b1; list[1] = NULL; X #endif X AddButton(parent, "Newmail", "DoCmd", "file %", list, NewMail_Help_Text); X X--- 284,294 ---- X b1.label = "Newmail"; b1.func = (XtCallbackProc) DoIt; b1.data = "file %"; X #ifdef SUNOS_4 X b2.label = "inc (no commit)"; b2.func = (XtCallbackProc) DoIt; b2.data = "inc"; X! b3.label = "Drop Folders"; b3.func = (XtCallbackProc) DropIt; b3.data = "drop"; X! list[0] = &b1; list[1] = &b2; list[2] = &b3; list[3] = NULL; X #else X! b2.label = "Drop Folders"; b2.func = (XtCallbackProc) DropIt; b2.data = "drop"; X! list[0] = &b1; list[1] = &b2; list[2] = NULL; X #endif X AddButton(parent, "Newmail", "DoCmd", "file %", list, NewMail_Help_Text); X X*************** X*** 388,395 **** X BackSpace: DeleteChar()\n\ X Linefeed: DoNothing()\n\ X Return: DoNothing()\n\ X! : CheckInsert() insert-char()"; X X XtSetArg(args[0], XtNwidth, XMail.fileBoxWidth); X XtSetArg(args[1], XtNfont, TextFontStr); X XtSetArg(args[2], XtNborderWidth, 0); X--- 390,400 ---- X BackSpace: DeleteChar()\n\ X Linefeed: DoNothing()\n\ X Return: DoNothing()\n\ X! : CheckInsert() insert-char()\n\ X! : select-start()\n\ X! : CheckInsert() insert-selection(PRIMARY, CUT_BUFFER0)"; X X+ X XtSetArg(args[0], XtNwidth, XMail.fileBoxWidth); X XtSetArg(args[1], XtNfont, TextFontStr); X XtSetArg(args[2], XtNborderWidth, 0); X*************** X*** 449,454 **** X--- 454,461 ---- X Arg args[6]; X Widget w; X X+ static String Trans = "#override\n\ X+ :Linefeed: MenuPopdown(help)"; X X XtSetArg(args[0], XtNborderWidth, 3); X w = XtCreatePopupShell("help", overrideShellWidgetClass, parent, args, 1); X*************** X*** 458,464 **** X XtSetArg(args[2], XtNfont, HelpFontStr); X XtSetArg(args[3], XtNeditType, (XtArgVal) XttextRead); X XtSetArg(args[4], XtNtextOptions, wordBreak); X! XtCreateManagedWidget("helpWindow", asciiStringWidgetClass, w, args, 5); X } /* CreateHelpWindow */ X X X--- 465,472 ---- X XtSetArg(args[2], XtNfont, HelpFontStr); X XtSetArg(args[3], XtNeditType, (XtArgVal) XttextRead); X XtSetArg(args[4], XtNtextOptions, wordBreak); X! XtSetArg(args[5], XtNtranslations, XtParseTranslationTable(Trans)); X! XtCreateManagedWidget("helpWindow", asciiStringWidgetClass, w, args, 6); X } /* CreateHelpWindow */ X X X*************** X*** 470,482 **** X Widget parent; X { X Arg args[8]; X Widget w; X X! static String translations = X! ": DoNothing() \n\ X! : select-start() SetSelect() \n\ X! : select-start() SetSelect() \n\ X! : DoSelected(p)"; X X XtSetArg(args[0], XtNheight, XMail.indexHeight); X XtSetArg(args[1], XtNfont, TextFontStr); X--- 478,508 ---- X Widget parent; X { X Arg args[8]; X+ int n; X Widget w; X X! static String translations = "\ X! CtrlL: redraw-display() \n\ X! CtrlV: next-page() \n\ X! CtrlZ: scroll-one-line-up() \n\ X! MetaV: previous-page() \n\ X! MetaZ: scroll-one-line-down() \n\ X! Meta\<: beginning-of-file() \n\ X! Meta\>: end-of-file() \n\ X! None Return: scroll-one-line-up() \n\ X! None space: next-page() \n\ X! None G: end-of-file() \n\ X! None b: previous-page() \n\ X! None j: scroll-one-line-up() \n\ X! None k: scroll-one-line-down() \n\ X! None -: scroll-one-line-down() \n\ X! None p: beginning-of-file() \n\ X! None \': beginning-of-file() \n\ X! : select-start() SetSelect() \n\ X! : extend-adjust() \n\ X! : extend-end(PRIMARY, CUT_BUFFER0) \n\ X! : select-start() SetSelect() \n\ X! : DoSelected(p)"; X X XtSetArg(args[0], XtNheight, XMail.indexHeight); X XtSetArg(args[1], XtNfont, TextFontStr); X*************** X*** 485,492 **** X XtSetArg(args[4], XtNeditType, (XtArgVal) XttextEdit); X XtSetArg(args[5], XtNtextOptions, scrollVertical | wordBreak); X XtSetArg(args[6], XtNtranslations, XtParseTranslationTable(translations)); X X! w = XtCreateManagedWidget("indexWindow",asciiStringWidgetClass,parent,args,7); X X AddHelpText(w, "index", Index_Help_Text); X } /* CreateIndexWindow */ X--- 511,522 ---- X XtSetArg(args[4], XtNeditType, (XtArgVal) XttextEdit); X XtSetArg(args[5], XtNtextOptions, scrollVertical | wordBreak); X XtSetArg(args[6], XtNtranslations, XtParseTranslationTable(translations)); X+ n = 7; X+ #if XtSpecificationRelease >= 4 X+ XtSetArg(args[n], XtNdisplayCaret, (XtArgVal) False); n++; X+ #endif X X! w = XtCreateManagedWidget("indexWindow",asciiStringWidgetClass,parent,args,n); X X AddHelpText(w, "index", Index_Help_Text); X } /* CreateIndexWindow */ X*************** X*** 537,543 **** X { X Arg args[4]; X Widget icon, mb, topbox; X! int x, y, width, height; X /* X ** Special added actions X */ X--- 567,573 ---- X { X Arg args[4]; X Widget icon, mb, topbox; X! int n, x, y; X /* X ** Special added actions X */ X*************** X*** 554,559 **** X--- 584,590 ---- X {"SetMenu", (XtActionProc) SetMenu}, X {"DoNothing", (XtActionProc) DoNothing}, X {"DoSelected", (XtActionProc) DoSelected}, X+ {"SavePos", (XtActionProc) SavePos}, X {"SetAliases", (XtActionProc) SetAliases}, X {"SetCursor", (XtActionProc) SetCursor}, X {"SetDirectory", (XtActionProc) SetDirectory}, X*************** X*** 566,571 **** X--- 597,603 ---- X {"MyNotify", (XtActionProc) MyNotify}, X {"NextField", (XtActionProc) NextField}, X {"PrintMsg", (XtActionProc) PrintMsg}, X+ {"SetPos", (XtActionProc) SetPos}, X {"Quit", (XtActionProc) Quit}, X {NULL, NULL} X }; X*************** X*** 588,602 **** X /* X ** Create an icon window for the mailwatchWidget X */ X- x = y = 0; X- if (XMail.iconGeometry) X- XParseGeometry(XMail.iconGeometry, &x, &y, &width, &height); X- X XtSetArg(args[0], XtNwidth, (XtArgVal) mail_width); X XtSetArg(args[1], XtNheight, (XtArgVal) mail_height); X! XtSetArg(args[2], XtNx, (XtArgVal) x); X! XtSetArg(args[3], XtNy, (XtArgVal) y); X! icon = XtCreateWidget("icon", applicationShellWidgetClass, toplevel, args, 4); X mb = XtCreateManagedWidget("mailbox", mailwatchWidgetClass, icon, NULL, 0); X XtAddCallback(mb, XtNcallback, SetNewmail, NULL); X } /* CreateSubWindows */ X--- 620,634 ---- X /* X ** Create an icon window for the mailwatchWidget X */ X XtSetArg(args[0], XtNwidth, (XtArgVal) mail_width); X XtSetArg(args[1], XtNheight, (XtArgVal) mail_height); X! n = 2; X! if (XMail.iconGeometry) { X! ParseIconGeometry(XMail.iconGeometry, &x, &y); X! XtSetArg(args[n], XtNx, (XtArgVal) x); n++; X! XtSetArg(args[n], XtNy, (XtArgVal) y); n++; X! } X! icon = XtCreateWidget("icon", applicationShellWidgetClass, toplevel, args, n); X mb = XtCreateManagedWidget("mailbox", mailwatchWidgetClass, icon, NULL, 0); X XtAddCallback(mb, XtNcallback, SetNewmail, NULL); X } /* CreateSubWindows */ X*************** X*** 609,625 **** X CreateTextWindow(parent) X Widget parent; X { X! Arg args[4]; X Widget tw; X X X XtSetArg(args[0], XtNmin, XMail.textMinHeight); X XtSetArg(args[1], XtNheight, XMail.textHeight); X XtSetArg(args[2], XtNfont, TextFontStr); X XtSetArg(args[3], XtNtextOptions, scrollVertical | wordBreak); X! tw = XtCreateManagedWidget("textWindow",asciiStringWidgetClass,parent,args,4); X X AddHelpText(tw, "text", Text_Help_Text); X } /* CreateTextWindow */ X X X--- 641,779 ---- X CreateTextWindow(parent) X Widget parent; X { X! Arg args[5]; X! int indx; X Widget tw; X+ #ifndef SUNOS_4 X+ static String Trans = "\ X+ Ctrl L: redraw-display() \n\ X+ Ctrl V: next-page() \n\ X+ Ctrl Z: scroll-one-line-up() \n\ X+ Meta V: previous-page() \n\ X+ Meta Z: scroll-one-line-down() \n\ X+ Meta \<: beginning-of-file() \n\ X+ Meta \>: end-of-file() \n\ X+ None Linefeed: MenuPopdown(help) \n\ X+ None Return: scroll-one-line-up() \n\ X+ None -: scroll-one-line-down() \n\ X+ None \': beginning-of-file() \n\ X+ None space: next-page() \n\ X+ None a: DoReply(a) \n\ X+ None b: previous-page() \n\ X+ None c: DoSave(c) \n\ X+ None d: DoSelected(d) \n\ X+ None f: DoSelected(P) \n\ X+ None j: scroll-one-line-up() \n\ X+ None k: scroll-one-line-down() \n\ X+ None m: DoReply(s) \n\ X+ None n: DoSelected(n) \n\ X+ None p: DoSelected(-) \n\ X+ None q: Quit(q) \n\ X+ None r: DoSelected(p) \n\ X+ None s: DoSave(s) \n\ X+ None u: DoSelected(u) \n\ X+ None w: DoSave(w) \n\ X+ None x: Quit(x) \n\ X+ A: DoReply(A) \n\ X+ C: DoSave(C) \n\ X+ F: DoReply(S) \n\ X+ G: end-of-file() \n\ X+ M: DoReply(r) \n\ X+ N: DoCmd(file %) \n\ X+ P: PrintMsg() \n\ X+ R: DoReply(R) \n\ X+ S: DoSave(S) \n\ X+ ?: SetHelp(text2) \n\ X+ : select-start() \n\ X+ : extend-adjust() \n\ X+ : extend-end(PRIMARY, CUT_BUFFER0) \n\ X+ : insert-selection(PRIMARY, CUT_BUFFER0) \n\ X+ : extend-start() \n\ X+ : extend-adjust() \n\ X+ : extend-end(PRIMARY, CUT_BUFFER0)"; X+ #else X+ static String Trans = "\ X+ Ctrl L: redraw-display() \n\ X+ Ctrl V: next-page() \n\ X+ Ctrl Z: scroll-one-line-up() \n\ X+ Meta V: previous-page() \n\ X+ Meta Z: scroll-one-line-down() \n\ X+ Meta \<: beginning-of-file() \n\ X+ Meta \>: end-of-file() \n\ X+ Shift A: DoReply(A) \n\ X+ Shift C: DoSave(C) \n\ X+ Shift F: DoReply(S) \n\ X+ Shift G: end-of-file() \n\ X+ Shift M: DoReply(r) \n\ X+ Shift N: DoCmd(file %) \n\ X+ Shift P: PrintMsg() \n\ X+ Shift R: DoReply(R) \n\ X+ Shift S: DoSave(S) \n\ X+ None Linefeed: MenuPopdown(help) \n\ X+ None Return: scroll-one-line-up() \n\ X+ None -: scroll-one-line-down() \n\ X+ None \': beginning-of-file() \n\ X+ None space: next-page() \n\ X+ None a: DoReply(a) \n\ X+ None b: previous-page() \n\ X+ None c: DoSave(c) \n\ X+ None d: DoSelected(d) \n\ X+ None f: DoSelected(P) \n\ X+ None j: scroll-one-line-up() \n\ X+ None k: scroll-one-line-down() \n\ X+ None m: DoReply(s) \n\ X+ None n: DoSelected(n) \n\ X+ None p: DoSelected(-) \n\ X+ None q: Quit(q) \n\ X+ None r: DoSelected(p) \n\ X+ None s: DoSave(s) \n\ X+ None u: DoSelected(u) \n\ X+ None w: DoSave(w) \n\ X+ None x: Quit(x) \n\ X+ ?: SetHelp(text2) \n\ X+ : select-start() \n\ X+ : extend-adjust() \n\ X+ : extend-end(PRIMARY, CUT_BUFFER0) \n\ X+ : insert-selection(PRIMARY, CUT_BUFFER0) \n\ X+ : extend-start() \n\ X+ : extend-adjust() \n\ X+ : extend-end(PRIMARY, CUT_BUFFER0)"; X+ #endif X X+ #if XtSpecificationRelease >= 4 X+ static String trans_2 = "#override \ X+ Ctrl R: search(backward) \n\ X+ Ctrl S: search(forward)"; X+ #endif X X XtSetArg(args[0], XtNmin, XMail.textMinHeight); X XtSetArg(args[1], XtNheight, XMail.textHeight); X XtSetArg(args[2], XtNfont, TextFontStr); X XtSetArg(args[3], XtNtextOptions, scrollVertical | wordBreak); X! XtSetArg(args[4], XtNtranslations, XtParseTranslationTable(Trans)); X! tw = XtCreateManagedWidget("textWindow",asciiStringWidgetClass,parent,args,5); X X+ #if XtSpecificationRelease >= 4 X+ XtOverrideTranslations(tw, XtParseTranslationTable(trans_2)); X+ #endif X+ X+ #ifdef SUNOS_4 X+ XtOverrideTranslations(tw, X+ XtParseTranslationTable("#override Nonei: DoCmd(inc)")); X+ #endif X+ X AddHelpText(tw, "text", Text_Help_Text); X+ X+ for (indx = 0; HelpNames[indx]; indx++) X+ if (strcmp(HelpNames[indx], "text2") == 0) break; X+ X+ if (HelpNames[indx]) { X+ XtSetArg(args[0], XtNstring, (XtArgVal) Text2_Help_Text); X+ XtSetArg(args[1], XtNlength, (XtArgVal) strlen(Text2_Help_Text)); X+ XtSetArg(args[2], XtNeditType, (XtArgVal) XttextRead); X+ X+ HelpStrings[indx] = XtStringSourceCreate(WidgetOf(WidgetOf(WidgetOf(toplevel,"topBox"),"help"),"helpWindow"),args,3); X+ } X } /* CreateTextWindow */ X X X*************** X*** 699,728 **** X { X Arg args[12]; X Cardinal n; X X static String trans = "#override \ X! Delete: delete-previous-character() beginning-of-line() end-of-line()\n\ X! BackSpace: delete-previous-character() beginning-of-line() end-of-line()\n\ X! CtrlH: delete-previous-character() beginning-of-line() end-of-line()\n\ X! CtrlU: beginning-of-line() kill-to-end-of-line() \n\ X! CtrlW: delete-previous-word() beginning-of-line() end-of-line()\n\ X! Return: NextField()"; X X static String b_trans = "#override \ X! : SetAliases() MenuPopup(aliasList)\n\ X! : DoNothing()\n\ X! : DoNothing()\n\ X! Delete: delete-previous-character() beginning-of-line() end-of-line()\n\ X! BackSpace: delete-previous-character() beginning-of-line() end-of-line()\n\ X! CtrlH: delete-previous-character() beginning-of-line() end-of-line()\n\ X! CtrlU: beginning-of-line() kill-to-end-of-line() \n\ X! CtrlW: delete-previous-word() beginning-of-line() end-of-line()\n\ X! Return: NextField()"; X X n = XMail.shellWidth - 106; /* - (scn + 2*(internal width + def.dist.)) */ X n -= TEXTWIDTH * 9 - 6; /* minus label text width less fudge factor */ X XtSetArg(args[0], XtNwidth, n); X- X XtSetArg(args[1], XtNinput, True); X XtSetArg(args[2], XtNheight, XMail.buttonHeight); X XtSetArg(args[3], XtNfont, TextFontStr); X--- 853,876 ---- X { X Arg args[12]; X Cardinal n; X+ Widget w; X X static String trans = "#override \ X! Delete: delete-previous-character() SavePos() beginning-of-file() SetPos()\n\ X! BackSpace: delete-previous-character() SavePos() beginning-of-file() SetPos()\n\ X! CtrlH: delete-previous-character() SavePos() beginning-of-file() SetPos()\n\ X! CtrlU: beginning-of-line() kill-to-end-of-line() \n\ X! CtrlW: delete-previous-word() SavePos() beginning-of-file() SetPos()\n\ X! Return: NextField()"; X X static String b_trans = "#override \ X! : SetAliases() MenuPopup(aliasList)\n\ X! : DoNothing()\n\ X! : DoNothing()"; X X n = XMail.shellWidth - 106; /* - (scn + 2*(internal width + def.dist.)) */ X n -= TEXTWIDTH * 9 - 6; /* minus label text width less fudge factor */ X XtSetArg(args[0], XtNwidth, n); X XtSetArg(args[1], XtNinput, True); X XtSetArg(args[2], XtNheight, XMail.buttonHeight); X XtSetArg(args[3], XtNfont, TextFontStr); X*************** X*** 731,742 **** X XtSetArg(args[6], XtNlength, len); X XtSetArg(args[7], XtNeditType, (XtArgVal) XttextEdit); X XtSetArg(args[8], XtNtextOptions, wordBreak); X! X! if (strcmp(name, "Subject") == 0) { X! XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(trans)); X! } else { X! XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(b_trans)); X! } X n = 10; X X #if XtSpecificationRelease >= 4 X--- 879,885 ---- X XtSetArg(args[6], XtNlength, len); X XtSetArg(args[7], XtNeditType, (XtArgVal) XttextEdit); X XtSetArg(args[8], XtNtextOptions, wordBreak); X! XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(trans)); X n = 10; X X #if XtSpecificationRelease >= 4 X*************** X*** 743,747 **** X XtSetArg(args[n], XtNautoFill, True); n++; X #endif X X! return( XtCreateManagedWidget(name,asciiStringWidgetClass,parent,args,n) ); X } /* CreateInputWindow */ X--- 886,915 ---- X XtSetArg(args[n], XtNautoFill, True); n++; X #endif X X! w = XtCreateManagedWidget(name, asciiStringWidgetClass, parent, args, n); X! X! if (strcmp(name, "Subject") != 0) X! XtOverrideTranslations(w, XtParseTranslationTable(b_trans)); X! X! return( w ); X } /* CreateInputWindow */ X+ X+ /* X+ ** @(#)ParseIconGeometry() - Parse the icon geometry X+ */ X+ void X+ ParseIconGeometry(str, x, y) X+ char *str; X+ int *x, *y; X+ { X+ int res; X+ unsigned int w, h; X+ X+ *x = 0; X+ *y = 0; X+ res = XParseGeometry(str, x, y, &w, &h); X+ if ((res & (XNegative|XValue)) == (XNegative|XValue)) X+ *x = RootWidth + *x - mail_width; X+ if ((res & (YNegative|YValue)) == (YNegative|YValue)) X+ *y = RootHeight + *y - mail_height; X+ } /* ParseIconGeometry */ X*** ../v1.1/xmail.c Mon Jun 4 09:48:45 1990 X--- xmail.c Mon Aug 27 11:09:22 1990 X*************** X*** 32,38 **** X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X--- 32,38 ---- X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X! * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X*************** X*** 48,57 **** X #include "global.h" X #include "Mailwatch.h" /* use as icon and watch for newmail */ X X! #if XtSpecificationRelease >= 4 X! #include X #else X! #include X #endif X X #include "icon.nomail" /* default icon pixmap source */ X--- 48,57 ---- X #include "global.h" X #include "Mailwatch.h" /* use as icon and watch for newmail */ X X! #if XtSpecificationRelease < 4 X! #include /* R3 */ X #else X! #include /* R4 */ X #endif X X #include "icon.nomail" /* default icon pixmap source */ X*************** X*** 61,67 **** X #define Offset(field) (XtOffset(XmailResources *, field)) X X static char what[] = X! "@(#)xmail.c 1.1 90/05/29 Copyright 1989 National Semiconductor Corp."; X X static XtResource resrcs[] = { X {XtNfont, XtCFont, XtRString, sizeof(char *), X--- 61,67 ---- X #define Offset(field) (XtOffset(XmailResources *, field)) X X static char what[] = X! "@(#)xmail.c 1.2 90/08/14 Copyright 1989, 1990 National Semiconductor Corp."; X X static XtResource resrcs[] = { X {XtNfont, XtCFont, XtRString, sizeof(char *), X*************** X*** 72,81 **** X Offset(iconGeometry), XtRString, (caddr_t) NULL}, X {"MFileName", "MFileName", XtRString, sizeof(char *), X Offset(MFileName), XtRString, (caddr_t) NULL}, X- {"iconic", "Iconic", XtRBoolean, sizeof(Boolean), X- Offset(iconic), XtRImmediate, (caddr_t) False}, X {"bellRing", "BellRing", XtRBoolean, sizeof(Boolean), X Offset(bellRing), XtRImmediate, (caddr_t) True}, X {"mailopt_n", "Mailopt_n", XtRBoolean, sizeof(Boolean), X Offset(mailopt_n), XtRImmediate, (caddr_t) False}, X {"mailopt_U", "Mailopt_U", XtRBoolean, sizeof(Boolean), X--- 72,83 ---- X Offset(iconGeometry), XtRString, (caddr_t) NULL}, X {"MFileName", "MFileName", XtRString, sizeof(char *), X Offset(MFileName), XtRString, (caddr_t) NULL}, X {"bellRing", "BellRing", XtRBoolean, sizeof(Boolean), X Offset(bellRing), XtRImmediate, (caddr_t) True}, X+ {"expert", "Expert", XtRBoolean, sizeof(Boolean), X+ Offset(expert), XtRImmediate, (caddr_t) False}, X+ {"iconic", "Iconic", XtRBoolean, sizeof(Boolean), X+ Offset(iconic), XtRImmediate, (caddr_t) False}, X {"mailopt_n", "Mailopt_n", XtRBoolean, sizeof(Boolean), X Offset(mailopt_n), XtRImmediate, (caddr_t) False}, X {"mailopt_U", "Mailopt_U", XtRBoolean, sizeof(Boolean), X*************** X*** 84,98 **** X Offset(Show_Last), XtRImmediate, (caddr_t) True}, X }; X X static XrmOptionDescRec Opts[] = { X! {"-helpfont", "*helpFont", XrmoptionSepArg, (caddr_t) NULL}, X! {"-iconGeometry", "*iconGeometry", XrmoptionSepArg, (caddr_t) NULL}, X! {"-iconic", "*iconic", XrmoptionNoArg, (caddr_t) "True"}, X! {"-f", "*MFileName", XrmoptionSepArg, (caddr_t) NULL}, X! {"-nb", "*bellRing", XrmoptionNoArg, (caddr_t) "False"}, X! {"-n", "*mailopt_n", XrmoptionNoArg, (caddr_t) "True"}, X! {"-U", "*mailopt_U", XrmoptionNoArg, (caddr_t) "True"}, X! {"-ls", "*Show_Last", XrmoptionNoArg, (caddr_t) "False"}, X }; X X char *IndexBuf; /* buffer for index widget */ X--- 86,105 ---- X Offset(Show_Last), XtRImmediate, (caddr_t) True}, X }; X X+ #undef Offset X+ X static XrmOptionDescRec Opts[] = { X! {"-e", "expert", XrmoptionNoArg, (caddr_t) "True"}, X! {"-f", "MFileName", XrmoptionSepArg, (caddr_t) NULL}, X! {"-helpfont", "helpFont", XrmoptionSepArg, (caddr_t) NULL}, X! {"-iconGeometry", "iconGeometry", XrmoptionSepArg, (caddr_t) NULL}, X! {"-iconic", "iconic", XrmoptionNoArg, (caddr_t) "True"}, X! {"-ls", "Show_Last", XrmoptionNoArg, (caddr_t) "False"}, X! {"-nb", "bellRing", XrmoptionNoArg, (caddr_t) "False"}, X! {"-n", "mailopt_n", XrmoptionNoArg, (caddr_t) "True"}, X! {"-U", "mailopt_U", XrmoptionNoArg, (caddr_t) "True"}, X! {"-u", "icon*useName", XrmoptionNoArg, (caddr_t) "True"}, X! {"-rv", "icon*reverseVideo", XrmoptionNoArg, (caddr_t) "True"}, X }; X X char *IndexBuf; /* buffer for index widget */ X*************** X*** 105,111 **** X char BccBuf[BUFSIZ]; /* message Bcc list */ X char tmpName[BUFSIZ]; /* message temporary filename */ X char *MailPrompt; /* mail program prompt string */ X! char *HelpNames[24]; /* array of help window names */ X char **mailargv; /* array passed to mail child */ X X int mailargc; /* counter passed to mail child */ X--- 112,118 ---- X char BccBuf[BUFSIZ]; /* message Bcc list */ X char tmpName[BUFSIZ]; /* message temporary filename */ X char *MailPrompt; /* mail program prompt string */ X! char *HelpNames[25]; /* array of help window names */ X char **mailargv; /* array passed to mail child */ X X int mailargc; /* counter passed to mail child */ X*************** X*** 119,125 **** X Widget toplevel; /* top level shell widget */ X X XmailResources XMail; /* application resources of xmail */ X! XtTextSource HelpStrings[23]; X XFontStruct *TextFontStr, *HelpFontStr; X X X--- 126,132 ---- X Widget toplevel; /* top level shell widget */ X X XmailResources XMail; /* application resources of xmail */ X! XtTextSource HelpStrings[24]; X XFontStruct *TextFontStr, *HelpFontStr; X X X*************** X*** 173,181 **** X HelpNames[i++] = "read"; HelpNames[i++] = "reply"; X HelpNames[i++] = "save"; HelpNames[i++] = "Send"; X HelpNames[i++] = "status"; HelpNames[i++] = "Subject"; X! HelpNames[i++] = "text"; HelpNames[i++] = "title"; X! HelpNames[i++] = "To"; HelpNames[i++] = "Autograph"; X! HelpNames[i] = NULL; X X strcpy(Command, "Start"); /* let parser know we've started */ X Recipient[0] = SubjBuf[0] = CcBuf[0] = BccBuf[0] = '\0'; X--- 180,188 ---- X HelpNames[i++] = "read"; HelpNames[i++] = "reply"; X HelpNames[i++] = "save"; HelpNames[i++] = "Send"; X HelpNames[i++] = "status"; HelpNames[i++] = "Subject"; X! HelpNames[i++] = "text"; HelpNames[i++] = "text2"; X! HelpNames[i++] = "title"; HelpNames[i++] = "To"; X! HelpNames[i++] = "Autograph"; HelpNames[i] = NULL; X X strcpy(Command, "Start"); /* let parser know we've started */ X Recipient[0] = SubjBuf[0] = CcBuf[0] = BccBuf[0] = '\0'; X*************** X*** 232,238 **** X XMail.buttonHeight = TEXTHEIGHT + (TextFontStr->ascent / 2); X XMail.buttonWidth = XTextWidth(TextFontStr, " Newmail ", 9); X buttonSpace = XMail.buttonWidth + XMail.commandHSpace + 2; X! XMail.shellWidth = (8 * buttonSpace) + 24; /* 8 buttons per row */ X XMail.fileBoxWidth = (4 * buttonSpace) + XMail.buttonWidth + 2; X XMail.helpHeight = HELPHEIGHT * 14; /* 14 lines by 60 chars */ X XMail.helpWidth = XTextWidth(HelpFontStr, "X11Windows", 10) * 6; X--- 239,245 ---- X XMail.buttonHeight = TEXTHEIGHT + (TextFontStr->ascent / 2); X XMail.buttonWidth = XTextWidth(TextFontStr, " Newmail ", 9); X buttonSpace = XMail.buttonWidth + XMail.commandHSpace + 2; X! XMail.shellWidth = (8 * buttonSpace) + 26; /* 8 buttons per row */ X XMail.fileBoxWidth = (4 * buttonSpace) + XMail.buttonWidth + 2; X XMail.helpHeight = HELPHEIGHT * 14; /* 14 lines by 60 chars */ X XMail.helpWidth = XTextWidth(HelpFontStr, "X11Windows", 10) * 6; X*************** X*** 258,264 **** X Display *dpy; X XSizeHints size_hints; X XWMHints wm_hints; X! int scn, depth, x, y, width, height; X CommandWidget nm = (CommandWidget)WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), "commandPanel"), "Newmail"); X X X--- 265,271 ---- X Display *dpy; X XSizeHints size_hints; X XWMHints wm_hints; X! int scn, depth, x, y; X CommandWidget nm = (CommandWidget)WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), "commandPanel"), "Newmail"); X X X*************** X*** 276,301 **** X /* X ** Notify the window manager about our icon window X */ X! wm_hints.input = True; X X! wm_hints.initial_state = (XMail.iconic) ? IconicState : NormalState; X X- x = RootWidth - 58; /* provide some reasonable defaults */ X- y = 83; /* slightly down the right side top */ X- if (XMail.iconGeometry) X- XParseGeometry(XMail.iconGeometry, &x, &y, &width, &height); X- X- wm_hints.icon_x = x; X- wm_hints.icon_y = y; X- X- wm_hints.flags = InputHint | StateHint | IconPositionHint; X- X #ifndef PIXMAP_ICON X! wm_hints.flags |= IconWindowHint; X! wm_hints.icon_window = XtWindow(XtNameToWidget(toplevel, "icon")); X #else X! wm_hints.flags |= IconPixmapHint; X! wm_hints.icon_pixmap = XCreateBitmapFromData(dpy, XtScreen(toplevel)->root, X no_mail_bits, no_mail_width, no_mail_height); X #endif X X--- 283,305 ---- X /* X ** Notify the window manager about our icon window X */ X! wm_hints.input = True; X! wm_hints.initial_state = (XMail.iconic) ? IconicState : NormalState; X! wm_hints.flags = InputHint | StateHint; X X! if (XMail.iconGeometry) { X! ParseIconGeometry(XMail.iconGeometry, &x, &y); X! wm_hints.icon_x = x; X! wm_hints.icon_y = y; X! wm_hints.flags |= IconPositionHint; X! } X X #ifndef PIXMAP_ICON X! wm_hints.flags |= IconWindowHint; X! wm_hints.icon_window = XtWindow(XtNameToWidget(toplevel, "icon")); X #else X! wm_hints.flags |= IconPixmapHint; X! wm_hints.icon_pixmap = XCreateBitmapFromData(dpy, XtScreen(toplevel)->root, X no_mail_bits, no_mail_width, no_mail_height); X #endif X X*************** X*** 350,355 **** X--- 354,361 ---- X SetHints(); X X callMail(mailargc, mailargv); X+ X+ XSync(XtDisplay(toplevel), False); X X XtMainLoop(); X } /* main */ X*** ../v1.1/xmail.man Mon Jun 4 09:48:46 1990 X--- xmail.man Mon Aug 27 11:09:22 1990 X*************** X*** 1,5 **** X .\" X! .\" @(#)xmail.l 1.1 90/05/29 NSC; X .\" X .\" Copyright 1990 by National Semiconductor Corporation. X .\" X--- 1,5 ---- X .\" X! .\" @(#)xmail.l 1.2 90/09/14 NSC; X .\" X .\" Copyright 1990 by National Semiconductor Corporation. X .\" X*************** X*** 30,36 **** X .if t .ds Q `` X .if t .ds U '' X .\" X! .TH XMAIL 1 "May 29, 1990" "NSC" X .SH NAME X xmail \- X11 visual interface to the mail program X .SH SYNOPSIS X--- 30,36 ---- X .if t .ds Q `` X .if t .ds U '' X .\" X! .TH XMAIL 1 "August 14, 19 X*************** X*** 345,350 **** X--- 369,384 ---- X and send/reply) to orient to that same starting location, rather than be X anchored to the intended window. X .TP 3 X+ \fB*expert: \fI\fR X+ This boolean defines whether the \*(xM user requires confirmation of X+ folder commits or composed message deletions. Whenever an action X+ would make a permanent un-recoverable change to the \*(xM environment, a X+ popup confirmation window will be presented for the user, to assure that X+ the action should take place. These confirmations include changing a X+ folder when deletions have occurred, or deleting the text of a newly X+ composed message instead of sending it. Setting this resource to True X+ eliminates those confirmation popups. X+ .TP 3 X \fB*iconic: \fI\fR X This boolean defines whether the \*(xM application should be started in X iconic state or not. It is highly recommended that only the application X*************** X*** 353,359 **** X message entry windows to be started iconic, which could prove confusing X to the unaware user. X .TP 3 X! \fB*iconGeometry: \fI+XOff+YOff\fR X This resource defines an initial location for the icon, whenever the X \*(xM application is iconified. X .TP 3 X--- 387,393 ---- X message entry windows to be started iconic, which could prove confusing X to the unaware user. X .TP 3 X! \fB*iconGeometry: \fI[+-]XOff[+-]YOff\fR X This resource defines an initial location for the icon, whenever the X \*(xM application is iconified. X .TP 3 X*************** X*** 383,392 **** X .TP 3 X \fB*icon\fR X controls resources for the \fIicon\fR window. In addition to X! specifications of foreground and background colors, it is possible X! to also specify mailWatch widget resources, such as the following: X .RS X .TP 3 X \fB*icon*reverseVideo: \fI\fR X If set to true, reverses the foreground and background colors for the icon. X .TP 3 X--- 417,430 ---- X .TP 3 X \fB*icon\fR X controls resources for the \fIicon\fR window. In addition to X! specifications of foreground and background colors, it is also possible X! to specify the following mailWatch widget resources : X .RS X .TP 3 X+ \fB*icon*useName: \fI\fR X+ If set to true, tells \*(xM to include the user login name in the icon window X+ when displaying the icon. X+ .TP 3 X \fB*icon*reverseVideo: \fI\fR X If set to true, reverses the foreground and background colors for the icon. X .TP 3 X*************** X*** 442,447 **** X--- 480,556 ---- X file \fB/usr/lib/X11/app-defaults/XMail\fR. User's may wish to include X appropriate alternate definitions in their ~/.Xdefaults file, to tailor X preferences for colors and/or fonts. X+ .SH "KEYBOARD ACCELERATORS" X+ The index and text windows support two methods of scrolling displayable X+ text. The use of the mouse buttons in the scrollbar region is standard. X+ In addition, keyboard keys have been defined in keeping with conventions X+ used in text display programs such as \*Qmore\*U and \*Qless\*U. X+ X+ The following table lists the key definitions and their respective actions. X+ The abbreviation \*QCtrl\*U means to press down and hold the \fBControl\fR X+ key while pressing the specified letter key. \*QMeta\*U likewise refers X+ to the \fBmeta\fR keys (\fIlabeled \*QLeft\*U and \*QRight\*U on some X+ Sun keyboards\fR). X+ .sp X+ .RS X+ .nf X+ Key Name Action Taken X+ -------- ----------------------------- X+ Ctrl V move to the next page X+ space move to the next page X+ Meta V move to the previous page X+ b move to the previous page X+ Ctrl Z scroll one line up X+ Return scroll one line up X+ j scroll one line up X+ Meta Z scroll one line down X+ k scroll one line down X+ - scroll one line down X+ \' move to the beginning of file X+ Meta < move to the beginning of file X+ Meta > move to the end of file X+ Shift G move to the end of file X+ .fi X+ .RE X+ .sp X+ .LP X+ In addition to the scroll key definitions, the \fItext\fR window also supports X+ keyboard accelerators for most of the command buttons. Where possible, X+ these keyboard keys replicate the actual commands that would be typed X+ if the user were running the native mail program. Thus, to begin X+ sending a mail message to some recipient, the user could press the \*Qm\*U key, X+ and to delete a current message, the user could press the \*Qd\*U key. X+ .sp X+ .RS X+ .nf X+ Key Name Command Action Taken X+ -------- ----------------------------- X+ Shift A reply to all, include the current message X+ Shift C copy the message to the author's name X+ Shift F forward the current mail message X+ Shift M reply to a mail message X+ Shift N bring new mail into your system folder X+ Shift P send the current message to the printer X+ Shift R include the current message in a reply X+ Shift S save the message to the author's name X+ a reply to all recipients of a message X+ c copy the message to the indicated folder X+ d delete the current message X+ f read the full header of the message X+ i incorporate new mail without commit X+ m mail (compose) a new mail message X+ n read the next mail message X+ p read the previous mail message X+ q quit xmail, committing any changes X+ r read the current mail message X+ s save current message in specified folder X+ u undelete the most recently deleted message X+ w writes the message to the indicated file X+ x exit xmail, without committing changes X+ ? displays help for these key definitions X+ removes help for these key definitions X+ .fi X+ .RE X .SH "ENVIRONMENT" X Several process environment variables are of potential interest to \*(xM. X .sp X*************** X*** 482,488 **** X path of the process (assumed to be at least \*Q/bin /usr/bin /usr/ucb\*U). X If need be, the XMAILER X environment variable can be used to provide a specific path to the Mail X! program. Note: \*(xM will not work correctly with any mail program END_OF_FILE if test 52848 -ne `wc -c <'Patch.02d'`; then echo shar: \"'Patch.02d'\" unpacked with wrong size! fi # end of 'Patch.02d' fi echo shar: End of archive 4 \(of 5\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 5 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.