📄 search.c
字号:
/* Set the state of the Keep Dialog Up button */ XmToggleButtonSetState(window->findKeepBtn, keepDialogs, True); /* Set the state of the Find button */ fUpdateActionButtons(window); /* start the search history mechanism at the current history item */ window->fHistIndex = 0; /* Display the dialog */ ManageDialogCenteredOnPointer(window->findDlog);}void DoReplaceMultiFileDlog(WindowInfo *window){ char searchString[SEARCHMAX], replaceString[SEARCHMAX]; int direction, searchType; /* Validate and fetch the find and replace strings from the dialog */ if (!getReplaceDlogInfo(window, &direction, searchString, replaceString, &searchType)) return; /* Don't let the user select files when no replacement can be made */ if (*searchString == '\0') { /* Set the initial focus of the dialog back to the search string */ resetReplaceTabGroup(window); /* pop down the replace dialog */ if (!XmToggleButtonGetState(window->replaceKeepBtn)) unmanageReplaceDialogs(window); return; } /* Create the dialog if it doesn't already exist */ if (window->replaceMultiFileDlog == NULL) createReplaceMultiFileDlog(window); /* Raising the window doesn't make sense. It is modal, so we can't get here unless it is unmanaged */ /* Prepare a list of writable windows */ collectWritableWindows(window); /* Initialize/update the list of files. */ uploadFileListItems(window, False); /* Display the dialog */ ManageDialogCenteredOnPointer(window->replaceMultiFileDlog);}/*** If a window is closed (possibly via the window manager) while it is on the** multi-file replace dialog list of any other window (or even the same one),** we must update those lists or we end up with dangling references.** Normally, there can be only one of those dialogs at the same time** (application modal), but Lesstif doesn't (always) honor application** modalness, so there can be more than one dialog. */void RemoveFromMultiReplaceDialog(WindowInfo *doomedWindow){ WindowInfo *w; for (w=WindowList; w!=NULL; w=w->next) if (w->writableWindows) /* A multi-file replacement dialog is up for this window */ checkMultiReplaceListForDoomedW(w, doomedWindow);}static void createReplaceDlog(Widget parent, WindowInfo *window){ Arg args[50]; int argcnt, defaultBtnOffset; XmString st1; Widget form, btnForm;#ifdef REPLACE_SCOPE Widget scopeForm, replaceAllBtn;#else Widget label3, allForm;#endif Widget inWinBtn, inSelBtn, inMultiBtn; Widget searchTypeBox; Widget label2, label1, label, replaceText, findText; Widget findBtn, cancelBtn, replaceBtn; Widget replaceFindBtn; Widget searchDirBox, reverseBtn, keepBtn; char title[MAXPATHLEN + 19]; Dimension shadowThickness; argcnt = 0; XtSetArg(args[argcnt], XmNautoUnmanage, False); argcnt++; form = CreateFormDialog(parent, "replaceDialog", args, argcnt); XtVaSetValues(form, XmNshadowThickness, 0, NULL); if (GetPrefKeepSearchDlogs()) { sprintf(title, "Replace/Find (in %s)", window->filename); XtVaSetValues(XtParent(form), XmNtitle, title, NULL); } else XtVaSetValues(XtParent(form), XmNtitle, "Replace/Find", NULL); argcnt = 0; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 4); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNalignment, XmALIGNMENT_BEGINNING); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("String to Find:")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 't'); argcnt++; label1 = XmCreateLabel(form, "label1", args, argcnt); XmStringFree(st1); XtManageChild(label1); argcnt = 0; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNalignment, XmALIGNMENT_END); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING( "(use up arrow key to recall previous)")); argcnt++; label2 = XmCreateLabel(form, "label2", args, argcnt); XmStringFree(st1); XtManageChild(label2); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, label1); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNmaxLength, SEARCHMAX); argcnt++; findText = XmCreateText(form, "replaceString", args, argcnt); XtAddCallback(findText, XmNfocusCallback, (XtCallbackProc)rFocusCB, window); XtAddCallback(findText, XmNvalueChangedCallback, (XtCallbackProc)rFindTextValueChangedCB, window); XtAddEventHandler(findText, KeyPressMask, False, (XtEventHandler)rFindArrowKeyCB, window); RemapDeleteKey(findText); XtManageChild(findText); XmAddTabGroup(findText); XtVaSetValues(label1, XmNuserData, findText, NULL); /* mnemonic processing */ argcnt = 0; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, findText); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNalignment, XmALIGNMENT_BEGINNING); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Replace With:")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'W'); argcnt++; label = XmCreateLabel(form, "label", args, argcnt); XmStringFree(st1); XtManageChild(label); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, label); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNmaxLength, SEARCHMAX); argcnt++; replaceText = XmCreateText(form, "replaceWithString", args, argcnt); XtAddEventHandler(replaceText, KeyPressMask, False, (XtEventHandler)replaceArrowKeyCB, window); RemapDeleteKey(replaceText); XtManageChild(replaceText); XmAddTabGroup(replaceText); XtVaSetValues(label, XmNuserData, replaceText, NULL); /* mnemonic processing */ argcnt = 0; XtSetArg(args[argcnt], XmNorientation, XmHORIZONTAL); argcnt++; XtSetArg(args[argcnt], XmNpacking, XmPACK_TIGHT); argcnt++; XtSetArg(args[argcnt], XmNmarginHeight, 0); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, replaceText); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 2); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 4); argcnt++; searchTypeBox = XmCreateRowColumn(form, "searchTypeBox", args, argcnt); XtManageChild(searchTypeBox); XmAddTabGroup(searchTypeBox); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Regular Expression")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'R'); argcnt++; window->replaceRegexToggle = XmCreateToggleButton(searchTypeBox, "regExp", args, argcnt); XmStringFree(st1); XtManageChild(window->replaceRegexToggle); XtAddCallback(window->replaceRegexToggle, XmNvalueChangedCallback, (XtCallbackProc) replaceRegExpToggleCB, window); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Case Sensitive")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'C'); argcnt++; window->replaceCaseToggle = XmCreateToggleButton(searchTypeBox, "caseSensitive", args, argcnt); XmStringFree(st1); XtManageChild(window->replaceCaseToggle); XtAddCallback(window->replaceCaseToggle, XmNvalueChangedCallback, (XtCallbackProc) replaceCaseToggleCB, window); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Whole Word")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'h'); argcnt++; window->replaceWordToggle = XmCreateToggleButton(searchTypeBox, "wholeWord", args, argcnt); XmStringFree(st1); XtManageChild(window->replaceWordToggle); argcnt = 0; XtSetArg(args[argcnt], XmNorientation, XmHORIZONTAL); argcnt++; XtSetArg(args[argcnt], XmNpacking, XmPACK_TIGHT); argcnt++; XtSetArg(args[argcnt], XmNmarginHeight, 0); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, searchTypeBox); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 2); argcnt++; XtSetArg(args[argcnt], XmNradioBehavior, False); argcnt++; searchDirBox = XmCreateRowColumn(form, "searchDirBox", args, argcnt); XtManageChild(searchDirBox); XmAddTabGroup(searchDirBox); argcnt = 0; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Search Backward")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'B'); argcnt++; reverseBtn = XmCreateToggleButton(searchDirBox, "reverse", args, argcnt); XmStringFree(st1); XtManageChild(reverseBtn); argcnt = 0; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Keep Dialog")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'K'); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, searchTypeBox); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 4); argcnt++; keepBtn = XmCreateToggleButton(form, "keep", args, argcnt); XtAddCallback(keepBtn, XmNvalueChangedCallback, (XtCallbackProc)rKeepCB, window); XmStringFree(st1); XtManageChild(keepBtn); XmAddTabGroup(keepBtn); #ifdef REPLACE_SCOPE argcnt = 0; XtSetArg(args[argcnt], XmNorientation, XmHORIZONTAL); argcnt++; XtSetArg(args[argcnt], XmNpacking, XmPACK_TIGHT); argcnt++; XtSetArg(args[argcnt], XmNmarginHeight, 0); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNtopWidget, searchDirBox); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 2); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNradioBehavior, True); argcnt++; XtSetArg(args[argcnt], XmNradioAlwaysOne, True); argcnt++; scopeForm = XmCreateRowColumn(form, "scope", args, argcnt); XtManageChild(scopeForm); XmAddTabGroup(scopeForm); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("In Window")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'i'); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -