📄 search.c
字号:
XtVaSetValues(XtParent(form), XmNtitle, "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, 6); 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, 'S'); 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, "searchString", args, argcnt); XtAddCallback(findText, XmNfocusCallback, (XtCallbackProc)fFocusCB, window); XtAddCallback(findText, XmNvalueChangedCallback, (XtCallbackProc)findTextValueChangedCB, window); XtAddEventHandler(findText, KeyPressMask, False, (XtEventHandler)findArrowKeyCB, window); RemapDeleteKey(findText); XtManageChild(findText); XmAddTabGroup(findText); XtVaSetValues(label1, XmNuserData, findText, 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, findText); 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->findRegexToggle = XmCreateToggleButton(searchTypeBox, "regExp", args, argcnt); XmStringFree(st1); XtManageChild(window->findRegexToggle); XtAddCallback(window->findRegexToggle, XmNvalueChangedCallback, (XtCallbackProc) findRegExpToggleCB, 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->findCaseToggle = XmCreateToggleButton(searchTypeBox, "caseSensitive", args, argcnt); XmStringFree(st1); XtManageChild(window->findCaseToggle); XtAddCallback(window->findCaseToggle, XmNvalueChangedCallback, (XtCallbackProc) findCaseToggleCB, 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->findWordToggle = XmCreateToggleButton(searchTypeBox, "wholeWord", args, argcnt); XmStringFree(st1); XtManageChild(window->findWordToggle); 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)fKeepCB, window); XmStringFree(st1); XtManageChild(keepBtn); XmAddTabGroup(keepBtn); argcnt = 0; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); 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, 4); argcnt++; btnForm = XmCreateForm(form, "buttons", args, argcnt); XtManageChild(btnForm); XmAddTabGroup(btnForm); argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Find")); argcnt++; XtSetArg(args[argcnt], XmNshowAsDefault, (short)1); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_POSITION); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftPosition, 20); argcnt++; XtSetArg(args[argcnt], XmNbottomOffset, 6); argcnt++; findBtn = XmCreatePushButton(btnForm, "find", args, argcnt); XtAddCallback(findBtn, XmNactivateCallback, (XtCallbackProc)findCB, window); XmStringFree(st1); XtManageChild(findBtn); XtVaGetValues(findBtn, XmNshadowThickness, &shadowThickness, NULL); defaultBtnOffset = shadowThickness + 4; argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Cancel")); argcnt++; 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_POSITION); argcnt++; XtSetArg(args[argcnt], XmNrightPosition, 80); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, defaultBtnOffset); argcnt++; cancelBtn = XmCreatePushButton(btnForm, "cancel", args, argcnt); XtAddCallback(cancelBtn, XmNactivateCallback, (XtCallbackProc)fCancelCB, window); XmStringFree(st1); XtManageChild(cancelBtn); XtVaSetValues(form, XmNcancelButton, cancelBtn, NULL); AddDialogMnemonicHandler(form, FALSE); window->findDlog = form; window->findText = findText; window->findRevToggle = reverseBtn; window->findKeepBtn = keepBtn; window->findBtns = btnForm; window->findBtn = findBtn; window->findSearchTypeBox = searchTypeBox;}static void createReplaceMultiFileDlog(WindowInfo *window) { Arg args[50]; int argcnt, defaultBtnOffset; XmString st1; Widget list, label1, form, pathBtn; Widget btnForm, replaceBtn, selectBtn, deselectBtn, cancelBtn; Dimension shadowThickness; argcnt = 0; XtSetArg(args[argcnt], XmNautoUnmanage, False); argcnt++; XtSetArg (args[argcnt], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); argcnt ++; /* Ideally, we should create the multi-file dialog as a child widget of the replace dialog. However, if we do this, the main window can hide the multi-file dialog when raised (I'm not sure why, but it's something that I observed with fvwm). By using the main window as the parent, it is possible that the replace dialog _partially_ covers the multi-file dialog, but this much better than the multi-file dialog being covered completely by the main window */ form = CreateFormDialog(window->shell, "replaceMultiFileDialog", args, argcnt); XtVaSetValues(form, XmNshadowThickness, 0, NULL); XtVaSetValues(XtParent(form), XmNtitle, "Replace All in Multiple Files", NULL); /* Label at top left. */ 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++; /* Offset = 6 + (highlightThickness + detailShadowThickness) of the toggle button (see below). Unfortunately, detailShadowThickness is a Motif 2.x property, so we can't measure it. The default is 2 pixels. To make things even more complicated, the SunOS 5.6 / Solaris 2.6 version of Motif 1.2 seems to use a detailShadowThickness of 0 ... So we'll have to live with a slight misalignment on that platform (those Motif libs are known to have many other problems). */ XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNalignment, XmALIGNMENT_BEGINNING); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Files in which to Replace All:")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'F'); argcnt++; label1 = XmCreateLabel(form, "label1", args, argcnt); XmStringFree(st1); XtManageChild(label1); /* Pathname toggle button at top right (always unset by default) */ argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNset, False); 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("Show Path Names")); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'P'); argcnt++; pathBtn = XmCreateToggleButton(form, "path", args, argcnt); XmStringFree(st1); XtAddCallback(pathBtn, XmNvalueChangedCallback, (XtCallbackProc)rMultiFilePathCB, window); XtManageChild(pathBtn); /* * Buttons at bottom. Place them before the list, such that we can * attach the list to the label and the button box. In that way only * the lists resizes vertically when the dialog is resized; users expect * the list to resize, not the buttons. */ argcnt = 0; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNleftOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNrightOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNtopOffset, 6); argcnt++; XtSetArg(args[argcnt], XmNresizable, (short)0); argcnt++; btnForm = XmCreateForm(form, "buttons", args, argcnt); XtManageChild(btnForm); /* Replace */ argcnt = 0; XtSetArg(args[argcnt], XmNtraversalOn, True); argcnt++; XtSetArg(args[argcnt], XmNhighlightThickness, 2); argcnt++; XtSetArg(args[argcnt], XmNlabelString, st1=MKSTRING("Replace")); argcnt++; XtSetArg(args[argcnt], XmNshowAsDefault, (short)1); argcnt++; XtSetArg(args[argcnt], XmNmnemonic, 'R'); argcnt++; XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++; XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++; XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_POSITION);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -