]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Move bind file format tag to LyXAction.cpp, and rename it.
[lyx.git] / src / LyXRC.cpp
index 64febe8146c92eaef43423c826a218f2cc72a6f6..94edf1715498d14c06faee57710a3ba5de2085b1 100644 (file)
@@ -43,6 +43,7 @@
 
 #include <fstream>
 #include <iostream>
+#include <algorithm>
 
 using namespace std;
 using namespace lyx::support;
@@ -53,6 +54,8 @@ namespace os = support::os;
 
 namespace {
 
+static unsigned int const LYXRC_FILEFORMAT = 1;
+
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
        { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@@ -96,7 +99,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
-       { "\\format", LyXRC::RC_FORMAT },
+       { "\\format", LyXRC::RC_FILEFORMAT },
        { "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
        { "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
        { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
@@ -121,10 +124,11 @@ LexerKeyword lyxrcTags[] = {
        { "\\language_command_begin", LyXRC::RC_LANGUAGE_COMMAND_BEGIN },
        { "\\language_command_end", LyXRC::RC_LANGUAGE_COMMAND_END },
        { "\\language_command_local", LyXRC::RC_LANGUAGE_COMMAND_LOCAL },
+       { "\\language_custom_package", LyXRC::RC_LANGUAGE_CUSTOM_PACKAGE },
        { "\\language_global_options", LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS },
-       { "\\language_package", LyXRC::RC_LANGUAGE_PACKAGE },
-       { "\\language_use_babel", LyXRC::RC_LANGUAGE_USE_BABEL },
+       { "\\language_package_selection", LyXRC::RC_LANGUAGE_PACKAGE_SELECTION },
        { "\\load_session", LyXRC::RC_LOADSESSION },
+       { "\\mac_dontswap_ctrl_meta", LyXRC::RC_MAC_DONTSWAP_CTRL_META },
        { "\\mac_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
        { "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
        { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
@@ -135,9 +139,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
        { "\\paragraph_markers", LyXRC::RC_PARAGRAPH_MARKERS },
        { "\\path_prefix", LyXRC::RC_PATH_PREFIX },
-       { "\\personal_dictionary", LyXRC::RC_PERS_DICT },
        { "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
-       { "\\plaintext_roff_command", LyXRC::RC_PLAINTEXT_ROFF_COMMAND },
        { "\\preview", LyXRC::RC_PREVIEW },
        { "\\preview_hashed_labels", LyXRC::RC_PREVIEW_HASHED_LABELS },
        { "\\preview_scale_factor", LyXRC::RC_PREVIEW_SCALE_FACTOR },
@@ -172,12 +174,13 @@ LexerKeyword lyxrcTags[] = {
        { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
        { "\\scroll_below_document", LyXRC::RC_SCROLL_BELOW_DOCUMENT },
+       { "\\scroll_wheel_zoom", LyXRC::RC_SCROLL_WHEEL_ZOOM },
        { "\\serverpipe", LyXRC::RC_SERVERPIPE },
        { "\\set_color", LyXRC::RC_SET_COLOR },
        { "\\show_banner", LyXRC::RC_SHOW_BANNER },
        { "\\single_close_tab_button", LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON },
+       { "\\single_instance", LyXRC::RC_SINGLE_INSTANCE },
        { "\\sort_layouts", LyXRC::RC_SORT_LAYOUTS },
-       { "\\spell_command", LyXRC::RC_SPELL_COMMAND },
        { "\\spellcheck_continuously", LyXRC::RC_SPELLCHECK_CONTINUOUSLY },
        { "\\spellcheck_notes", LyXRC::RC_SPELLCHECK_NOTES },
        { "\\spellchecker", LyXRC::RC_SPELLCHECKER },
@@ -188,17 +191,11 @@ LexerKeyword lyxrcTags[] = {
        { "\\tex_expects_windows_paths", LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS },
        { "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
        { "\\ui_file", LyXRC::RC_UIFILE },
-       { "\\use_alt_language", LyXRC::RC_USE_ALT_LANG },
        { "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
-       { "\\use_escape_chars", LyXRC::RC_USE_ESC_CHARS },
-       { "\\use_input_encoding", LyXRC::RC_USE_INP_ENC },
        { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
-       { "\\use_personal_dictionary", LyXRC::RC_USE_PERS_DICT },
        { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
        // compatibility with versions older than 1.4.0 only
-       { "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
-       // compatibility with versions older than 1.4.0 only
-       { "\\use_tempdir", LyXRC::RC_USETEMPDIR },
+       { "\\use_system_colors", LyXRC::RC_USE_SYSTEM_COLORS },
        { "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
        { "\\user_email", LyXRC::RC_USER_EMAIL },
        { "\\user_name", LyXRC::RC_USER_NAME },
@@ -206,7 +203,8 @@ LexerKeyword lyxrcTags[] = {
        // compatibility with versions older than 1.4.0 only
        { "\\viewer", LyXRC::RC_VIEWER},
        { "\\viewer_alternatives", LyXRC::RC_VIEWER_ALTERNATIVES },
-       { "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR}
+       { "\\visual_cursor", LyXRC::RC_VISUAL_CURSOR },
+       { "format", LyXRC::RC_LYXRCFORMAT }
 };
 
 const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
@@ -284,7 +282,10 @@ void LyXRC::setDefaults()
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
-#if defined(USE_ASPELL)
+// FIXME: this check should test the target platform (darwin)
+#if defined(USE_MACOSX_PACKAGING)
+       spellchecker = "native";
+#elif defined(USE_ASPELL)
        spellchecker = "aspell";
 #elif defined(USE_HUNSPELL)
        spellchecker = "hunspell";
@@ -302,8 +303,8 @@ void LyXRC::setDefaults()
        language_auto_begin = true;
        language_auto_end = true;
        language_global_options = true;
-       language_use_babel = true;
-       language_package = "\\usepackage{babel}";
+       language_package_selection = LP_AUTO;
+       language_custom_package = "\\usepackage{babel}";
        language_command_begin = "\\selectlanguage{$$lang}";
        language_command_local = "\\foreignlanguage{$$lang}{";
        sort_layouts = false;
@@ -316,7 +317,9 @@ void LyXRC::setDefaults()
        date_insert_format = "%x";
        cursor_follows_scrollbar = false;
        scroll_below_document = false;
+       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
        paragraph_markers = false;
+       mac_dontswap_ctrl_meta = false;
        mac_like_word_movement = false;
        macro_edit_style = MACRO_EDIT_INLINE_BOX;
        dialogs_iconify_with_main = false;
@@ -324,6 +327,7 @@ void LyXRC::setDefaults()
        preview_hashed_labels  = false;
        preview_scale_factor = 1.0;
        use_converter_cache = true;
+       use_system_colors = false;
        use_tooltip = true;
        use_pixmap_cache = false;
        converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
@@ -331,6 +335,7 @@ void LyXRC::setDefaults()
        user_email = to_utf8(support::user_email());
        open_buffers_in_tabs = true;
        single_close_tab_button = false;
+       single_instance = true;
        forward_search_dvi = string();
        forward_search_pdf = string();
        export_overwrite = NO_FILES;
@@ -372,42 +377,53 @@ void oldFontFormat(string & family, string & foundry)
 } // namespace anon
 
 
-int LyXRC::read(FileName const & filename)
+bool LyXRC::read(FileName const & filename, bool check_format)
 {
        Lexer lexrc(lyxrcTags);
-       if (lyxerr.debugging(Debug::PARSER))
-               lexrc.printTable(lyxerr);
-
        lexrc.setFile(filename);
-       if (!lexrc.isOK())
-               return -2;
-
        LYXERR(Debug::LYXRC, "Reading '" << filename << "'...");
-
-       return read(lexrc);
+       ReturnValues retval = read(lexrc, check_format);
+       if (!check_format || retval != FormatMismatch)
+               return retval == ReadOK;
+
+       LYXERR(Debug::FILES, "Converting LyXRC file to " << LYXRC_FILEFORMAT);
+       FileName const tempfile = FileName::tempName("convert_lyxrc");
+       bool const success = prefs2prefs(filename, tempfile, false);
+       if (!success) {
+               LYXERR0 ("Unable to convert " << filename.absFileName() <<
+                       " to format " << LYXRC_FILEFORMAT);
+               return false;
+       }
+       Lexer lexrc2(lyxrcTags);
+       lexrc2.setFile(tempfile);
+       LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
+       retval = read(lexrc2, check_format);
+       tempfile.removeFile();
+       return retval == ReadOK;
 }
 
 
-int LyXRC::read(istream & is)
+// don't need to worry about conversion, because this is always
+// from an internal source
+bool LyXRC::read(istream & is)
 {
        Lexer lexrc(lyxrcTags);
-       if (lyxerr.debugging(Debug::PARSER))
-               lexrc.printTable(lyxerr);
-
        lexrc.setStream(is);
-       if (!lexrc.isOK())
-               return -2;
-
        LYXERR(Debug::LYXRC, "Reading istream...");
-
-       return read(lexrc);
+       return read(lexrc, false) == ReadOK;
 }
 
 
-int LyXRC::read(Lexer & lexrc)
+LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
 {
+       if (lyxerr.debugging(Debug::PARSER))
+               lexrc.printTable(lyxerr);
+
        if (!lexrc.isOK())
-               return -2;
+               return ReadError;
+
+       // format prior to 2.0 and introduction of format tag
+       unsigned int format = 0;
 
        while (lexrc.isOK()) {
                // By using two switches we take advantage of the compiler
@@ -428,14 +444,18 @@ int LyXRC::read(Lexer & lexrc)
                        break;
                }
                switch (static_cast<LyXRCTags>(le)) {
+               case RC_LYXRCFORMAT:
+                       if (lexrc.next())
+                               format = lexrc.getInteger();
+                       break;
                case RC_INPUT: // Include file
                        if (lexrc.next()) {
                                FileName const tmp =
                                        libFileSearch(string(),
                                                      lexrc.getString());
-                               if (read(tmp)) {
-                                       lexrc.printError("Error reading "
-                                                        "included file: " + tmp.absFileName());
+                               if (read(tmp, check_format)) {
+                                       lexrc.printError(
+                                           "Error reading included file: " + tmp.absFileName());
                                }
                        }
                        break;
@@ -883,6 +903,10 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> paragraph_markers;
                        break;
 
+               case RC_MAC_DONTSWAP_CTRL_META:
+                       lexrc >> mac_dontswap_ctrl_meta;
+                       break;
+
                case RC_MAC_LIKE_WORD_MOVEMENT:
                        lexrc >> mac_like_word_movement;
                        break;
@@ -908,6 +932,9 @@ int LyXRC::read(Lexer & lexrc)
                case RC_ACCEPT_COMPOUND:
                        lexrc >> spellchecker_accept_compound;
                        break;
+               case RC_USE_SYSTEM_COLORS:
+                       lexrc >> use_system_colors;
+                       break;
                case RC_USE_TOOLTIP:
                        lexrc >> use_tooltip;
                        break;
@@ -947,8 +974,8 @@ int LyXRC::read(Lexer & lexrc)
                case RC_DATE_INSERT_FORMAT:
                        lexrc >> date_insert_format;
                        break;
-               case RC_LANGUAGE_PACKAGE:
-                       lexrc >> language_package;
+               case RC_LANGUAGE_CUSTOM_PACKAGE:
+                       lexrc >> language_custom_package;
                        break;
                case RC_LANGUAGE_AUTO_BEGIN:
                        lexrc >> language_auto_begin;
@@ -959,8 +986,23 @@ int LyXRC::read(Lexer & lexrc)
                case RC_LANGUAGE_GLOBAL_OPTIONS:
                        lexrc >> language_global_options;
                        break;
-               case RC_LANGUAGE_USE_BABEL:
-                       lexrc >> language_use_babel;
+               case RC_LANGUAGE_PACKAGE_SELECTION:
+                       if (lexrc.next()) {
+                               switch (lexrc.getInteger()) {
+                               case 0:
+                                       language_package_selection = LP_AUTO;
+                                       break;
+                               case 1:
+                                       language_package_selection = LP_BABEL;
+                                       break;
+                               case 2:
+                                       language_package_selection = LP_CUSTOM;
+                                       break;
+                               case 3:
+                                       language_package_selection = LP_NONE;
+                                       break;
+                               }
+                       }
                        break;
                case RC_LANGUAGE_COMMAND_BEGIN:
                        lexrc >> language_command_begin;
@@ -1017,7 +1059,7 @@ int LyXRC::read(Lexer & lexrc)
                        formats.setViewer(format, command);
                        break;
                }
-               case RC_FORMAT: {
+               case RC_FILEFORMAT: {
                        string format, extension, prettyname, shortcut;
                        lexrc >> format >> extension >> prettyname >> shortcut;
                        string viewer, editor;
@@ -1168,6 +1210,11 @@ int LyXRC::read(Lexer & lexrc)
                case RC_SINGLE_CLOSE_TAB_BUTTON:
                        lexrc >> single_close_tab_button;
                        break;
+               case RC_SINGLE_INSTANCE:
+                       lexrc >> single_instance;
+                       if (run_mode == PREFERRED)
+                               run_mode = single_instance ? USE_REMOTE : NEW_INSTANCE;
+                       break;
                case RC_FORWARD_SEARCH_DVI:
                        if (lexrc.next(true)) 
                                forward_search_dvi = lexrc.getString();
@@ -1191,33 +1238,39 @@ int LyXRC::read(Lexer & lexrc)
                                }
                        }
                        break;
-
-               // Obsoteted in 1.4.0
-               case RC_USETEMPDIR:
-               // Obsoleted in 2.0
-               case RC_SPELL_COMMAND:
-               case RC_PERS_DICT:
-               case RC_PLAINTEXT_ROFF_COMMAND: 
-               case RC_USE_ALT_LANG:
-               case RC_USE_ESC_CHARS:
-               case RC_USE_INP_ENC:
-               case RC_USE_PERS_DICT:
-               case RC_USE_SPELL_LIB:
-                       LYXERR(Debug::LYXRC, "Skipping obsolete tag `" 
-                              << lexrc.getString() << "'.");
-                       lexrc.next(true);
+               case RC_SCROLL_WHEEL_ZOOM:
+                       if (lexrc.next()) {
+                               string const tmp = lexrc.getString();
+                               if (tmp == "ctrl")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
+                               else if (tmp == "shift")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_SHIFT;
+                               else if (tmp == "alt")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_ALT;
+                               else {
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_OFF;
+                                       if (tmp != "off" && tmp != "false")
+                                               LYXERR0("Unrecognized scroll_wheel_zoom status \""
+                                                      << tmp << '"');
+                               }
+                       }
                        break;
 
                case RC_LAST:
                        break; // this is just a dummy
                }
+
+               // This is triggered the first time through the loop unless
+               // we hit a format tag.
+               if (check_format && format != LYXRC_FILEFORMAT)
+                       return FormatMismatch;
        }
 
        /// Update converters data-structures
        theConverters().update(formats);
        theConverters().buildGraph();
 
-       return 0;
+       return ReadOK;
 }
 
 
@@ -1280,8 +1333,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        if (tag == RC_LAST)
                os << "# LyX " << lyx_version
                   << " generated this file. If you want to make your own\n"
-                  << "# modifications you should do them from inside LyX and save.\n"
-                  << "\n";
+                  << "# modifications you should do them from inside LyX and save.\n\n"
+                  << "Format " << LYXRC_FILEFORMAT << "\n\n";
 
        // Why the switch you might ask. It is a trick to ensure that all
        // the elements in the LyXRCTags enum are handled. As you can see
@@ -1292,6 +1345,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        case RC_LAST:
        case RC_INPUT:
                // input/include files are not done here
+       case RC_LYXRCFORMAT:
        case RC_BINDFILE:
                if (ignore_system_lyxrc ||
                    bind_file != system_lyxrc.bind_file) {
@@ -1433,6 +1487,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        case PAPER_B3:
                        case PAPER_B4:
                        case PAPER_B6:
+                       case PAPER_C0:
+                       case PAPER_C1:
+                       case PAPER_C2:
+                       case PAPER_C3:
+                       case PAPER_C4:
+                       case PAPER_C5:
+                       case PAPER_C6:
                        case PAPER_JISB0:
                        case PAPER_JISB1:
                        case PAPER_JISB2:
@@ -1701,6 +1762,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_MAC_DONTSWAP_CTRL_META:
+               if (ignore_system_lyxrc ||
+                   mac_dontswap_ctrl_meta
+                   != system_lyxrc.mac_dontswap_ctrl_meta) {
+                       os << "\\mac_dontswap_ctrl_meta "
+                          << convert<string>(mac_dontswap_ctrl_meta) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_MAC_LIKE_WORD_MOVEMENT:
                if (ignore_system_lyxrc ||
                    mac_like_word_movement
@@ -1901,6 +1971,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SINGLE_INSTANCE:
+               if (ignore_system_lyxrc ||
+                   single_instance != system_lyxrc.single_instance) {
+                       os << "\\single_instance "
+                          << convert<string>(single_instance)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_FORWARD_SEARCH_DVI:
                if (ignore_system_lyxrc ||
                    forward_search_dvi != system_lyxrc.forward_search_dvi) {
@@ -2268,13 +2347,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_USETEMPDIR:
-               if (tag != RC_LAST)
-                       break;
-               // Ignore it
-       case RC_PLAINTEXT_ROFF_COMMAND: // Obsoleted in 2.0
-               if (tag != RC_LAST)
-                       break;
        case RC_PLAINTEXT_LINELEN:
                if (ignore_system_lyxrc ||
                    plaintext_linelen != system_lyxrc.plaintext_linelen) {
@@ -2313,11 +2385,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# SPELLCHECKER SECTION ##############################\n"
                   << "#\n\n";
 
-       case RC_SPELL_COMMAND:
-       case RC_USE_SPELL_LIB:
-               // Obsoleted in 2.0
-               if (tag != RC_LAST)
-                       break;
        case RC_ACCEPT_COMPOUND:
                if (ignore_system_lyxrc ||
                    spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
@@ -2326,10 +2393,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_USE_ALT_LANG:
-               // Obsoleted in 2.0
-               if (tag != RC_LAST)
-                       break;
        case RC_ALT_LANG:
                if (ignore_system_lyxrc ||
                    spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
@@ -2338,9 +2401,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_USE_ESC_CHARS:
-               if (tag != RC_LAST)
-                       break;
        case RC_ESC_CHARS:
                if (ignore_system_lyxrc ||
                    spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
@@ -2348,8 +2408,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_USE_PERS_DICT:
-               // obsoleted in 2.0
+       case RC_USE_SYSTEM_COLORS:
+               if (ignore_system_lyxrc ||
+                   use_system_colors != system_lyxrc.use_system_colors) {
+                       os << "\\use_system_colors "
+                          << convert<string>(use_system_colors)
+                          << '\n';
+               }
                if (tag != RC_LAST)
                        break;
        case RC_USE_TOOLTIP:
@@ -2370,14 +2435,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_PERS_DICT:
-               // obsoleted in 2.0
-               if (tag != RC_LAST)
-                       break;
-       case RC_USE_INP_ENC:
-               // obsoleted in 2.0
-               if (tag != RC_LAST)
-                       break;
 
                os << "\n#\n"
                   << "# LANGUAGE SUPPORT SECTION ##########################\n"
@@ -2433,10 +2490,10 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_LANGUAGE_PACKAGE:
+       case RC_LANGUAGE_CUSTOM_PACKAGE:
                if (ignore_system_lyxrc ||
-                   language_package != system_lyxrc.language_package) {
-                       os << "\\language_package \"" << language_package
+                   language_custom_package != system_lyxrc.language_custom_package) {
+                       os << "\\language_custom_package \"" << language_custom_package
                           << "\"\n";
                }
                if (tag != RC_LAST)
@@ -2451,12 +2508,24 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_LANGUAGE_USE_BABEL:
+       case RC_LANGUAGE_PACKAGE_SELECTION:
                if (ignore_system_lyxrc ||
-                   language_use_babel != system_lyxrc.language_use_babel) {
-                       os << "\\language_use_babel \""
-                          << convert<string>(language_use_babel)
-                          << "\"\n";
+                   language_package_selection != system_lyxrc.language_package_selection) {
+                       os << "\\language_package_selection ";
+                       switch (language_package_selection) {
+                       case LP_AUTO: 
+                               os << "0\n";
+                               break;
+                       case LP_BABEL:
+                               os << "1\n";
+                               break;
+                       case LP_CUSTOM:
+                               os << "2\n";
+                               break;
+                       case LP_NONE:
+                               os << "3\n";
+                               break;
+                       }
                }
                if (tag != RC_LAST)
                        break;
@@ -2560,11 +2629,34 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
+       case RC_SCROLL_WHEEL_ZOOM:
+               if (ignore_system_lyxrc ||
+                       scroll_wheel_zoom != system_lyxrc.scroll_wheel_zoom) {
+                       string status;
+                       switch (scroll_wheel_zoom) {
+                       case SCROLL_WHEEL_ZOOM_OFF:
+                               status = "off";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_CTRL:
+                               status = "ctrl";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_SHIFT:
+                               status = "shift";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_ALT:
+                               status = "alt";
+                               break;
+                       }
+                       os << "\\scroll_wheel_zoom " << status << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+
                os << "\n#\n"
                   << "# FORMATS SECTION ##########################\n"
                   << "#\n\n";
 
-       case RC_FORMAT:
+       case RC_FILEFORMAT:
                // New/modified formats
                for (Formats::const_iterator cit = formats.begin();
                     cit != formats.end(); ++cit) {
@@ -2741,7 +2833,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_ACCEPT_COMPOUND:
        case LyXRC::RC_ALT_LANG:
        case LyXRC::RC_PLAINTEXT_LINELEN:
-       case LyXRC::RC_PLAINTEXT_ROFF_COMMAND:
        case LyXRC::RC_AUTOCORRECTION_MATH:
        case LyXRC::RC_AUTOREGIONDELETE:
        case LyXRC::RC_AUTORESET_OPTIONS:
@@ -2787,7 +2878,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_ESC_CHARS:
        case LyXRC::RC_EXAMPLEPATH:
        case LyXRC::RC_FONT_ENCODING:
-       case LyXRC::RC_FORMAT:
+       case LyXRC::RC_FILEFORMAT:
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
        case LyXRC::RC_INDEX_ALTERNATIVES:
@@ -2805,8 +2896,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_LANGUAGE_COMMAND_END:
        case LyXRC::RC_LANGUAGE_COMMAND_LOCAL:
        case LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS:
-       case LyXRC::RC_LANGUAGE_PACKAGE:
-       case LyXRC::RC_LANGUAGE_USE_BABEL:
+       case LyXRC::RC_LANGUAGE_CUSTOM_PACKAGE:
+       case LyXRC::RC_LANGUAGE_PACKAGE_SELECTION:
+       case LyXRC::RC_LYXRCFORMAT:
+       case LyXRC::RC_MAC_DONTSWAP_CTRL_META:
        case LyXRC::RC_MAC_LIKE_WORD_MOVEMENT:
        case LyXRC::RC_MACRO_EDIT_STYLE:
        case LyXRC::RC_MAKE_BACKUP:
@@ -2818,7 +2911,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
                        prependEnvPath("PATH", lyxrc.path_prefix);
                }
-       case LyXRC::RC_PERS_DICT:
        case LyXRC::RC_PREVIEW:
        case LyXRC::RC_PREVIEW_HASHED_LABELS:
        case LyXRC::RC_PREVIEW_SCALE_FACTOR:
@@ -2857,7 +2949,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_SET_COLOR:
        case LyXRC::RC_SHOW_BANNER:
        case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
-       case LyXRC::RC_SPELL_COMMAND:
        case LyXRC::RC_SPELLCHECKER:
        case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
        case LyXRC::RC_SPELLCHECK_NOTES:
@@ -2873,17 +2964,13 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_UIFILE:
        case LyXRC::RC_USER_EMAIL:
        case LyXRC::RC_USER_NAME:
-       case LyXRC::RC_USETEMPDIR:
-       case LyXRC::RC_USE_ALT_LANG:
        case LyXRC::RC_USE_CONVERTER_CACHE:
-       case LyXRC::RC_USE_ESC_CHARS:
-       case LyXRC::RC_USE_INP_ENC:
-       case LyXRC::RC_USE_PERS_DICT:
+       case LyXRC::RC_USE_SYSTEM_COLORS:
        case LyXRC::RC_USE_TOOLTIP:
        case LyXRC::RC_USE_PIXMAP_CACHE:
-       case LyXRC::RC_USE_SPELL_LIB:
        case LyXRC::RC_VIEWDVI_PAPEROPTION:
        case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
+       case LyXRC::RC_SINGLE_INSTANCE:
        case LyXRC::RC_SORT_LAYOUTS:
        case LyXRC::RC_FULL_SCREEN_LIMIT:
        case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
@@ -2898,6 +2985,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_FORWARD_SEARCH_PDF:
        case LyXRC::RC_EXPORT_OVERWRITE:
        case LyXRC::RC_DEFAULT_DECIMAL_POINT:
+       case LyXRC::RC_SCROLL_WHEEL_ZOOM:
        case LyXRC::RC_LAST:
                break;
        }
@@ -2915,14 +3003,9 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_ALT_LANG:
-       case RC_USE_ALT_LANG:
                str = _("Specify an alternate language. The default is to use the language of the document.");
                break;
 
-       case RC_PLAINTEXT_ROFF_COMMAND:
-               str = _("Use to define an external program to render tables in plain text output. E.g. \"groff -t -Tlatin1 $$FName\" where $$FName is the input file. If \"\" is specified, an internal routine is used.");
-               break;
-
        case RC_PLAINTEXT_LINELEN:
                str = _("The maximum line length of exported plain text/LaTeX/SGML files. If set to 0, paragraphs are output in a single line; if the line length is > 0, paragraphs are separated by a blank line.");
                break;
@@ -2980,6 +3063,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("LyX normally doesn't allow the user to scroll further than the bottom of the document. Set to true if you prefer to scroll the bottom of the document to the top of the screen");
                break;
 
+       case RC_MAC_DONTSWAP_CTRL_META:
+               str = _("Make Apple key act as Meta and Control key as Ctrl.");
+               break;
+
        case RC_MAC_LIKE_WORD_MOVEMENT:
                str = _("Use the Mac OS X conventions for the word-level cursor movement");
                break;
@@ -3022,7 +3109,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_ESC_CHARS:
-       case RC_USE_ESC_CHARS:
                str = _("Specify additional chars that can be part of a word.");
                break;
 
@@ -3034,7 +3120,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
                break;
 
-       case RC_FORMAT:
+       case RC_FILEFORMAT:
                break;
 
        case RC_INDEX_COMMAND:
@@ -3082,11 +3168,11 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("De-select if you don't want the language(s) used as an argument to \\documentclass.");
                break;
 
-       case RC_LANGUAGE_PACKAGE:
+       case RC_LANGUAGE_CUSTOM_PACKAGE:
                str = _("The LaTeX command for loading the language package. E.g. \"\\usepackage{babel}\", \"\\usepackage{omega}\".");
                break;
 
-       case RC_LANGUAGE_USE_BABEL:
+       case RC_LANGUAGE_PACKAGE_SELECTION:
                str = _("De-select if you don't want babel to be used when the language of the document is the default language.");
                break;
 
@@ -3325,7 +3411,8 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_USER_NAME:
                break;
 
-       case RC_USETEMPDIR:
+       case RC_USE_USE_SYSTEM_COLORS:
+               str = _("Enable use the system colors for some things like main window background and selection.");
                break;
 
        case RC_USE_TOOLTIP:
@@ -3336,9 +3423,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Enable the pixmap cache that might improve performance on Mac and Windows.");
                break;
 
-       case RC_USE_SPELL_LIB:
-               break;
-
        case RC_VIEWDVI_PAPEROPTION:
                _("Specify the paper command to DVI viewer (leave empty or use \"-paper\")");
                break;