⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preferences.c

📁 nedit 是一款linux下的开发源码的功能强大的编辑器
💻 C
📖 第 1 页 / 共 5 页
字号:
void RestoreNEditPrefs(XrmDatabase prefDB, XrmDatabase appDB){    int requiresConversion;    int major;              /* The integral part of version number */    int minor;              /* fractional part of version number */    int fileVer = 0;        /* Both combined into an integer */    int nparsed;        /* Load preferences */    RestorePreferences(prefDB, appDB, APP_NAME,    	    APP_CLASS, PrefDescrip, XtNumber(PrefDescrip));    /* If the preferences file was written by an older version of NEdit,       warn the user that it will be converted. */    requiresConversion = PrefData.prefFileRead &&    	    PrefData.fileVersion[0] == '\0';    if (requiresConversion) {	updatePatternsTo5dot1();    }    if (PrefData.prefFileRead) {        if (PrefData.fileVersion[0] == '\0') {            fileVer = 0;    /* Pre-5.1 */        }        else {            /* Note: do not change the format of this.  Older executables               need to read this field for forward compatability. */            nparsed = sscanf(PrefData.fileVersion, "%d.%d", &major, &minor);            if (nparsed >= 2) {                /* Use OSF-style numbering scheme */                fileVer = major * 1000 + minor;            }        }    }    if (PrefData.prefFileRead && fileVer < 5002) {        updatePatternsTo5dot2();    }        if (PrefData.prefFileRead && fileVer < 5003) {        updateShellCmdsTo5dot3();        updatePatternsTo5dot3();    }    /* Note that we don't care about unreleased file versions.  Anyone       who is running a CVS or alpha version of NEdit is resposnbile       for managing the preferences file themselves.  Otherwise, it       gets impossible to track the number of "in-between" file formats.       We only do auto-upgrading for a real release. */    if (PrefData.prefFileRead && (fileVer < 5004)) {        /* There are some implict conversions done later - show this           message even if there's no explicit call to upgrade. */        fprintf(stderr, "NEdit: Converting .nedit file to 5.4 version.\n"                "    To keep, use Preferences -> Save Defaults\n");        migrateColorResources(prefDB, appDB);        updateShellCmdsTo5dot4();        updatePatternsTo5dot4();    }    /* Migrate colors if there's no config file yet */    if (!PrefData.prefFileRead) {        migrateColorResources(prefDB, appDB);    }       /* Do further parsing on resource types which RestorePreferences does       not understand and reads as strings, to put them in the final form       in which nedit stores and uses.  If the preferences file was       written by an older version of NEdit, update regular expressions in       highlight patterns to quote braces and use & instead of \0 */    translatePrefFormats(requiresConversion, fileVer);}/*** Many of of NEdit's preferences are much more complicated than just simple** integers or strings.  These are read as strings, but must be parsed and** translated into something meaningful.  This routine does the translation,** and, in most cases, frees the original string, which is no longer useful.**** The argument convertOld attempts a conversion from pre 5.1 format .nedit** files (which means patterns and macros may contain regular expressions** which are of the older syntax where braces were not quoted, and \0 was a** legal substitution character).  Macros, so far can not be automatically** converted, unfortunately.*/static void translatePrefFormats(int convertOld, int fileVer){    XFontStruct *font;    /* Parse the strings which represent types which are not decoded by       the standard resource manager routines */#ifndef VMS    if (TempStringPrefs.shellCmds != NULL) {	LoadShellCmdsString(TempStringPrefs.shellCmds);	XtFree(TempStringPrefs.shellCmds);	TempStringPrefs.shellCmds = NULL;    }#endif /* VMS */    if (TempStringPrefs.macroCmds != NULL) {	LoadMacroCmdsString(TempStringPrefs.macroCmds);    	XtFree(TempStringPrefs.macroCmds);	TempStringPrefs.macroCmds = NULL;    }    if (TempStringPrefs.bgMenuCmds != NULL) {	LoadBGMenuCmdsString(TempStringPrefs.bgMenuCmds);    	XtFree(TempStringPrefs.bgMenuCmds);	TempStringPrefs.bgMenuCmds = NULL;    }    if (TempStringPrefs.highlight != NULL) {	LoadHighlightString(TempStringPrefs.highlight, convertOld);    	XtFree(TempStringPrefs.highlight);	TempStringPrefs.highlight = NULL;    }    if (TempStringPrefs.styles != NULL) {	LoadStylesString(TempStringPrefs.styles);    	XtFree(TempStringPrefs.styles);	TempStringPrefs.styles = NULL;    }    if (TempStringPrefs.language != NULL) {	loadLanguageModesString(TempStringPrefs.language, fileVer);    	XtFree(TempStringPrefs.language);	TempStringPrefs.language = NULL;    }    if (TempStringPrefs.smartIndent != NULL) {	LoadSmartIndentString(TempStringPrefs.smartIndent);    	XtFree(TempStringPrefs.smartIndent);	TempStringPrefs.smartIndent = NULL;    }    if (TempStringPrefs.smartIndentCommon != NULL) {	LoadSmartIndentCommonString(TempStringPrefs.smartIndentCommon);	XtFree(TempStringPrefs.smartIndentCommon);	TempStringPrefs.smartIndentCommon = NULL;    }        /* translate the font names into fontLists suitable for the text widget */    font = XLoadQueryFont(TheDisplay, PrefData.fontString);    PrefData.fontList = font==NULL ? NULL :	    XmFontListCreate(font, XmSTRING_DEFAULT_CHARSET);    PrefData.boldFontStruct = XLoadQueryFont(TheDisplay,    	    PrefData.boldFontString);    PrefData.italicFontStruct = XLoadQueryFont(TheDisplay,    	    PrefData.italicFontString);    PrefData.boldItalicFontStruct = XLoadQueryFont(TheDisplay,    	    PrefData.boldItalicFontString);        /* For compatability with older (4.0.3 and before) versions, the autoWrap       and autoIndent resources can accept values of True and False.  Translate       them into acceptable wrap and indent styles */    if (PrefData.wrapStyle == 3) PrefData.wrapStyle = NEWLINE_WRAP;    if (PrefData.wrapStyle == 4) PrefData.wrapStyle = NO_WRAP;    if (PrefData.autoIndent == 3) PrefData.autoIndent = AUTO_INDENT;    if (PrefData.autoIndent == 4) PrefData.autoIndent = NO_AUTO_INDENT;}void SaveNEditPrefs(Widget parent, int quietly){    const char* prefFileName = GetRCFileName(NEDIT_RC);    if (prefFileName == NULL)    {        /*  GetRCFileName() might return NULL if an error occurs during            creation of the preference file directory. */        DialogF(DF_WARN, parent, 1, "Error saving Preferences",                "Unable to save preferences: Cannot determine filename.",                "Dismiss");        return;    }    if (!quietly) {        if (DialogF(DF_INF, parent, 2, "Save Preferences",                ImportedFile == NULL ?                "Default preferences will be saved in the file:\n"                "%s\n"                "NEdit automatically loads this file\n"                "each time it is started." :                "Default preferences will be saved in the file:\n"                "%s\n"                "SAVING WILL INCORPORATE SETTINGS\n"                "FROM FILE: %s", "OK", "Cancel",                prefFileName, ImportedFile) == 2)        return;    }    #ifndef VMS    TempStringPrefs.shellCmds = WriteShellCmdsString();#endif /* VMS */    TempStringPrefs.macroCmds = WriteMacroCmdsString();    TempStringPrefs.bgMenuCmds = WriteBGMenuCmdsString();    TempStringPrefs.highlight = WriteHighlightString();    TempStringPrefs.language = writeLanguageModesString();    TempStringPrefs.styles = WriteStylesString();    TempStringPrefs.smartIndent = WriteSmartIndentString();    TempStringPrefs.smartIndentCommon = WriteSmartIndentCommonString();    strcpy(PrefData.fileVersion, PREF_FILE_VERSION);    if (!SavePreferences(XtDisplay(parent), prefFileName, HeaderText,            PrefDescrip, XtNumber(PrefDescrip)))    {        DialogF(DF_WARN, parent, 1, "Save Preferences",                "Unable to save preferences in %s", "Dismiss", prefFileName);    }#ifndef VMS    XtFree(TempStringPrefs.shellCmds);#endif /* VMS */    XtFree(TempStringPrefs.macroCmds);    XtFree(TempStringPrefs.bgMenuCmds);    XtFree(TempStringPrefs.highlight);    XtFree(TempStringPrefs.language);    XtFree(TempStringPrefs.styles);    XtFree(TempStringPrefs.smartIndent);    XtFree(TempStringPrefs.smartIndentCommon);        PrefsHaveChanged = False;}/*** Load an additional preferences file on top of the existing preferences** derived from defaults, the .nedit file, and X resources.*/void ImportPrefFile(const char *filename, int convertOld){    XrmDatabase db;    char *fileString;        fileString = ReadAnyTextFile(filename);    if (fileString != NULL){        db = XrmGetStringDatabase(fileString);        XtFree(fileString);        OverlayPreferences(db, APP_NAME, APP_CLASS, PrefDescrip,        XtNumber(PrefDescrip));        translatePrefFormats(convertOld, -1);        ImportedFile = XtNewString(filename);    } else    {        fprintf(stderr, "Could not read additional preferences file: ");        fprintf(stderr, filename);        fprintf(stderr, "\n");    }}void SetPrefWrap(int state){    setIntPref(&PrefData.wrapStyle, state);}int GetPrefWrap(int langMode){    if (langMode == PLAIN_LANGUAGE_MODE ||	    LanguageModes[langMode]->wrapStyle == DEFAULT_WRAP)    	return PrefData.wrapStyle;    return LanguageModes[langMode]->wrapStyle;}void SetPrefWrapMargin(int margin){    setIntPref(&PrefData.wrapMargin, margin);}int GetPrefWrapMargin(void){    return PrefData.wrapMargin;}void SetPrefSearch(int searchType){    setIntPref(&PrefData.searchMethod, searchType);}int GetPrefSearch(void){    return PrefData.searchMethod;}#ifdef REPLACE_SCOPEvoid SetPrefReplaceDefScope(int scope){    setIntPref(&PrefData.replaceDefScope, scope);}int GetPrefReplaceDefScope(void){    return PrefData.replaceDefScope;}#endifvoid SetPrefAutoIndent(int state){    setIntPref(&PrefData.autoIndent, state);}int GetPrefAutoIndent(int langMode){    if (langMode == PLAIN_LANGUAGE_MODE ||	    LanguageModes[langMode]->indentStyle == DEFAULT_INDENT)    	return PrefData.autoIndent;    return LanguageModes[langMode]->indentStyle;}void SetPrefAutoSave(int state){    setIntPref(&PrefData.autoSave, state);}int GetPrefAutoSave(void){    return PrefData.autoSave;}void SetPrefSaveOldVersion(int state){    setIntPref(&PrefData.saveOldVersion, state);}int GetPrefSaveOldVersion(void){    return PrefData.saveOldVersion;}void SetPrefSearchDlogs(int state){    setIntPref(&PrefData.searchDlogs, state);}int GetPrefSearchDlogs(void){    return PrefData.searchDlogs;}void SetPrefBeepOnSearchWrap(int state){    setIntPref(&PrefData.searchWrapBeep, state);}int GetPrefBeepOnSearchWrap(void){    return PrefData.searchWrapBeep;}void SetPrefKeepSearchDlogs(int state){    setIntPref(&PrefData.keepSearchDlogs, state);}int GetPrefKeepSearchDlogs(void){    return PrefData.keepSearchDlogs;}void SetPrefSearchWraps(int state){    setIntPref(&PrefData.searchWraps, state);}int GetPrefStickyCaseSenseBtn(void){    return PrefData.stickyCaseSenseBtn;}void SetPrefStickyCaseSenseBtn(int state){    setIntPref(&PrefData.stickyCaseSenseBtn, state);}int GetPrefSearchWraps(void){    return PrefData.searchWraps;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -