]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Mark some intentional fall-throughs (in a way understandable to gcc)
[lyx.git] / src / LyXRC.cpp
index bd52e887bb1425b5a39ab398b870b6350bd71b04..315495f85ca21eee851beb8c1746301bbcac280b 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "LyXRC.h"
 
+#include "BufferList.h"
 #include "ColorSet.h"
 #include "Converter.h"
 #include "FontEnums.h"
@@ -26,6 +27,7 @@
 #include "LyX.h"
 #include "Mover.h"
 #include "Session.h"
+#include "SpellChecker.h"
 #include "version.h"
 
 #include "graphics/GraphicsTypes.h"
@@ -39,6 +41,7 @@
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/Package.h"
+#include "support/TempFile.h"
 #include "support/userinfo.h"
 
 #include <fstream>
@@ -54,6 +57,10 @@ namespace os = support::os;
 
 namespace {
 
+// The format should also be updated in configure.py, and conversion code
+// should be added to prefs2prefs_prefs.py.
+static unsigned int const LYXRC_FILEFORMAT = 22; // ef: pygmentize_command
+
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
        { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@@ -70,11 +77,13 @@ LexerKeyword lyxrcTags[] = {
        { "\\bind_file", LyXRC::RC_BINDFILE },
        { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
        { "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
+       { "\\close_buffer_with_last_view", LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW },
        { "\\completion_cursor_text", LyXRC::RC_COMPLETION_CURSOR_TEXT },
        { "\\completion_inline_delay", LyXRC::RC_COMPLETION_INLINE_DELAY },
        { "\\completion_inline_dots", LyXRC::RC_COMPLETION_INLINE_DOTS },
        { "\\completion_inline_math", LyXRC::RC_COMPLETION_INLINE_MATH },
        { "\\completion_inline_text", LyXRC::RC_COMPLETION_INLINE_TEXT },
+       { "\\completion_minlength", LyXRC::RC_COMPLETION_MINLENGTH },
        { "\\completion_popup_after_complete", LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE },
        { "\\completion_popup_delay", LyXRC::RC_COMPLETION_POPUP_DELAY },
        { "\\completion_popup_math", LyXRC::RC_COMPLETION_POPUP_MATH },
@@ -83,11 +92,12 @@ LexerKeyword lyxrcTags[] = {
        { "\\converter_cache_maxage", LyXRC::RC_CONVERTER_CACHE_MAXAGE },
        { "\\copier", LyXRC::RC_COPIER },
        { "\\cursor_follows_scrollbar", LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR },
+       { "\\cursor_width", LyXRC::RC_CURSOR_WIDTH },
        { "\\date_insert_format", LyXRC::RC_DATE_INSERT_FORMAT },
        { "\\def_file", LyXRC::RC_DEFFILE },
        { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_POINT },
-       { "\\default_language", LyXRC::RC_DEFAULT_LANGUAGE },
-       { "\\default_papersize", LyXRC::RC_DEFAULT_PAPERSIZE },
+       { "\\default_length_unit", LyXRC::RC_DEFAULT_LENGTH_UNIT },
+       { "\\default_otf_view_format", LyXRC::RC_DEFAULT_OTF_VIEW_FORMAT },
        { "\\default_view_format", LyXRC::RC_DEFAULT_VIEW_FORMAT },
        { "\\dialogs_iconify_with_main", LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN },
        { "\\display_graphics", LyXRC::RC_DISPLAY_GRAPHICS },
@@ -97,21 +107,24 @@ 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 },
        { "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
        { "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
+       { "\\fullscreen_statusbar", LyXRC::RC_FULL_SCREEN_STATUSBAR },
        { "\\fullscreen_tabbar", LyXRC::RC_FULL_SCREEN_TABBAR },
        { "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
        { "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
        { "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
        { "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
        { "\\hunspelldir_path", LyXRC::RC_HUNSPELLDIR_PATH },
+       { "\\icon_set", LyXRC::RC_ICON_SET },
        { "\\index_alternatives", LyXRC::RC_INDEX_ALTERNATIVES },
        { "\\index_command", LyXRC::RC_INDEX_COMMAND },
        { "\\input", LyXRC::RC_INPUT },
+       { "\\jbibtex_alternatives", LyXRC::RC_JBIBTEX_ALTERNATIVES },
        { "\\jbibtex_command", LyXRC::RC_JBIBTEX_COMMAND },
        { "\\jindex_command", LyXRC::RC_JINDEX_COMMAND },
        { "\\kbmap", LyXRC::RC_KBMAP },
@@ -122,46 +135,32 @@ 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_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
+       { "\\mac_dontswap_ctrl_meta", LyXRC::RC_MAC_DONTSWAP_CTRL_META },
+       { "\\mac_like_cursor_movement", LyXRC::RC_MAC_LIKE_CURSOR_MOVEMENT },
        { "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
        { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
        { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
+       { "\\mouse_middlebutton_paste", LyXRC::RC_MOUSE_MIDDLEBUTTON_PASTE },
        { "\\mouse_wheel_speed", LyXRC::RC_MOUSE_WHEEL_SPEED },
        { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
        { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
        { "\\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 },
-       { "\\print_adapt_output", LyXRC::RC_PRINT_ADAPTOUTPUT },
-       { "\\print_collcopies_flag", LyXRC::RC_PRINTCOLLCOPIESFLAG },
-       { "\\print_command", LyXRC::RC_PRINT_COMMAND },
-       { "\\print_copies_flag", LyXRC::RC_PRINTCOPIESFLAG },
-       { "\\print_evenpage_flag", LyXRC::RC_PRINTEVENPAGEFLAG },
-       { "\\print_extra_options", LyXRC::RC_PRINTEXSTRAOPTIONS },
-       { "\\print_file_extension", LyXRC::RC_PRINTFILEEXTENSION },
        { "\\print_landscape_flag", LyXRC::RC_PRINTLANDSCAPEFLAG },
-       { "\\print_oddpage_flag", LyXRC::RC_PRINTODDPAGEFLAG },
-       { "\\print_pagerange_flag", LyXRC::RC_PRINTPAGERANGEFLAG },
        { "\\print_paper_dimension_flag", LyXRC::RC_PRINTPAPERDIMENSIONFLAG },
        { "\\print_paper_flag", LyXRC::RC_PRINTPAPERFLAG },
-       { "\\print_reverse_flag", LyXRC::RC_PRINTREVERSEFLAG },
-       { "\\print_spool_command", LyXRC::RC_PRINTSPOOL_COMMAND },
-       { "\\print_spool_printerprefix", LyXRC::RC_PRINTSPOOL_PRINTERPREFIX },
-       { "\\print_to_file", LyXRC::RC_PRINTTOFILE },
-       { "\\print_to_printer", LyXRC::RC_PRINTTOPRINTER },
-       { "\\printer", LyXRC::RC_PRINTER },
-       { "\\rtl", LyXRC::RC_RTL_SUPPORT },
+       { "\\pygmentize_command", LyXRC::RC_PYGMENTIZE_COMMAND },
        { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
+       { "\\save_origin", LyXRC::RC_SAVE_ORIGIN },
        { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
        { "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
        { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
@@ -173,13 +172,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_whell_zoom", LyXRC::RC_SCROLL_WHEEL_ZOOM },
+       { "\\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,19 +187,18 @@ LexerKeyword lyxrcTags[] = {
        { "\\template_path", LyXRC::RC_TEMPLATEPATH },
        { "\\tex_allows_spaces", LyXRC::RC_TEX_ALLOWS_SPACES },
        { "\\tex_expects_windows_paths", LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS },
+       { "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
        { "\\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_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
+       { "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
        { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
-       { "\\use_personal_dictionary", LyXRC::RC_USE_PERS_DICT },
        { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
+       { "\\use_qimage", LyXRC::RC_USE_QIMAGE },
        // 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_system_theme_icons", LyXRC::RC_USE_SYSTEM_THEME_ICONS },
        { "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
        { "\\user_email", LyXRC::RC_USER_EMAIL },
        { "\\user_name", LyXRC::RC_USER_NAME },
@@ -208,12 +206,13 @@ 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]);
 
-} // namespace anon
+} // namespace
 
 
 LyXRC::LyXRC()
@@ -224,38 +223,30 @@ LyXRC::LyXRC()
 
 void LyXRC::setDefaults()
 {
+       icon_set = string();
+       use_system_theme_icons = false;
        bind_file = "cua";
        def_file = "default";
        ui_file = "default";
-       // Get printer from the environment. If fail, use default "",
-       // assuming that everything is set up correctly.
-       printer = getEnv("PRINTER");
-       print_adapt_output = false;
-       print_command = "dvips";
-       print_evenpage_flag = "-B";
-       print_oddpage_flag = "-A";
-       print_pagerange_flag = "-pp";
-       print_copies_flag = "-c";
-       print_collcopies_flag = "-C";
-       print_reverse_flag = "-r";
+       // The current document directory
+       texinputs_prefix = ".";
        print_landscape_flag = "-t landscape";
-       print_to_printer = "-P";
-       print_to_file = "-o ";
-       print_file_extension = ".ps";
        print_paper_flag = "-t";
        print_paper_dimension_flag = "-T";
        document_path.erase();
        view_dvi_paper_option.erase();
-       default_papersize = PAPER_DEFAULT;
        default_view_format = "pdf2";
+       default_otf_view_format = "pdf4";
        chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
-       bibtex_command = "bibtex";
+       bibtex_command = "automatic";
        fontenc = "default";
        index_command = "makeindex -c -q";
        nomencl_command = "makeindex -s nomencl.ist";
+       pygmentize_command = string();
        dpi = 75;
        // Because a screen is typically wider than a piece of paper:
        zoom = 150;
+       currentZoom = zoom;
        allow_geometry_session = true;
        // Default LaTeX font size:
        font_sizes[FONT_SIZE_TINY] = "5.0";
@@ -277,12 +268,13 @@ void LyXRC::setDefaults()
        auto_reset_options = false;
        plaintext_linelen = 65;
        mouse_wheel_speed = 1.0;
-       num_lastfiles = maxlastfiles;
+       num_lastfiles = 20;
        check_lastfiles = true;
        use_lastfilepos = true;
        load_session = false;
        make_backup = true;
        save_compressed = false;
+       save_origin = false;
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
@@ -298,22 +290,21 @@ void LyXRC::setDefaults()
 #endif
        spellchecker_accept_compound = false;
        spellcheck_continuously = false;
+       completion_minlength = 6;
        spellcheck_notes = true;
        use_kbmap = false;
-       rtl_support = true;
        visual_cursor = false;
        auto_number = true;
        mark_foreign_language = true;
        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;
        group_layouts = true;
-       default_language = "english";
        gui_language = "auto";
        show_banner = true;
        windows_style_tex_paths = false;
@@ -321,22 +312,28 @@ void LyXRC::setDefaults()
        date_insert_format = "%x";
        cursor_follows_scrollbar = false;
        scroll_below_document = false;
-       scroll_whell_zoom = SCROLL_WHEEL_ZOOM_CTRL;
+       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
        paragraph_markers = false;
-       mac_like_word_movement = false;
+       mac_dontswap_ctrl_meta = false;
+       mac_like_cursor_movement = false;
        macro_edit_style = MACRO_EDIT_INLINE_BOX;
        dialogs_iconify_with_main = false;
        preview = PREVIEW_OFF;
        preview_hashed_labels  = false;
        preview_scale_factor = 1.0;
        use_converter_cache = true;
+       use_converter_needauth_forbidden = true;
+       use_converter_needauth = true;
+       use_system_colors = false;
        use_tooltip = true;
        use_pixmap_cache = false;
+       use_qimage = true;
        converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
        user_name = to_utf8(support::user_name());
        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;
@@ -346,6 +343,7 @@ void LyXRC::setDefaults()
        full_screen_toolbars = true;
        full_screen_tabbar = true;
        full_screen_menubar = true;
+       full_screen_statusbar = true;
        full_screen_scrollbar = true;
        full_screen_width = 700;
 
@@ -360,6 +358,10 @@ void LyXRC::setDefaults()
        completion_inline_dots = -1;
        completion_inline_delay = 0.2;
        default_decimal_point = ".";
+       default_length_unit = Length::CM;
+       cursor_width = 1;
+       close_buffer_with_last_view = "yes";
+       mouse_middlebutton_paste = true;
 }
 
 
@@ -375,45 +377,60 @@ void oldFontFormat(string & family, string & foundry)
                foundry.erase();
 }
 
-} // namespace anon
+} // namespace
 
 
-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);
+       TempFile tmp("convert_lyxrc");
+       FileName const tempfile = tmp.name();
+       bool const success = prefs2prefs(filename, tempfile, false);
+       if (!success) {
+               LYXERR0 ("Unable to convert " << filename.absFileName() <<
+                       " to format " << LYXRC_FILEFORMAT);
+               return false;
+       } else {
+               // Keep this in the else branch, such that lexrc2 goes out
+               // of scope and releases the lock on tempfile before we
+               // attempt to remove it. This matters on Windows.
+               Lexer lexrc2(lyxrcTags);
+               lexrc2.setFile(tempfile);
+               LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
+               retval = read(lexrc2, check_format);
+       }
+       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
@@ -434,14 +451,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;
@@ -477,6 +498,10 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> tex_allows_spaces;
                        break;
 
+               case RC_TEXINPUTS_PREFIX:
+                       lexrc >> texinputs_prefix;
+                       break;
+
                case RC_KBMAP:
                        lexrc >> use_kbmap;
                        break;
@@ -509,76 +534,10 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> fontenc;
                        break;
 
-               case RC_PRINTER:
-                       lexrc >> printer;
-                       break;
-
-               case RC_PRINT_COMMAND:
-                       if (lexrc.next(true)) {
-                               print_command = lexrc.getString();
-                       }
-                       break;
-
-               case RC_PRINTEVENPAGEFLAG:
-                       lexrc >> print_evenpage_flag;
-                       break;
-
-               case RC_PRINTODDPAGEFLAG:
-                       lexrc >> print_oddpage_flag;
-                       break;
-
-               case RC_PRINTPAGERANGEFLAG:
-                       lexrc >> print_pagerange_flag;
-                       break;
-
-               case RC_PRINTCOPIESFLAG:
-                       lexrc >> print_copies_flag;
-                       break;
-
-               case RC_PRINTCOLLCOPIESFLAG:
-                       lexrc >> print_collcopies_flag;
-                       break;
-
-               case RC_PRINTREVERSEFLAG:
-                       lexrc >> print_reverse_flag;
-                       break;
-
                case RC_PRINTLANDSCAPEFLAG:
                        lexrc >> print_landscape_flag;
                        break;
 
-               case RC_PRINTTOPRINTER:
-                       lexrc >> print_to_printer;
-                       break;
-
-               case RC_PRINT_ADAPTOUTPUT:
-                       lexrc >> print_adapt_output;
-                       break;
-
-               case RC_PRINTTOFILE:
-                       if (lexrc.next()) {
-                               print_to_file = os::internal_path(lexrc.getString());
-                       }
-                       break;
-
-               case RC_PRINTFILEEXTENSION:
-                       lexrc >> print_file_extension;
-                       break;
-
-               case RC_PRINTEXSTRAOPTIONS:
-                       lexrc >> print_extra_options;
-                       break;
-
-               case RC_PRINTSPOOL_COMMAND:
-                       if (lexrc.next(true)) {
-                               print_spool_command = lexrc.getString();
-                       }
-                       break;
-
-               case RC_PRINTSPOOL_PRINTERPREFIX:
-                       lexrc >> print_spool_printerprefix;
-                       break;
-
                case RC_PRINTPAPERDIMENSIONFLAG:
                        lexrc >> print_paper_dimension_flag;
                        break;
@@ -587,25 +546,9 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> print_paper_flag;
                        break;
 
-               case RC_DEFAULT_PAPERSIZE:
-                       if (lexrc.next()) {
-                               string const size = ascii_lowercase(lexrc.getString());
-                               if (size == "usletter")
-                                       default_papersize = PAPER_USLETTER;
-                               else if (size == "legal")
-                                       default_papersize = PAPER_USLEGAL;
-                               else if (size == "executive")
-                                       default_papersize = PAPER_USEXECUTIVE;
-                               else if (size == "a3")
-                                       default_papersize = PAPER_A3;
-                               else if (size == "a4")
-                                       default_papersize = PAPER_A4;
-                               else if (size == "a5")
-                                       default_papersize = PAPER_A5;
-                               else if (size == "b5")
-                                       default_papersize = PAPER_B5;
-                               else if (size == "default")
-                                       default_papersize = PAPER_DEFAULT;
+               case RC_PYGMENTIZE_COMMAND:
+                       if (lexrc.next(true)) {
+                               pygmentize_command = lexrc.getString();
                        }
                        break;
 
@@ -640,6 +583,12 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
 
+               case RC_JBIBTEX_ALTERNATIVES:
+                       if (lexrc.next(true)) {
+                               jbibtex_alternatives.insert(lexrc.getString());
+                       }
+                       break;
+
                case RC_INDEX_ALTERNATIVES:
                        if (lexrc.next(true)) {
                                index_alternatives.insert(lexrc.getString());
@@ -676,6 +625,8 @@ int LyXRC::read(Lexer & lexrc)
 
                case RC_SCREEN_ZOOM:
                        lexrc >> zoom;
+                       if (zoom < 10)
+                               zoom = 10;
                        break;
 
                case RC_GEOMETRY_SESSION:
@@ -704,45 +655,33 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_DOCUMENTPATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                document_path = os::internal_path(lexrc.getString());
-                               document_path = expandPath(document_path);
-                       }
                        break;
 
                case RC_EXAMPLEPATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                example_path = os::internal_path(lexrc.getString());
-                               example_path = expandPath(example_path);
-                       }
                        break;
 
                case RC_TEMPLATEPATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                template_path = os::internal_path(lexrc.getString());
-                               template_path = expandPath(template_path);
-                       }
                        break;
 
                case RC_TEMPDIRPATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                tempdir_path = os::internal_path(lexrc.getString());
-                               tempdir_path = expandPath(tempdir_path);
-                       }
                        break;
 
                case RC_THESAURUSDIRPATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                thesaurusdir_path = os::internal_path(lexrc.getString());
-                               thesaurusdir_path = expandPath(thesaurusdir_path);
-                       }
                        break;
 
                case RC_HUNSPELLDIR_PATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                hunspelldir_path = os::internal_path(lexrc.getString());
-                               hunspelldir_path = expandPath(hunspelldir_path);
-                       }
                        break;
 
                case RC_USELASTFILEPOS:
@@ -797,6 +736,10 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> completion_popup_after_complete;
                        break;
 
+               case RC_COMPLETION_MINLENGTH:
+                       lexrc >> completion_minlength;
+                       break;
+
                case RC_NUMLASTFILES:
                        lexrc >> num_lastfiles;
                        break;
@@ -805,6 +748,14 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> check_lastfiles;
                        break;
 
+               case RC_ICON_SET:
+                       lexrc >> icon_set;
+                       break;
+
+               case RC_USE_SYSTEM_THEME_ICONS:
+                       lexrc >> use_system_theme_icons;
+                       break;
+
                case RC_SCREEN_FONT_ROMAN:
                        if (lexrc.next()) {
                                roman_font_name = lexrc.getString();
@@ -871,16 +822,18 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_SERVERPIPE:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                lyxpipes = os::internal_path(lexrc.getString());
-                               lyxpipes = expandPath(lyxpipes);
-                       }
                        break;
 
                case RC_CURSOR_FOLLOWS_SCROLLBAR:
                        lexrc >> cursor_follows_scrollbar;
                        break;
 
+               case RC_CURSOR_WIDTH:
+                       lexrc >> cursor_width;
+                       break;
+
                case RC_SCROLL_BELOW_DOCUMENT:
                        lexrc >> scroll_below_document;
                        break;
@@ -889,8 +842,12 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> paragraph_markers;
                        break;
 
-               case RC_MAC_LIKE_WORD_MOVEMENT:
-                       lexrc >> mac_like_word_movement;
+               case RC_MAC_DONTSWAP_CTRL_META:
+                       lexrc >> mac_dontswap_ctrl_meta;
+                       break;
+
+               case RC_MAC_LIKE_CURSOR_MOVEMENT:
+                       lexrc >> mac_like_cursor_movement;
                        break;
 
                case RC_MACRO_EDIT_STYLE:
@@ -914,12 +871,18 @@ 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;
                case RC_USE_PIXMAP_CACHE:
                        lexrc >> use_pixmap_cache;
                        break;
+               case RC_USE_QIMAGE:
+                       lexrc >> use_qimage;
+                       break;
                case RC_SPELLCHECKER:
                        lexrc >> spellchecker;
                        break;
@@ -941,20 +904,25 @@ int LyXRC::read(Lexer & lexrc)
                case RC_SAVE_COMPRESSED:
                        lexrc >> save_compressed;
                        break;
+               case RC_SAVE_ORIGIN:
+                       lexrc >> save_origin;
+                       break;
                case RC_BACKUPDIR_PATH:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                backupdir_path = os::internal_path(lexrc.getString());
-                               backupdir_path = expandPath(backupdir_path);
-                       }
                        break;
                case RC_DEFAULT_DECIMAL_POINT:
                        lexrc >> default_decimal_point;
                        break;
+               case RC_DEFAULT_LENGTH_UNIT:
+                       if (lexrc.next())
+                               default_length_unit = (Length::UNIT) lexrc.getInteger();
+                       break;
                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;
@@ -965,8 +933,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;
@@ -977,12 +960,12 @@ int LyXRC::read(Lexer & lexrc)
                case RC_LANGUAGE_COMMAND_LOCAL:
                        lexrc >> language_command_local;
                        break;
-               case RC_RTL_SUPPORT:
-                       lexrc >> rtl_support;
-                       break;
                case RC_VISUAL_CURSOR:
                        lexrc >> visual_cursor;
                        break;
+               case RC_CLOSE_BUFFER_WITH_LAST_VIEW:
+                       lexrc >> close_buffer_with_last_view;
+                       break;
                case RC_AUTO_NUMBER:
                        lexrc >> auto_number;
                        break;
@@ -1020,32 +1003,34 @@ int LyXRC::read(Lexer & lexrc)
                case RC_VIEWER: {
                        string format, command;
                        lexrc >> format >> command;
-                       formats.setViewer(format, command);
+                       theFormats().setViewer(format, command);
                        break;
                }
-               case RC_FORMAT: {
-                       string format, extension, prettyname, shortcut;
-                       lexrc >> format >> extension >> prettyname >> shortcut;
+               case RC_FILEFORMAT: {
+                       bool ok = true;
+                       string format, extensions, shortcut;
+                       docstring prettyname;
+                       if (!(lexrc >> format >> extensions))
+                               ok = false;
+                       if (ok && lexrc.next(true))
+                               prettyname = lexrc.getDocString();
+                       else
+                               ok = false;
+                       if (ok)
+                               if(!(lexrc >> shortcut))
+                                       ok = false;
                        string viewer, editor;
-                       if (lexrc.next(true))
+                       if (ok && lexrc.next(true))
                                viewer = lexrc.getString();
-                       if (lexrc.next(true))
+                       else
+                               ok = false;
+                       if (ok && lexrc.next(true))
                                editor = lexrc.getString();
-                       string flags;
-                       // Hack to ensure compatibility with versions older
-                       // than 1.5.0
-                       int le = lexrc.lex();
-                       if (le != Lexer::LEX_FEOF && le != Lexer::LEX_UNDEF) {
-                               flags = lexrc.getString();
-                               if (le != Lexer::LEX_DATA) {
-                                       // We have got a known token.
-                                       // Therefore this is an old style
-                                       // format definition without
-                                       // flags.
-                                       lexrc.pushToken(flags);
-                                       flags.erase();
-                               }
-                       }
+                       else
+                               ok = false;
+                       string flags, mime;
+                       if (!(lexrc >> flags >> mime))
+                               ok = false;
                        int flgs = Format::none;
                        while (!flags.empty()) {
                                string flag;
@@ -1054,45 +1039,52 @@ int LyXRC::read(Lexer & lexrc)
                                        flgs |= Format::document;
                                else if (flag == "vector")
                                        flgs |= Format::vector;
+                               else if (flag == "zipped=native")
+                                       flgs |= Format::zipped_native;
+                               else if (flag == "menu=export")
+                                       flgs |= Format::export_menu;
                                else
                                        LYXERR0("Ignoring unknown flag `"
                                               << flag << "' for format `"
                                               << format << "'.");
                        }
-                       if (prettyname.empty()) {
+                       if (!ok)
+                               LYXERR0("Syntax error in format " << format);
+                       else if (prettyname.empty()) {
                                if (theConverters().formatIsUsed(format))
                                        LYXERR0("Can't delete format " << format);
                                else
-                                       formats.erase(format);
+                                       theFormats().erase(format);
                        } else {
-                               formats.add(format, extension, prettyname,
-                                           shortcut, viewer, editor, flgs);
+                               theFormats().add(format, extensions, prettyname,
+                                           shortcut, viewer, editor, mime, flgs);
                        }
                        break;
                }
                case RC_VIEWER_ALTERNATIVES:  {
                        string format, command;
-                       if (lexrc.next())
-                               format = lexrc.getString();
-                       if (lexrc.eatLine())
-                               command = lexrc.getString();
-                       viewer_alternatives[format].insert(command);
+                       if ((lexrc >> format) && lexrc.next(true)) {
+                               command  = lexrc.getString();
+                               viewer_alternatives[format].insert(command);
+                       }
                        break;
                }
                case RC_EDITOR_ALTERNATIVES:  {
                        string format, command;
-                       lexrc >> format >> command;
-                       editor_alternatives[format].insert(command);
+                       if ((lexrc >> format) && lexrc.next(true)) {
+                               command  = lexrc.getString();
+                               editor_alternatives[format].insert(command);
+                       }
                        break;
                }
 
+               case RC_DEFAULT_OTF_VIEW_FORMAT:
+                       lexrc >> default_otf_view_format;
+                       break;
+
                case RC_DEFAULT_VIEW_FORMAT:
                        lexrc >> default_view_format;
                        break;
-                       
-               case RC_DEFAULT_LANGUAGE:
-                       lexrc >> default_language;
-                       break;
 
                case RC_GUI_LANGUAGE:
                        lexrc >> gui_language;
@@ -1140,6 +1132,12 @@ int LyXRC::read(Lexer & lexrc)
                case RC_USE_CONVERTER_CACHE:
                        lexrc >> use_converter_cache;
                        break;
+               case RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN:
+                       lexrc >> use_converter_needauth_forbidden;
+                       break;
+               case RC_USE_CONVERTER_NEEDAUTH:
+                       lexrc >> use_converter_needauth;
+                       break;
                case RC_CONVERTER_CACHE_MAXAGE:
                        lexrc >> converter_cache_maxage;
                        break;
@@ -1159,6 +1157,9 @@ int LyXRC::read(Lexer & lexrc)
                case RC_FULL_SCREEN_SCROLLBAR:
                        lexrc >> full_screen_scrollbar;
                        break;
+               case RC_FULL_SCREEN_STATUSBAR:
+                       lexrc >> full_screen_statusbar;
+                       break;
                case RC_FULL_SCREEN_TABBAR:
                        lexrc >> full_screen_tabbar;
                        break;
@@ -1174,12 +1175,17 @@ 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)) 
+                       if (lexrc.next(true))
                                forward_search_dvi = lexrc.getString();
                        break;
                case RC_FORWARD_SEARCH_PDF:
-                       if (lexrc.next(true)) 
+                       if (lexrc.next(true))
                                forward_search_pdf = lexrc.getString();
                        break;
                case RC_EXPORT_OVERWRITE:
@@ -1201,46 +1207,40 @@ int LyXRC::read(Lexer & lexrc)
                        if (lexrc.next()) {
                                string const tmp = lexrc.getString();
                                if (tmp == "ctrl")
-                                       scroll_whell_zoom = SCROLL_WHEEL_ZOOM_CTRL;
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
                                else if (tmp == "shift")
-                                       scroll_whell_zoom = SCROLL_WHEEL_ZOOM_SHIFT;
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_SHIFT;
                                else if (tmp == "alt")
-                                       scroll_whell_zoom = SCROLL_WHEEL_ZOOM_ALT;
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_ALT;
                                else {
-                                       scroll_whell_zoom = SCROLL_WHEEL_ZOOM_OFF;
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_OFF;
                                        if (tmp != "off" && tmp != "false")
-                                               LYXERR0("Unrecognized scroll_whell_zoom status \""
+                                               LYXERR0("Unrecognized scroll_wheel_zoom status \""
                                                       << tmp << '"');
                                }
                        }
                        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_MOUSE_MIDDLEBUTTON_PASTE:
+                       lexrc >> mouse_middlebutton_paste;
                        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().update(theFormats());
        theConverters().buildGraph();
+       theBufferList().invalidateConverterCache();
 
-       return 0;
+       return ReadOK;
 }
 
 
@@ -1283,17 +1283,17 @@ namespace {
 
        // Escape \ and " so that LyXLex can read the string later
        string escapeCommand(string const & str) {
-               return subst(subst(str , "\\", "\\\\"), 
+               return subst(subst(str , "\\", "\\\\"),
                             "\"", "\\\"");
        }
 
-}
+} // namespace
 
 
 void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
 {
        LyXRCTags tag = RC_LAST;
-       
+
        if (!name.empty()) {
                for (int i = 0; i != lyxrcCount; ++i)
                        if ("\\" + name == lyxrcTags[i].tag)
@@ -1303,8 +1303,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
@@ -1315,6 +1315,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) {
@@ -1323,7 +1324,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_DEFFILE:
                if (ignore_system_lyxrc ||
                    def_file != system_lyxrc.def_file) {
@@ -1340,7 +1341,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# MISC SECTION ######################################\n"
                   << "#\n\n";
                // bind files are not done here.
-
+               // fall through
        case RC_PATH_PREFIX:
                if (ignore_system_lyxrc ||
                    path_prefix != system_lyxrc.path_prefix) {
@@ -1348,6 +1349,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_UIFILE:
                if (ignore_system_lyxrc ||
                    ui_file != system_lyxrc.ui_file) {
@@ -1356,6 +1358,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_AUTOREGIONDELETE:
                if (ignore_system_lyxrc ||
                    auto_region_delete != system_lyxrc.auto_region_delete) {
@@ -1366,6 +1369,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_AUTORESET_OPTIONS:
                if (ignore_system_lyxrc ||
                    auto_reset_options != system_lyxrc.auto_reset_options) {
@@ -1377,6 +1381,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_AUTOSAVE:
                if (ignore_system_lyxrc ||
                    autosave != system_lyxrc.autosave) {
@@ -1385,6 +1390,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_DISPLAY_GRAPHICS:
                if (ignore_system_lyxrc ||
                    display_graphics != system_lyxrc.display_graphics) {
@@ -1396,6 +1402,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SORT_LAYOUTS:
                if (ignore_system_lyxrc ||
                    sort_layouts != system_lyxrc.sort_layouts) {
@@ -1404,6 +1411,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_GROUP_LAYOUTS:
                if (ignore_system_lyxrc ||
                    group_layouts != system_lyxrc.group_layouts) {
@@ -1412,6 +1420,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_VIEWDVI_PAPEROPTION:
                if (ignore_system_lyxrc ||
                    view_dvi_paper_option
@@ -1423,58 +1432,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_DEFAULT_PAPERSIZE:
-               if (ignore_system_lyxrc ||
-                   default_papersize != system_lyxrc.default_papersize) {
-                       os << "# The default papersize to use.\n"
-                          << "\\default_papersize \"";
-                       switch (default_papersize) {
-                       case PAPER_DEFAULT:
-                               os << "default"; break;
-                       case PAPER_USLETTER:
-                               os << "usletter"; break;
-                       case PAPER_USLEGAL:
-                               os << "legal"; break;
-                       case PAPER_USEXECUTIVE:
-                               os << "executive"; break;
-                       case PAPER_A3:
-                               os << "a3"; break;
-                       case PAPER_A4:
-                               os << "a4"; break;
-                       case PAPER_A5:
-                               os << "a5"; break;
-                       case PAPER_B5:
-                               os << "b5"; break;
-                       case PAPER_CUSTOM:
-                       case PAPER_A0:
-                       case PAPER_A1:
-                       case PAPER_A2:
-                       case PAPER_A6:
-                       case PAPER_B0:
-                       case PAPER_B1:
-                       case PAPER_B2:
-                       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:
-                       case PAPER_JISB3:
-                       case PAPER_JISB4:
-                       case PAPER_JISB5:
-                       case PAPER_JISB6: break;
-                       }
-                       os << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
+               // fall through
        case RC_CHKTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    chktex_command != system_lyxrc.chktex_command) {
@@ -1482,6 +1440,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_BIBTEX_ALTERNATIVES: {
                CommandSet::const_iterator it = bibtex_alternatives.begin();
                CommandSet::const_iterator end = bibtex_alternatives.end();
@@ -1494,6 +1453,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        }
+       // fall through
        case RC_BIBTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    bibtex_command != system_lyxrc.bibtex_command) {
@@ -1501,6 +1461,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_JBIBTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    jbibtex_command != system_lyxrc.jbibtex_command) {
@@ -1508,6 +1469,20 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_JBIBTEX_ALTERNATIVES: {
+               CommandSet::const_iterator it = jbibtex_alternatives.begin();
+               CommandSet::const_iterator end = jbibtex_alternatives.end();
+               for ( ; it != end; ++it) {
+                       if (ignore_system_lyxrc
+                           || !system_lyxrc.jbibtex_alternatives.count(*it))
+                               os << "\\jbibtex_alternatives \""
+                                  << *it << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       }
+       // fall through
        case RC_INDEX_ALTERNATIVES: {
                CommandSet::const_iterator it = index_alternatives.begin();
                CommandSet::const_iterator end = index_alternatives.end();
@@ -1520,6 +1495,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        }
+       // fall through
        case RC_INDEX_COMMAND:
                if (ignore_system_lyxrc ||
                    index_command != system_lyxrc.index_command) {
@@ -1527,6 +1503,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_JINDEX_COMMAND:
                if (ignore_system_lyxrc ||
                    jindex_command != system_lyxrc.jindex_command) {
@@ -1534,6 +1511,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SPLITINDEX_COMMAND:
                if (ignore_system_lyxrc ||
                    splitindex_command != system_lyxrc.splitindex_command) {
@@ -1541,6 +1519,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_NOMENCL_COMMAND:
                if (ignore_system_lyxrc ||
                    nomencl_command != system_lyxrc.nomencl_command) {
@@ -1548,14 +1527,25 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_TEX_EXPECTS_WINDOWS_PATHS:
+               // fall through
+       case RC_PYGMENTIZE_COMMAND:
                if (ignore_system_lyxrc ||
-                   windows_style_tex_paths != system_lyxrc.windows_style_tex_paths) {
+                   pygmentize_command != system_lyxrc.pygmentize_command) {
+                       os << "\\pygmentize_command \"" << escapeCommand(pygmentize_command) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_TEX_EXPECTS_WINDOWS_PATHS:
+               // Don't write this setting to the preferences file,
+               // but allow temporary changes (bug 7557).
+               if (ignore_system_lyxrc) {
                        os << "\\tex_expects_windows_paths "
                           << convert<string>(windows_style_tex_paths) << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_TEX_ALLOWS_SPACES:
                if (tex_allows_spaces != system_lyxrc.tex_allows_spaces) {
                        os << "\\tex_allows_spaces "
@@ -1563,6 +1553,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_KBMAP:
                if (ignore_system_lyxrc ||
                    use_kbmap != system_lyxrc.use_kbmap) {
@@ -1570,6 +1561,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_KBMAP_PRIMARY:
                if (ignore_system_lyxrc ||
                    primary_kbmap != system_lyxrc.primary_kbmap) {
@@ -1578,6 +1570,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_KBMAP_SECONDARY:
                if (ignore_system_lyxrc ||
                    secondary_kbmap != system_lyxrc.secondary_kbmap) {
@@ -1586,6 +1579,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SERVERPIPE:
                if (ignore_system_lyxrc ||
                    lyxpipes != system_lyxrc.lyxpipes) {
@@ -1594,6 +1588,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_DATE_INSERT_FORMAT:
                if (ignore_system_lyxrc ||
                    date_insert_format != system_lyxrc.date_insert_format) {
@@ -1602,17 +1597,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_USER_NAME:
                os << "\\user_name \"" << user_name << "\"\n";
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_USER_EMAIL:
                os << "\\user_email \"" << user_email << "\"\n";
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SHOW_BANNER:
                if (ignore_system_lyxrc ||
                    show_banner != system_lyxrc.show_banner) {
@@ -1620,7 +1615,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_PREVIEW:
                if (ignore_system_lyxrc ||
                    preview != system_lyxrc.preview) {
@@ -1640,7 +1635,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_PREVIEW_HASHED_LABELS:
                if (ignore_system_lyxrc ||
                    preview_hashed_labels !=
@@ -1650,7 +1645,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_PREVIEW_SCALE_FACTOR:
                if (ignore_system_lyxrc ||
                    preview_scale_factor != system_lyxrc.preview_scale_factor) {
@@ -1659,7 +1654,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_USE_CONVERTER_CACHE:
                if (ignore_system_lyxrc ||
                    use_converter_cache != system_lyxrc.use_converter_cache) {
@@ -1668,7 +1663,25 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
+       case RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN:
+               if (ignore_system_lyxrc ||
+                   use_converter_needauth_forbidden != system_lyxrc.use_converter_needauth_forbidden) {
+                       os << "\\use_converter_needauth_forbidden "
+                          << convert<string>(use_converter_needauth_forbidden) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_USE_CONVERTER_NEEDAUTH:
+               if (ignore_system_lyxrc ||
+                   use_converter_needauth != system_lyxrc.use_converter_needauth) {
+                       os << "\\use_converter_needauth "
+                          << convert<string>(use_converter_needauth) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_CONVERTER_CACHE_MAXAGE:
                if (ignore_system_lyxrc ||
                    converter_cache_maxage != system_lyxrc.converter_cache_maxage) {
@@ -1681,7 +1694,26 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                os << "\n#\n"
                   << "# SCREEN & FONTS SECTION ############################\n"
                   << "#\n\n";
-
+               // fall through
+       case RC_ICON_SET:
+               if (ignore_system_lyxrc ||
+                   icon_set != system_lyxrc.icon_set) {
+                       os << "\\icon_set \"" << icon_set
+                          << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_USE_SYSTEM_THEME_ICONS:
+               if (ignore_system_lyxrc ||
+                         use_system_theme_icons != system_lyxrc.use_system_theme_icons) {
+                       os << "\\use_system_theme_icons "
+                               << convert<string>(use_system_theme_icons)
+                               << "\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_SCREEN_DPI:
                if (ignore_system_lyxrc ||
                    dpi != system_lyxrc.dpi) {
@@ -1689,6 +1721,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_ZOOM:
                if (ignore_system_lyxrc ||
                    zoom != system_lyxrc.zoom) {
@@ -1696,6 +1729,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_GEOMETRY_SESSION:
                if (ignore_system_lyxrc ||
                    allow_geometry_session != system_lyxrc.allow_geometry_session) {
@@ -1704,6 +1738,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_CURSOR_FOLLOWS_SCROLLBAR:
                if (ignore_system_lyxrc ||
                    cursor_follows_scrollbar
@@ -1713,6 +1748,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_CURSOR_WIDTH:
+               if (ignore_system_lyxrc ||
+                       cursor_width
+                       != system_lyxrc.cursor_width) {
+                       os << "\\cursor_width "
+                       << cursor_width << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_SCROLL_BELOW_DOCUMENT:
                if (ignore_system_lyxrc ||
                    scroll_below_document
@@ -1722,6 +1768,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_PARAGRAPH_MARKERS:
                if (ignore_system_lyxrc ||
                        paragraph_markers
@@ -1731,15 +1778,27 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_MAC_LIKE_WORD_MOVEMENT:
+               // fall through
+       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;
+               // fall through
+       case RC_MAC_LIKE_CURSOR_MOVEMENT:
                if (ignore_system_lyxrc ||
-                   mac_like_word_movement
-                   != system_lyxrc.mac_like_word_movement) {
-                       os << "\\mac_like_word_movement "
-                          << convert<string>(mac_like_word_movement) << '\n';
+                   mac_like_cursor_movement
+                   != system_lyxrc.mac_like_cursor_movement) {
+                       os << "\\mac_like_cursor_movement "
+                          << convert<string>(mac_like_cursor_movement) << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MACRO_EDIT_STYLE:
                if (ignore_system_lyxrc ||
                    macro_edit_style
@@ -1753,6 +1812,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_DIALOGS_ICONIFY_WITH_MAIN:
                if (ignore_system_lyxrc ||
                    dialogs_iconify_with_main
@@ -1762,6 +1822,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_ROMAN:
                if (ignore_system_lyxrc ||
                    roman_font_name != system_lyxrc.roman_font_name) {
@@ -1770,6 +1831,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_ROMAN_FOUNDRY:
                if (ignore_system_lyxrc ||
                    roman_font_foundry != system_lyxrc.roman_font_foundry) {
@@ -1778,6 +1840,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_SANS:
                if (ignore_system_lyxrc ||
                    sans_font_name != system_lyxrc.sans_font_name) {
@@ -1786,6 +1849,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_SANS_FOUNDRY:
                if (ignore_system_lyxrc ||
                    sans_font_foundry != system_lyxrc.sans_font_foundry) {
@@ -1794,6 +1858,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_TYPEWRITER:
                if (ignore_system_lyxrc ||
                    typewriter_font_name != system_lyxrc.typewriter_font_name) {
@@ -1802,6 +1867,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
                if (ignore_system_lyxrc ||
                    typewriter_font_foundry != system_lyxrc.typewriter_font_foundry) {
@@ -1810,7 +1876,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SCREEN_FONT_SCALABLE:
                if (ignore_system_lyxrc ||
                    use_scalable_fonts != system_lyxrc.use_scalable_fonts) {
@@ -1820,6 +1886,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_SIZES:
                if (ignore_system_lyxrc ||
                    font_sizes[FONT_SIZE_TINY]
@@ -1842,6 +1909,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                    != system_lyxrc.font_sizes[FONT_SIZE_HUGE] ||
                    font_sizes[FONT_SIZE_HUGER]
                    != system_lyxrc.font_sizes[FONT_SIZE_HUGER]) {
+                       streamsize old_prec = os.precision();
                        os.setf(ios::fixed);
                        os.precision(2);
                        os << "\\screen_font_sizes"
@@ -1856,9 +1924,12 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << ' ' << font_sizes[FONT_SIZE_HUGE]
                           << ' ' << font_sizes[FONT_SIZE_HUGER]
                           << '\n';
+                       os.precision(old_prec);
+                       os.unsetf(ios::fixed);
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_LIMIT:
                if (ignore_system_lyxrc ||
                    full_screen_limit != system_lyxrc.full_screen_limit) {
@@ -1868,6 +1939,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_TOOLBARS:
                if (ignore_system_lyxrc ||
                    full_screen_toolbars != system_lyxrc.full_screen_toolbars) {
@@ -1877,6 +1949,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_SCROLLBAR:
                if (ignore_system_lyxrc ||
                    full_screen_scrollbar != system_lyxrc.full_screen_scrollbar) {
@@ -1886,6 +1959,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_FULL_SCREEN_STATUSBAR:
+               if (ignore_system_lyxrc ||
+                   full_screen_statusbar != system_lyxrc.full_screen_statusbar) {
+                       os << "\\fullscreen_statusbar "
+                          << convert<string>(full_screen_statusbar)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_FULL_SCREEN_TABBAR:
                if (ignore_system_lyxrc ||
                    full_screen_tabbar != system_lyxrc.full_screen_tabbar) {
@@ -1895,6 +1979,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_MENUBAR:
                if (ignore_system_lyxrc ||
                    full_screen_menubar != system_lyxrc.full_screen_menubar) {
@@ -1904,6 +1989,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_WIDTH:
                if (ignore_system_lyxrc ||
                    full_screen_width != system_lyxrc.full_screen_width) {
@@ -1913,6 +1999,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_OPEN_BUFFERS_IN_TABS:
                if (ignore_system_lyxrc ||
                    open_buffers_in_tabs != system_lyxrc.open_buffers_in_tabs) {
@@ -1922,6 +2009,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SINGLE_CLOSE_TAB_BUTTON:
                if (ignore_system_lyxrc ||
                    single_close_tab_button != system_lyxrc.single_close_tab_button) {
@@ -1931,6 +2019,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       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;
+               // fall through
        case RC_FORWARD_SEARCH_DVI:
                if (ignore_system_lyxrc ||
                    forward_search_dvi != system_lyxrc.forward_search_dvi) {
@@ -1938,6 +2037,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FORWARD_SEARCH_PDF:
                if (ignore_system_lyxrc ||
                    forward_search_pdf != system_lyxrc.forward_search_pdf) {
@@ -1950,6 +2050,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        << "# COLOR SECTION ###################################\n"
                        << "#\n\n";
 
+       // fall through
        case RC_SET_COLOR:
                for (int i = 0; i < Color_ignore; ++i) {
                        ColorCode lc = static_cast<ColorCode>(i);
@@ -1964,82 +2065,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-               os << "\n#\n"
-                  << "# PRINTER SECTION ###################################\n"
-                  << "#\n\n";
+       os << "\n#\n"
+                << "# PRINTER SECTION ###################################\n"
+                << "#\n\n";
 
-       case RC_PRINTER:
-               if (ignore_system_lyxrc ||
-                   printer != system_lyxrc.printer) {
-                       os << "\\printer \"" << printer << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINT_ADAPTOUTPUT:
-               if (ignore_system_lyxrc ||
-                   print_adapt_output != system_lyxrc.print_adapt_output) {
-                       os << "\\print_adapt_output "
-                          << convert<string>(print_adapt_output)
-                          << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINT_COMMAND:
-               if (ignore_system_lyxrc ||
-                   print_command != system_lyxrc.print_command) {
-                       os << "\\print_command \"" << escapeCommand(print_command) << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTEXSTRAOPTIONS:
-               if (ignore_system_lyxrc ||
-                   print_extra_options != system_lyxrc.print_extra_options) {
-                       os << "\\print_extra_options \"" << print_extra_options
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTSPOOL_COMMAND:
-               if (ignore_system_lyxrc ||
-                   print_spool_command != system_lyxrc.print_spool_command) {
-                       os << "\\print_spool_command \"" << escapeCommand(print_spool_command)
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTSPOOL_PRINTERPREFIX:
-               if (ignore_system_lyxrc ||
-                   print_spool_printerprefix
-                   != system_lyxrc.print_spool_printerprefix) {
-                       os << "\\print_spool_printerprefix \""
-                          << print_spool_printerprefix << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTEVENPAGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_evenpage_flag != system_lyxrc.print_evenpage_flag) {
-                       os << "\\print_evenpage_flag \"" << print_evenpage_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTODDPAGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_oddpage_flag != system_lyxrc.print_oddpage_flag) {
-                       os << "\\print_oddpage_flag \"" << print_oddpage_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTREVERSEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_reverse_flag != system_lyxrc.print_reverse_flag) {
-                       os << "\\print_reverse_flag \"" << print_reverse_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
+       // fall through
        case RC_PRINTLANDSCAPEFLAG:
                if (ignore_system_lyxrc ||
                    print_landscape_flag != system_lyxrc.print_landscape_flag) {
@@ -2048,32 +2078,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_PRINTPAGERANGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_pagerange_flag != system_lyxrc.print_pagerange_flag) {
-                       os << "\\print_pagerange_flag \"" << print_pagerange_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTCOPIESFLAG:
-               if (ignore_system_lyxrc ||
-                   print_copies_flag != system_lyxrc.print_copies_flag) {
-                       os << "\\print_copies_flag \"" << print_copies_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTCOLLCOPIESFLAG:
-               if (ignore_system_lyxrc ||
-                   print_collcopies_flag
-                   != system_lyxrc.print_collcopies_flag) {
-                       os << "\\print_collcopies_flag \""
-                          << print_collcopies_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
+               // fall through
        case RC_PRINTPAPERFLAG:
                if (ignore_system_lyxrc ||
                    print_paper_flag != system_lyxrc.print_paper_flag) {
@@ -2082,6 +2087,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_PRINTPAPERDIMENSIONFLAG:
                if (ignore_system_lyxrc ||
                    print_paper_dimension_flag
@@ -2091,36 +2097,20 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_PRINTTOPRINTER:
-               if (ignore_system_lyxrc ||
-                   print_to_printer != system_lyxrc.print_to_printer) {
-                       os << "\\print_to_printer \"" << print_to_printer
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTTOFILE:
-               if (ignore_system_lyxrc ||
-                   print_to_file != system_lyxrc.print_to_file) {
-                       string const path = os::external_path(print_to_file);
-                       os << "\\print_to_file \"" << path << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTFILEEXTENSION:
+
+       os << "\n#\n"
+                << "# TEX SECTION #######################################\n"
+                << "#\n\n";
+
+       // fall through
+       case RC_TEXINPUTS_PREFIX:
                if (ignore_system_lyxrc ||
-                   print_file_extension != system_lyxrc.print_file_extension) {
-                       os << "\\print_file_extension \""
-                          << print_file_extension
-                          << "\"\n";
+                   texinputs_prefix != system_lyxrc.texinputs_prefix) {
+                       os << "\\texinputs_prefix \"" << texinputs_prefix << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
-
-               os << "\n#\n"
-                  << "# TEX SECTION #######################################\n"
-                  << "#\n\n";
-
+               // fall through
        case RC_FONT_ENCODING:
                if (ignore_system_lyxrc ||
                    fontenc != system_lyxrc.fontenc) {
@@ -2133,6 +2123,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# FILE SECTION ######################################\n"
                   << "#\n\n";
 
+       // fall through
        case RC_DOCUMENTPATH:
                if (ignore_system_lyxrc ||
                    document_path != system_lyxrc.document_path) {
@@ -2141,6 +2132,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_USELASTFILEPOS:
                if (ignore_system_lyxrc ||
                    use_lastfilepos != system_lyxrc.use_lastfilepos) {
@@ -2149,6 +2141,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LOADSESSION:
                if (ignore_system_lyxrc ||
                    load_session != system_lyxrc.load_session) {
@@ -2157,6 +2150,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MOUSE_WHEEL_SPEED:
                if (ignore_system_lyxrc ||
                    mouse_wheel_speed != system_lyxrc.mouse_wheel_speed) {
@@ -2164,6 +2158,16 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_MOUSE_MIDDLEBUTTON_PASTE:
+               if (ignore_system_lyxrc ||
+                   mouse_middlebutton_paste != system_lyxrc.mouse_middlebutton_paste) {
+                       os << "\\mouse_middlebutton_paste "
+                          << convert<string>(mouse_middlebutton_paste) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_COMPLETION_INLINE_DELAY:
                if (ignore_system_lyxrc ||
                    completion_inline_delay != system_lyxrc.completion_inline_delay) {
@@ -2171,6 +2175,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_INLINE_MATH:
                if (ignore_system_lyxrc ||
                    completion_inline_math != system_lyxrc.completion_inline_math) {
@@ -2179,6 +2184,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_INLINE_TEXT:
                if (ignore_system_lyxrc ||
                    completion_inline_text != system_lyxrc.completion_inline_text) {
@@ -2187,6 +2193,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_INLINE_DOTS:
                if (ignore_system_lyxrc ||
                    completion_inline_dots != system_lyxrc.completion_inline_dots) {
@@ -2195,6 +2202,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_AUTOCORRECTION_MATH:
                if (ignore_system_lyxrc ||
                    autocorrection_math != system_lyxrc.autocorrection_math) {
@@ -2203,6 +2211,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_POPUP_DELAY:
                if (ignore_system_lyxrc ||
                    completion_popup_delay != system_lyxrc.completion_popup_delay) {
@@ -2210,6 +2219,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_POPUP_MATH:
                if (ignore_system_lyxrc ||
                    completion_popup_math != system_lyxrc.completion_popup_math) {
@@ -2218,6 +2228,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_POPUP_TEXT:
                if (ignore_system_lyxrc ||
                    completion_popup_text != system_lyxrc.completion_popup_text) {
@@ -2226,6 +2237,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_CURSOR_TEXT:
                if (ignore_system_lyxrc ||
                    completion_cursor_text != system_lyxrc.completion_cursor_text) {
@@ -2234,6 +2246,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_COMPLETION_POPUP_AFTER_COMPLETE:
                if (ignore_system_lyxrc ||
                    completion_popup_after_complete
@@ -2243,6 +2256,16 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_COMPLETION_MINLENGTH:
+               if (ignore_system_lyxrc ||
+                       completion_minlength != system_lyxrc.completion_minlength) {
+                       os << "\\completion_minlength " << convert<string>(completion_minlength)
+                       << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_NUMLASTFILES:
                if (ignore_system_lyxrc ||
                    num_lastfiles != system_lyxrc.num_lastfiles) {
@@ -2250,6 +2273,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_CHECKLASTFILES:
                if (ignore_system_lyxrc ||
                    check_lastfiles != system_lyxrc.check_lastfiles) {
@@ -2258,6 +2282,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_EXAMPLEPATH:
                if (ignore_system_lyxrc ||
                    example_path != system_lyxrc.example_path) {
@@ -2266,6 +2291,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_TEMPLATEPATH:
                if (ignore_system_lyxrc ||
                    template_path != system_lyxrc.template_path) {
@@ -2274,6 +2300,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_TEMPDIRPATH:
                if (ignore_system_lyxrc ||
                    tempdir_path != system_lyxrc.tempdir_path) {
@@ -2282,6 +2309,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_THESAURUSDIRPATH:
                if (ignore_system_lyxrc ||
                    thesaurusdir_path != system_lyxrc.thesaurusdir_path) {
@@ -2290,6 +2318,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_HUNSPELLDIR_PATH:
                if (ignore_system_lyxrc ||
                    hunspelldir_path != system_lyxrc.hunspelldir_path) {
@@ -2298,13 +2327,7 @@ 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;
+               // fall through
        case RC_PLAINTEXT_LINELEN:
                if (ignore_system_lyxrc ||
                    plaintext_linelen != system_lyxrc.plaintext_linelen) {
@@ -2312,6 +2335,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MAKE_BACKUP:
                if (ignore_system_lyxrc ||
                    make_backup != system_lyxrc.make_backup) {
@@ -2319,6 +2343,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SAVE_COMPRESSED:
                if (ignore_system_lyxrc ||
                    save_compressed != system_lyxrc.save_compressed) {
@@ -2326,6 +2351,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_SAVE_ORIGIN:
+               if (ignore_system_lyxrc ||
+                   save_origin != system_lyxrc.save_origin) {
+                       os << "\\save_origin " << convert<string>(save_origin) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_BACKUPDIR_PATH:
                if (ignore_system_lyxrc ||
                    backupdir_path != system_lyxrc.backupdir_path) {
@@ -2343,11 +2377,7 @@ 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;
+       // fall through
        case RC_ACCEPT_COMPOUND:
                if (ignore_system_lyxrc ||
                    spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
@@ -2356,10 +2386,7 @@ 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;
+               // fall through
        case RC_ALT_LANG:
                if (ignore_system_lyxrc ||
                    spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
@@ -2368,9 +2395,7 @@ 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;
+               // fall through
        case RC_ESC_CHARS:
                if (ignore_system_lyxrc ||
                    spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
@@ -2378,10 +2403,17 @@ 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
+               // fall through
+       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;
+               // fall through
        case RC_USE_TOOLTIP:
                if (ignore_system_lyxrc ||
                    use_tooltip != system_lyxrc.use_tooltip) {
@@ -2391,6 +2423,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_USE_PIXMAP_CACHE:
                if (ignore_system_lyxrc ||
                    use_pixmap_cache != system_lyxrc.use_pixmap_cache) {
@@ -2400,21 +2433,22 @@ 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
+               // fall through
+       case RC_USE_QIMAGE:
+               if (ignore_system_lyxrc ||
+                   use_qimage != system_lyxrc.use_qimage) {
+                       os << "\\use_qimage "
+                          << convert<string>(use_qimage)
+                          << '\n';
+               }
                if (tag != RC_LAST)
                        break;
 
                os << "\n#\n"
                   << "# LANGUAGE SUPPORT SECTION ##########################\n"
                   << "#\n\n";
-               if (tag != RC_LAST)
-                       break;
 
+       // fall through
        case RC_DEFAULT_DECIMAL_POINT:
                if (ignore_system_lyxrc ||
                    default_decimal_point != system_lyxrc.default_decimal_point) {
@@ -2422,7 +2456,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
+       case RC_DEFAULT_LENGTH_UNIT:
+               if (ignore_system_lyxrc ||
+                   default_length_unit != system_lyxrc.default_length_unit) {
+                       os << "\\default_length_unit " << int(default_length_unit) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_SPELLCHECKER:
                if (ignore_system_lyxrc ||
                    spellchecker != system_lyxrc.spellchecker) {
@@ -2430,7 +2472,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SPELLCHECK_CONTINUOUSLY:
                if (ignore_system_lyxrc ||
                    spellcheck_continuously != system_lyxrc.spellcheck_continuously) {
@@ -2439,7 +2481,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SPELLCHECK_NOTES:
                if (ignore_system_lyxrc ||
                    spellcheck_notes != system_lyxrc.spellcheck_notes) {
@@ -2448,29 +2490,33 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
-       case RC_RTL_SUPPORT:
+               // fall through
+       case RC_VISUAL_CURSOR:
                if (ignore_system_lyxrc ||
-                   rtl_support != system_lyxrc.rtl_support) {
-                       os << "\\rtl " << convert<string>(rtl_support) << '\n';
+                       visual_cursor != system_lyxrc.visual_cursor) {
+                       os << "\\visual_cursor " << convert<string>(visual_cursor) << '\n';
                }
                if (tag != RC_LAST)
                        break;
-       case RC_VISUAL_CURSOR:
+               // fall through
+       case RC_CLOSE_BUFFER_WITH_LAST_VIEW:
                if (ignore_system_lyxrc ||
-                       visual_cursor != system_lyxrc.visual_cursor) {
-                       os << "\\visual_cursor " << convert<string>(visual_cursor) << '\n';
+                       close_buffer_with_last_view != system_lyxrc.close_buffer_with_last_view) {
+                       os << "# When closing last view, buffer closes (yes), hides (no), or ask the user (ask)\n";
+                       os << "\\close_buffer_with_last_view " << close_buffer_with_last_view << '\n';
                }
                if (tag != RC_LAST)
                        break;
-       case RC_LANGUAGE_PACKAGE:
+               // fall through
+       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)
                        break;
+               // fall through
        case RC_LANGUAGE_GLOBAL_OPTIONS:
                if (ignore_system_lyxrc ||
                    language_global_options
@@ -2481,15 +2527,29 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_LANGUAGE_USE_BABEL:
+               // fall through
+       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;
+               // fall through
        case RC_LANGUAGE_COMMAND_BEGIN:
                if (ignore_system_lyxrc ||
                    language_command_begin
@@ -2500,6 +2560,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_COMMAND_END:
                if (ignore_system_lyxrc ||
                    language_command_end
@@ -2509,6 +2570,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_COMMAND_LOCAL:
                if (ignore_system_lyxrc ||
                    language_command_local
@@ -2519,6 +2581,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_AUTO_BEGIN:
                if (ignore_system_lyxrc ||
                    language_auto_begin != system_lyxrc.language_auto_begin) {
@@ -2527,6 +2590,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_AUTO_END:
                if (ignore_system_lyxrc ||
                    language_auto_end != system_lyxrc.language_auto_end) {
@@ -2535,6 +2599,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MARK_FOREIGN_LANGUAGE:
                if (ignore_system_lyxrc ||
                    mark_foreign_language
@@ -2549,6 +2614,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# 2nd MISC SUPPORT SECTION ##########################\n"
                   << "#\n\n";
 
+       // fall through
        case RC_AUTO_NUMBER:
                if (ignore_system_lyxrc ||
                    auto_number != system_lyxrc.auto_number) {
@@ -2556,13 +2622,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_DEFAULT_LANGUAGE:
-               if (ignore_system_lyxrc ||
-                   default_language != system_lyxrc.default_language) {
-                       os << "\\default_language " << default_language << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
+               // fall through
        case RC_GUI_LANGUAGE:
                if (ignore_system_lyxrc ||
                    gui_language != system_lyxrc.gui_language) {
@@ -2570,6 +2630,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_EXPORT_OVERWRITE:
                if (ignore_system_lyxrc ||
                    export_overwrite != system_lyxrc.export_overwrite) {
@@ -2589,12 +2650,12 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SCROLL_WHEEL_ZOOM:
                if (ignore_system_lyxrc ||
-                   scroll_whell_zoom != system_lyxrc.scroll_whell_zoom) {
+                       scroll_wheel_zoom != system_lyxrc.scroll_wheel_zoom) {
                        string status;
-                       switch (scroll_whell_zoom) {
+                       switch (scroll_wheel_zoom) {
                        case SCROLL_WHEEL_ZOOM_OFF:
                                status = "off";
                                break;
@@ -2608,7 +2669,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                status = "alt";
                                break;
                        }
-                       os << "\\scroll_whell_zoom " << status << '\n';
+                       os << "\\scroll_wheel_zoom " << status << '\n';
                }
                if (tag != RC_LAST)
                        break;
@@ -2617,23 +2678,26 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# FORMATS SECTION ##########################\n"
                   << "#\n\n";
 
-       case RC_FORMAT:
+       // fall through
+       case RC_FILEFORMAT:
                // New/modified formats
-               for (Formats::const_iterator cit = formats.begin();
-                    cit != formats.end(); ++cit) {
+               for (Formats::const_iterator cit = theFormats().begin();
+                    cit != theFormats().end(); ++cit) {
                        Format const * format =
-                               system_formats.getFormat(cit->name());
+                               theSystemFormats().getFormat(cit->name());
                        if (!format ||
-                           format->extension() != cit->extension() ||
+                           format->extensions() != cit->extensions() ||
                            format->prettyname() != cit->prettyname() ||
                            format->shortcut() != cit->shortcut() ||
                            format->viewer() != cit->viewer() ||
                            format->editor() != cit->editor() ||
                            format->documentFormat() != cit->documentFormat() ||
-                           format->vectorFormat() != cit->vectorFormat()) {
+                           format->vectorFormat() != cit->vectorFormat() ||
+                           format->inExportMenu() != cit->inExportMenu() ||
+                           format->mime() != cit->mime()) {
                                os << "\\format \"" << cit->name() << "\" \""
-                                  << cit->extension() << "\" \""
-                                  << cit->prettyname() << "\" \""
+                                  << cit->extensions() << "\" \""
+                                  << to_utf8(cit->prettyname()) << "\" \""
                                   << cit->shortcut() << "\" \""
                                   << escapeCommand(cit->viewer()) << "\" \""
                                   << escapeCommand(cit->editor()) << "\" \"";
@@ -2642,69 +2706,86 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                        flags.push_back("document");
                                if (cit->vectorFormat())
                                        flags.push_back("vector");
+                               if (cit->zippedNative())
+                                       flags.push_back("zipped=native");
+                               if (cit->inExportMenu())
+                                       flags.push_back("menu=export");
+
                                os << getStringFromVector(flags);
-                               os << "\"\n";
+                               os << "\" \"" << cit->mime() << "\"\n";
                        }
                }
 
                // Look for deleted formats
-               for (Formats::const_iterator cit = system_formats.begin();
-                    cit != system_formats.end(); ++cit)
-                       if (!formats.getFormat(cit->name()))
+               for (Formats::const_iterator cit = theSystemFormats().begin();
+                    cit != theSystemFormats().end(); ++cit)
+                       if (!theFormats().getFormat(cit->name()))
                                os << "\\format \"" << cit->name()
-                                  << "\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
+                                  << "\" \"\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_VIEWER_ALTERNATIVES: {
                Alternatives::const_iterator it = viewer_alternatives.begin();
                Alternatives::const_iterator const en = viewer_alternatives.end();
-               Alternatives::const_iterator const sysend = 
+               Alternatives::const_iterator const sysend =
                                system_lyxrc.viewer_alternatives.end();
-               for (; it != en; ++it) {
+               for (; it != en; ++it) {
                        string const & fmt = it->first;
                        CommandSet const & cmd = it->second;
                        CommandSet::const_iterator sit = cmd.begin();
                        CommandSet::const_iterator const sen = cmd.end();
-                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ? 
+                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
                                        system_lyxrc.viewer_alternatives.begin() : // we won't use it in this case
                                        system_lyxrc.viewer_alternatives.find(fmt);
                        for (; sit != sen; ++sit) {
                                string const & cmd = *sit;
-                               if (ignore_system_lyxrc 
+                               if (ignore_system_lyxrc
                                    || sysfmt == sysend               // format not found
                                         || sysfmt->second.count(cmd) == 0 // this command not found
                                   )
-                                       os << "\\viewer_alternatives " << fmt << " " << cmd << "\n";
+                                       os << "\\viewer_alternatives " << fmt << " \"" << escapeCommand(cmd) << "\"\n";
                        }
                }
                if (tag != RC_LAST)
                        break;
        }
+       // fall through
        case RC_EDITOR_ALTERNATIVES: {
                Alternatives::const_iterator it = editor_alternatives.begin();
                Alternatives::const_iterator const en = editor_alternatives.end();
-               Alternatives::const_iterator const sysend = 
+               Alternatives::const_iterator const sysend =
                                system_lyxrc.editor_alternatives.end();
                for (; it != en; ++it) {
                        string const & fmt = it->first;
                        CommandSet const & cmd = it->second;
                        CommandSet::const_iterator sit = cmd.begin();
                        CommandSet::const_iterator const sen = cmd.end();
-                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ? 
+                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
                                        system_lyxrc.editor_alternatives.begin() : // we won't use it in this case
                                        system_lyxrc.editor_alternatives.find(fmt);
                        for (; sit != sen; ++sit) {
                                string const & cmd = *sit;
-                               if (ignore_system_lyxrc 
+                               if (ignore_system_lyxrc
                                    || sysfmt == sysend               // format not found
                                    || sysfmt->second.count(cmd) == 0 // this command not found
                                   )
-                                       os << "\\editor_alternatives " << fmt << " " << cmd << "\n";
+                                       os << "\\editor_alternatives " << fmt << " \"" << escapeCommand(cmd) << "\"\n";
                        }
                }
                if (tag != RC_LAST)
                        break;
        }
+       // fall through
+       case RC_DEFAULT_OTF_VIEW_FORMAT:
+               if ((ignore_system_lyxrc ||
+                    default_otf_view_format != system_lyxrc.default_otf_view_format)
+                   && !default_otf_view_format.empty()) {
+                       os << "\\default_otf_view_format " << default_otf_view_format << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_DEFAULT_VIEW_FORMAT:
                if (ignore_system_lyxrc ||
                    default_view_format != system_lyxrc.default_view_format) {
@@ -2712,6 +2793,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_VIEWER:
                // Ignore it
                if (tag != RC_LAST)
@@ -2721,31 +2803,32 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# CONVERTERS SECTION ##########################\n"
                   << "#\n\n";
 
+       // fall through
        case RC_CONVERTER:
                // Look for new converters
                for (Converters::const_iterator cit = theConverters().begin();
                     cit != theConverters().end(); ++cit) {
                        Converter const * converter =
-                               theSystemConverters().getConverter(cit->from,
-                                                              cit->to);
+                               theSystemConverters().getConverter(cit->from(),
+                                                                  cit->to());
                        if (!converter ||
-                           converter->command != cit->command ||
-                           converter->flags != cit->flags)
-                               os << "\\converter \"" << cit->from << "\" \""
-                                  << cit->to << "\" \""
-                                  << escapeCommand(cit->command) << "\" \""
-                                  << cit->flags << "\"\n";
+                           converter->command() != cit->command() ||
+                           converter->flags() != cit->flags())
+                               os << "\\converter \"" << cit->from() << "\" \""
+                                  << cit->to() << "\" \""
+                                  << escapeCommand(cit->command()) << "\" \""
+                                  << cit->flags() << "\"\n";
                }
 
                // New/modifed converters
                for (Converters::const_iterator cit = theSystemConverters().begin();
                     cit != theSystemConverters().end(); ++cit)
-                       if (!theConverters().getConverter(cit->from, cit->to))
-                               os << "\\converter \"" << cit->from
-                                  << "\" \"" << cit->to << "\" \"\" \"\"\n";
+                       if (!theConverters().getConverter(cit->from(), cit->to()))
+                               os << "\\converter \"" << cit->from()
+                                  << "\" \"" << cit->to() << "\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
-       
+               // fall through
        case RC_COPIER:
                if (tag == RC_LAST)
                        os << "\n#\n"
@@ -2791,10 +2874,13 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        // if we forget an element.
        LyXRC::LyXRCTags tag = LyXRC::RC_LAST;
        switch (tag) {
+       case LyXRC::RC_LAST:
        case LyXRC::RC_ACCEPT_COMPOUND:
+               if (lyxrc_orig.spellchecker_accept_compound != lyxrc_new.spellchecker_accept_compound)
+                       if (theSpellChecker()) theSpellChecker()->advanceChangeNumber();
+               // fall through
        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:
@@ -2814,6 +2900,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_COMPLETION_POPUP_DELAY:
        case LyXRC::RC_COMPLETION_POPUP_MATH:
        case LyXRC::RC_COMPLETION_POPUP_TEXT:
+       case LyXRC::RC_COMPLETION_MINLENGTH:
        case LyXRC::RC_USELASTFILEPOS:
        case LyXRC::RC_LOADSESSION:
        case LyXRC::RC_CHKTEX_COMMAND:
@@ -2823,9 +2910,8 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR:
        case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
        case LyXRC::RC_DATE_INSERT_FORMAT:
-       case LyXRC::RC_DEFAULT_LANGUAGE:
        case LyXRC::RC_GUI_LANGUAGE:
-       case LyXRC::RC_DEFAULT_PAPERSIZE:
+       case LyXRC::RC_DEFAULT_OTF_VIEW_FORMAT:
        case LyXRC::RC_DEFAULT_VIEW_FORMAT:
        case LyXRC::RC_DEFFILE:
        case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
@@ -2836,18 +2922,22 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                        if (path.exists() && path.isDirectory())
                                package().document_dir() = FileName(lyxrc.document_path);
                }
+               // fall through
        case LyXRC::RC_EDITOR_ALTERNATIVES:
        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_ICON_SET:
        case LyXRC::RC_INDEX_ALTERNATIVES:
        case LyXRC::RC_INDEX_COMMAND:
        case LyXRC::RC_JBIBTEX_COMMAND:
+       case LyXRC::RC_JBIBTEX_ALTERNATIVES:
        case LyXRC::RC_JINDEX_COMMAND:
        case LyXRC::RC_NOMENCL_COMMAND:
+       case LyXRC::RC_PYGMENTIZE_COMMAND:
        case LyXRC::RC_INPUT:
        case LyXRC::RC_KBMAP:
        case LyXRC::RC_KBMAP_PRIMARY:
@@ -2858,43 +2948,33 @@ 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_MAC_LIKE_WORD_MOVEMENT:
+       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_CURSOR_MOVEMENT:
        case LyXRC::RC_MACRO_EDIT_STYLE:
        case LyXRC::RC_MAKE_BACKUP:
        case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
        case LyXRC::RC_MOUSE_WHEEL_SPEED:
+       case LyXRC::RC_MOUSE_MIDDLEBUTTON_PASTE:
        case LyXRC::RC_NUMLASTFILES:
        case LyXRC::RC_PARAGRAPH_MARKERS:
        case LyXRC::RC_PATH_PREFIX:
                if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
-                       prependEnvPath("PATH", lyxrc.path_prefix);
+                       prependEnvPath("PATH", lyxrc_new.path_prefix);
+                       // Resets python path
+                       support::os::python(true);
                }
-       case LyXRC::RC_PERS_DICT:
+               // fall through
        case LyXRC::RC_PREVIEW:
        case LyXRC::RC_PREVIEW_HASHED_LABELS:
        case LyXRC::RC_PREVIEW_SCALE_FACTOR:
-       case LyXRC::RC_PRINTCOLLCOPIESFLAG:
-       case LyXRC::RC_PRINTCOPIESFLAG:
-       case LyXRC::RC_PRINTER:
-       case LyXRC::RC_PRINTEVENPAGEFLAG:
-       case LyXRC::RC_PRINTEXSTRAOPTIONS:
-       case LyXRC::RC_PRINTFILEEXTENSION:
        case LyXRC::RC_PRINTLANDSCAPEFLAG:
-       case LyXRC::RC_PRINTODDPAGEFLAG:
-       case LyXRC::RC_PRINTPAGERANGEFLAG:
        case LyXRC::RC_PRINTPAPERDIMENSIONFLAG:
        case LyXRC::RC_PRINTPAPERFLAG:
-       case LyXRC::RC_PRINTREVERSEFLAG:
-       case LyXRC::RC_PRINTSPOOL_COMMAND:
-       case LyXRC::RC_PRINTSPOOL_PRINTERPREFIX:
-       case LyXRC::RC_PRINTTOFILE:
-       case LyXRC::RC_PRINTTOPRINTER:
-       case LyXRC::RC_PRINT_ADAPTOUTPUT:
-       case LyXRC::RC_PRINT_COMMAND:
-       case LyXRC::RC_RTL_SUPPORT:
        case LyXRC::RC_SAVE_COMPRESSED:
+       case LyXRC::RC_SAVE_ORIGIN:
        case LyXRC::RC_SCREEN_DPI:
        case LyXRC::RC_SCREEN_FONT_ROMAN:
        case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
@@ -2910,8 +2990,10 @@ 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:
+               if (lyxrc_orig.spellchecker != lyxrc_new.spellchecker)
+                       setSpellChecker();
+               // fall through
        case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
        case LyXRC::RC_SPELLCHECK_NOTES:
        case LyXRC::RC_SPLITINDEX_COMMAND:
@@ -2922,37 +3004,42 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
                        os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
                }
+               // fall through
+       case LyXRC::RC_TEXINPUTS_PREFIX:
        case LyXRC::RC_THESAURUSDIRPATH:
        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_CONVERTER_NEEDAUTH_FORBIDDEN:
+       case LyXRC::RC_USE_CONVERTER_NEEDAUTH:
+       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_USE_QIMAGE:
+       case LyXRC::RC_USE_SYSTEM_THEME_ICONS:
        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:
        case LyXRC::RC_FULL_SCREEN_MENUBAR:
+       case LyXRC::RC_FULL_SCREEN_STATUSBAR:
        case LyXRC::RC_FULL_SCREEN_TABBAR:
        case LyXRC::RC_FULL_SCREEN_TOOLBARS:
        case LyXRC::RC_FULL_SCREEN_WIDTH:
        case LyXRC::RC_VISUAL_CURSOR:
+       case LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW:
        case LyXRC::RC_VIEWER:
        case LyXRC::RC_VIEWER_ALTERNATIVES:
        case LyXRC::RC_FORWARD_SEARCH_DVI:
        case LyXRC::RC_FORWARD_SEARCH_PDF:
        case LyXRC::RC_EXPORT_OVERWRITE:
        case LyXRC::RC_DEFAULT_DECIMAL_POINT:
+       case LyXRC::RC_DEFAULT_LENGTH_UNIT:
        case LyXRC::RC_SCROLL_WHEEL_ZOOM:
-       case LyXRC::RC_LAST:
+       case LyXRC::RC_CURSOR_WIDTH:
                break;
        }
 }
@@ -2969,14 +3056,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;
@@ -3023,6 +3105,14 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_CONVERTER:
                break;
 
+       case RC_CONVERTER_NEEDAUTH_FORBIDDEN:
+               str = _("Forbid use of external converters with 'needauth' option to prevent undesired effects.");
+               break;
+
+       case RC_CONVERTER_NEEDAUTH:
+               str = _("Ask user before calling external converters with 'needauth' option to prevent undesired effects.");
+               break;
+
        case RC_COPIER:
                break;
 
@@ -3030,12 +3120,20 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("LyX normally doesn't update the cursor position if you move the scrollbar. Set to true if you'd prefer to always have the cursor on screen.");
                break;
 
+       case RC_CURSOR_WIDTH:
+               str = _("Configure the width of the text cursor. Automatic zoom-controlled cursor width used when set to 0.");
+               break;
+
        case RC_SCROLL_BELOW_DOCUMENT:
                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_LIKE_WORD_MOVEMENT:
-               str = _("Use the Mac OS X conventions for the word-level cursor movement");
+       case RC_MAC_DONTSWAP_CTRL_META:
+               str = _("Make Apple key act as Meta and Control key as Ctrl.");
+               break;
+
+       case RC_MAC_LIKE_CURSOR_MOVEMENT:
+               str = _("Use the Mac OS X conventions for cursor movement");
                break;
 
        case RC_SHOW_MACRO_LABEL:
@@ -3051,16 +3149,12 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Command definition file. Can either specify an absolute path, or LyX will look in its global and local commands/ directories.");
                break;
 
-       case RC_DEFAULT_VIEW_FORMAT:
-               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE].");
+       case RC_DEFAULT_OTF_VIEW_FORMAT:
+               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE] with non-TeX fonts.");
                break;
 
-       case RC_DEFAULT_LANGUAGE:
-               str = _("New documents will be assigned this language.");
-               break;
-
-       case RC_DEFAULT_PAPERSIZE:
-               str = _("Specify the default paper size.");
+       case RC_DEFAULT_VIEW_FORMAT:
+               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE].");
                break;
 
        case RC_DIALOGS_ICONIFY_WITH_MAIN:
@@ -3076,7 +3170,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;
 
@@ -3088,7 +3181,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:
@@ -3103,6 +3196,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Define the options of makeindex (cf. man makeindex) to be used for nomenclatures. This might differ from the index processing options.");
                break;
 
+       case RC_PYGMENTIZE_COMMAND:
+               str = _("The command to run the python pygments syntax highlighter.");
+               break;
+
        case RC_INPUT:
                break;
 
@@ -3136,11 +3233,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;
 
@@ -3161,8 +3258,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_MOUSE_WHEEL_SPEED:
-               str = bformat(_("The scrolling speed of the mouse wheel."),
-                     maxlastfiles);
+               str = _("The scrolling speed of the mouse wheel.");
                break;
 
        case RC_COMPLETION_POPUP_DELAY:
@@ -3202,7 +3298,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_AUTOCORRECTION_MATH:
-               str = _("Allow TeXMacs shorthand, like => converting to \Rightarrow.");
+               str = _("Allow TeXMacs shorthand, like => converting to \\Rightarrow.");
                break;
 
        case RC_NUMLASTFILES:
@@ -3212,7 +3308,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
 
        case RC_PATH_PREFIX:
                str = _("Specify those directories which should be "
-                        "prepended to the PATH environment variable. "
+                        "prepended to the PATH environment variable.\n"
                         "Use the OS native format.");
                break;
 
@@ -3228,86 +3324,26 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Scale the preview size to suit.");
                break;
 
-       case RC_PRINTCOLLCOPIESFLAG:
-               str = _("The option for specifying whether the copies should be collated.");
-               break;
-
-       case RC_PRINTCOPIESFLAG:
-               str = _("The option for specifying the number of copies to print.");
-               break;
-
-       case RC_PRINTER:
-               str = _("The default printer to print on. If none is specified, LyX will use the environment variable PRINTER.");
-               break;
-
-       case RC_PRINTEVENPAGEFLAG:
-               str = _("The option to print only even pages.");
-               break;
-
-       case RC_PRINTEXSTRAOPTIONS:
-               str = _("Extra options to pass to printing program after everything else, but before the filename of the DVI file to be printed.");
-               break;
-
-       case RC_PRINTFILEEXTENSION:
-               str = _("Extension of printer program output file. Usually \".ps\".");
-               break;
-
        case RC_PRINTLANDSCAPEFLAG:
                str = _("The option to print out in landscape.");
                break;
 
-       case RC_PRINTODDPAGEFLAG:
-               str = _("The option to print only odd pages.");
-               break;
-
-       case RC_PRINTPAGERANGEFLAG:
-               str = _("The option for specifying a comma-separated list of pages to print.");
-               break;
-
        case RC_PRINTPAPERDIMENSIONFLAG:
-                                  str = _("Option to specify the dimensions of the print paper.");
+               str = _("Option to specify the dimensions of the print paper.");
                break;
 
        case RC_PRINTPAPERFLAG:
                str = _("The option to specify paper type.");
                break;
 
-       case RC_PRINTREVERSEFLAG:
-               str = _("The option to reverse the order of the pages printed.");
-               break;
-
-       case RC_PRINTSPOOL_COMMAND:
-               str = _("When set, this printer option automatically prints to a file and then calls a separate print spooling program on that file with the given name and arguments.");
-               break;
-
-       case RC_PRINTSPOOL_PRINTERPREFIX:
-               str = _("If you specify a printer name in the print dialog, the following argument is prepended along with the printer name after the spool command.");
-               break;
-
-       case RC_PRINTTOFILE:
-               str = _("Option to pass to the print program to print to a file.");
-               break;
-
-       case RC_PRINTTOPRINTER:
-               str = _("Option to pass to the print program to print on a specific printer.");
-               break;
-
-       case RC_PRINT_ADAPTOUTPUT:
-               str = _("Select for LyX to pass the name of the destination printer to your print command.");
-               break;
-
-       case RC_PRINT_COMMAND:
-               str = _("Your favorite print program, e.g. \"dvips\", \"dvilj4\".");
-               break;
-
-       case RC_RTL_SUPPORT:
-               str = _("Select to enable support of right-to-left languages (e.g. Hebrew, Arabic).");
-               break;
-
        case RC_VISUAL_CURSOR:
                str = _("Select to have visual bidi cursor movement, unselect for logical movement.");
                break;
 
+       case RC_CLOSE_BUFFER_WITH_LAST_VIEW:
+               str = _("Specify whether, closing the last view of an open document, LyX should close the document (yes), hide it (no), or ask the user (ask).");
+               break;
+
        case RC_SCREEN_DPI:
                str = _("DPI (dots per inch) of your monitor is auto-detected by LyX. If that goes wrong, override the setting here.");
                break;
@@ -3369,6 +3405,13 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_TEX_EXPECTS_WINDOWS_PATHS:
                break;
 
+       case RC_TEXINPUTS_PREFIX:
+               str = _("Specify those directories which should be "
+                        "prepended to the TEXINPUTS environment variable.\n"
+                        "A '.' represents the current document directory. "
+                        "Use the OS native format.");
+               break;
+
        case RC_UIFILE:
                str = _("The UI (user interface) file. Can either specify an absolute path, or LyX will look in its global and local ui/ directories.");
                break;
@@ -3379,7 +3422,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:
@@ -3390,9 +3434,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;