]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Allow to hide formats from menus
[lyx.git] / src / LyXRC.cpp
index 9f360fedcc076d874ab95b2d7953994a262793f0..fb711743363a92fe1b1682845b64fc66c84673cc 100644 (file)
 
 #include "LyXRC.h"
 
+#include "BufferList.h"
 #include "ColorSet.h"
 #include "Converter.h"
 #include "FontEnums.h"
 #include "Format.h"
+#include "FuncCode.h"
+#include "FuncRequest.h"
 #include "Lexer.h"
 #include "LyX.h"
 #include "Mover.h"
 #include "Session.h"
+#include "SpellChecker.h"
 #include "version.h"
 
 #include "graphics/GraphicsTypes.h"
@@ -39,6 +43,7 @@
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/Package.h"
+#include "support/TempFile.h"
 #include "support/userinfo.h"
 
 #include <fstream>
@@ -54,7 +59,9 @@ namespace os = support::os;
 
 namespace {
 
-static unsigned int const LYXRC_FILEFORMAT = 1;
+// 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 = 24; // spitz: rename collapsible
 
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
@@ -72,11 +79,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 },
@@ -89,8 +98,9 @@ LexerKeyword lyxrcTags[] = {
        { "\\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_platex_view_format", LyXRC::RC_DEFAULT_PLATEX_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 },
@@ -100,13 +110,13 @@ LexerKeyword lyxrcTags[] = {
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
-       { "\\force_paint_single_char", LyXRC::RC_FORCE_PAINT_SINGLE_CHAR },
        { "\\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 },
@@ -117,6 +127,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\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 },
@@ -132,10 +143,11 @@ LexerKeyword lyxrcTags[] = {
        { "\\language_package_selection", LyXRC::RC_LANGUAGE_PACKAGE_SELECTION },
        { "\\load_session", LyXRC::RC_LOADSESSION },
        { "\\mac_dontswap_ctrl_meta", LyXRC::RC_MAC_DONTSWAP_CTRL_META },
-       { "\\mac_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
+       { "\\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 },
@@ -146,26 +158,12 @@ LexerKeyword lyxrcTags[] = {
        { "\\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 },
@@ -196,10 +194,15 @@ LexerKeyword lyxrcTags[] = {
        { "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
        { "\\ui_file", LyXRC::RC_UIFILE },
        { "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
+       { "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
+       { "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
        { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
+       { "\\use_native_filedialog", LyXRC::RC_USE_NATIVE_FILEDIALOG },
        { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
+       { "\\use_qimage", LyXRC::RC_USE_QIMAGE },
        // compatibility with versions older than 1.4.0 only
        { "\\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 },
@@ -213,7 +216,7 @@ LexerKeyword lyxrcTags[] = {
 
 const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
 
-} // namespace anon
+} // namespace
 
 
 LyXRC::LyXRC()
@@ -225,40 +228,30 @@ LyXRC::LyXRC()
 void LyXRC::setDefaults()
 {
        icon_set = string();
+       use_system_theme_icons = false;
        bind_file = "cua";
        def_file = "default";
        ui_file = "default";
        // The current document directory
        texinputs_prefix = ".";
-       // 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";
        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";
+       default_platex_view_format = "pdf3";
        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;
+       defaultZoom = 150;
+       currentZoom = defaultZoom;
        allow_geometry_session = true;
        // Default LaTeX font size:
        font_sizes[FONT_SIZE_TINY] = "5.0";
@@ -280,18 +273,22 @@ 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;
+       use_native_filedialog = true;
        load_session = false;
        make_backup = true;
        save_compressed = false;
+       save_origin = false;
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
 // FIXME: this check should test the target platform (darwin)
 #if defined(USE_MACOSX_PACKAGING)
        spellchecker = "native";
+#elif defined(USE_ENCHANT)
+       spellchecker = "enchant";
 #elif defined(USE_ASPELL)
        spellchecker = "aspell";
 #elif defined(USE_HUNSPELL)
@@ -301,9 +298,9 @@ 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;
@@ -316,7 +313,6 @@ void LyXRC::setDefaults()
        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;
@@ -327,16 +323,19 @@ void LyXRC::setDefaults()
        scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
        paragraph_markers = false;
        mac_dontswap_ctrl_meta = false;
-       mac_like_word_movement = 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());
@@ -352,6 +351,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;
 
@@ -366,7 +366,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;
 }
 
 
@@ -382,7 +385,7 @@ void oldFontFormat(string & family, string & foundry)
                foundry.erase();
 }
 
-} // namespace anon
+} // namespace
 
 
 bool LyXRC::read(FileName const & filename, bool check_format)
@@ -395,18 +398,24 @@ bool LyXRC::read(FileName const & filename, bool check_format)
                return retval == ReadOK;
 
        LYXERR(Debug::FILES, "Converting LyXRC file to " << LYXRC_FILEFORMAT);
-       FileName const tempfile = FileName::tempName("convert_lyxrc");
+       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);
+               if (retval == FormatMismatch)
+                       LYXERR0("Conversion failed for " << filename.absFileName());
        }
-       Lexer lexrc2(lyxrcTags);
-       lexrc2.setFile(tempfile);
-       LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
-       retval = read(lexrc2, check_format);
-       tempfile.removeFile();
        return retval == ReadOK;
 }
 
@@ -430,9 +439,6 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
        if (!lexrc.isOK())
                return ReadError;
 
-       // default for current rowpainter capabilities
-       force_paint_single_char = true;
-
        // format prior to 2.0 and introduction of format tag
        unsigned int format = 0;
 
@@ -464,7 +470,7 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                FileName const tmp =
                                        libFileSearch(string(),
                                                      lexrc.getString());
-                               if (read(tmp, check_format)) {
+                               if (!read(tmp, check_format)) {
                                        lexrc.printError(
                                            "Error reading included file: " + tmp.absFileName());
                                }
@@ -538,80 +544,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> fontenc;
                        break;
 
-               case RC_FORCE_PAINT_SINGLE_CHAR:
-                       lexrc >> force_paint_single_char;
-                       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;
@@ -620,25 +556,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        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;
 
@@ -673,6 +593,12 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        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());
@@ -708,7 +634,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
 
                case RC_SCREEN_ZOOM:
-                       lexrc >> zoom;
+                       lexrc >> defaultZoom;
+                       if (defaultZoom < 10)
+                               defaultZoom = 10;
                        break;
 
                case RC_GEOMETRY_SESSION:
@@ -737,45 +665,33 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        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:
@@ -830,6 +746,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> completion_popup_after_complete;
                        break;
 
+               case RC_COMPLETION_MINLENGTH:
+                       lexrc >> completion_minlength;
+                       break;
+
                case RC_NUMLASTFILES:
                        lexrc >> num_lastfiles;
                        break;
@@ -842,6 +762,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        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();
@@ -908,10 +832,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        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:
@@ -934,8 +856,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> mac_dontswap_ctrl_meta;
                        break;
 
-               case RC_MAC_LIKE_WORD_MOVEMENT:
-                       lexrc >> mac_like_word_movement;
+               case RC_MAC_LIKE_CURSOR_MOVEMENT:
+                       lexrc >> mac_like_cursor_movement;
                        break;
 
                case RC_MACRO_EDIT_STYLE:
@@ -959,6 +881,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_ACCEPT_COMPOUND:
                        lexrc >> spellchecker_accept_compound;
                        break;
+               case RC_USE_NATIVE_FILEDIALOG:
+                       lexrc >> use_native_filedialog;
+                       break;
                case RC_USE_SYSTEM_COLORS:
                        lexrc >> use_system_colors;
                        break;
@@ -968,6 +893,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_USE_PIXMAP_CACHE:
                        lexrc >> use_pixmap_cache;
                        break;
+               case RC_USE_QIMAGE:
+                       lexrc >> use_qimage;
+                       break;
                case RC_SPELLCHECKER:
                        lexrc >> spellchecker;
                        break;
@@ -989,15 +917,20 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                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;
@@ -1040,12 +973,12 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                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;
@@ -1083,32 +1016,34 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_VIEWER: {
                        string format, command;
                        lexrc >> format >> command;
-                       formats.setViewer(format, command);
+                       theFormats().setViewer(format, command);
                        break;
                }
                case RC_FILEFORMAT: {
-                       string format, extension, prettyname, shortcut;
-                       lexrc >> format >> extension >> prettyname >> shortcut;
+                       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;
@@ -1117,49 +1052,57 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                        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 if (flag == "menu=none")
+                                       flgs |= Format::no_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;
-                       if (lexrc.next())
-                               format = lexrc.getString();
-                       if (lexrc.eatLine())
-                               command = lexrc.getString();
-                       editor_alternatives[format].insert(command);
+                       if ((lexrc >> format) && lexrc.next(true)) {
+                               command  = lexrc.getString();
+                               editor_alternatives[format].insert(command);
+                       }
                        break;
                }
 
-               case RC_DEFAULT_VIEW_FORMAT:
-                       lexrc >> default_view_format;
+               case RC_DEFAULT_OTF_VIEW_FORMAT:
+                       lexrc >> default_otf_view_format;
+                       break;
+
+               case RC_DEFAULT_PLATEX_VIEW_FORMAT:
+                       lexrc >> default_platex_view_format;
                        break;
 
-               case RC_DEFAULT_LANGUAGE:
-                       lexrc >> default_language;
+               case RC_DEFAULT_VIEW_FORMAT:
+                       lexrc >> default_view_format;
                        break;
 
                case RC_GUI_LANGUAGE:
@@ -1208,6 +1151,12 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                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;
@@ -1227,6 +1176,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                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;
@@ -1288,6 +1240,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        break;
 
+               case RC_MOUSE_MIDDLEBUTTON_PASTE:
+                       lexrc >> mouse_middlebutton_paste;
+                       break;
+
                case RC_LAST:
                        break; // this is just a dummy
                }
@@ -1299,8 +1255,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
        }
 
        /// Update converters data-structures
-       theConverters().update(formats);
+       theConverters().update(theFormats());
        theConverters().buildGraph();
+       theBufferList().invalidateConverterCache();
 
        return ReadOK;
 }
@@ -1349,7 +1306,7 @@ namespace {
                             "\"", "\\\"");
        }
 
-}
+} // namespace
 
 
 void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
@@ -1386,7 +1343,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) {
@@ -1403,7 +1360,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) {
@@ -1411,6 +1368,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) {
@@ -1419,6 +1377,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) {
@@ -1429,6 +1388,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) {
@@ -1440,6 +1400,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) {
@@ -1448,6 +1409,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) {
@@ -1459,6 +1421,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) {
@@ -1467,6 +1430,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) {
@@ -1475,6 +1439,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
@@ -1486,58 +1451,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) {
@@ -1545,6 +1459,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();
@@ -1557,6 +1472,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) {
@@ -1564,6 +1480,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) {
@@ -1571,6 +1488,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();
@@ -1583,6 +1514,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) {
@@ -1590,6 +1522,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) {
@@ -1597,6 +1530,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) {
@@ -1604,6 +1538,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) {
@@ -1611,14 +1546,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 "
@@ -1626,6 +1572,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) {
@@ -1633,6 +1580,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) {
@@ -1641,6 +1589,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) {
@@ -1649,6 +1598,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) {
@@ -1657,6 +1607,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) {
@@ -1665,17 +1616,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) {
@@ -1683,7 +1634,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) {
@@ -1703,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_PREVIEW_HASHED_LABELS:
                if (ignore_system_lyxrc ||
                    preview_hashed_labels !=
@@ -1713,7 +1664,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) {
@@ -1722,7 +1673,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) {
@@ -1731,7 +1682,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) {
@@ -1744,7 +1713,7 @@ 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) {
@@ -1753,7 +1722,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                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) {
@@ -1761,13 +1740,15 @@ 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) {
-                       os << "\\screen_zoom " << zoom << '\n';
+                   defaultZoom != system_lyxrc.defaultZoom) {
+                       os << "\\screen_zoom " << defaultZoom << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_GEOMETRY_SESSION:
                if (ignore_system_lyxrc ||
                    allow_geometry_session != system_lyxrc.allow_geometry_session) {
@@ -1776,6 +1757,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
@@ -1785,6 +1767,7 @@ 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
@@ -1794,6 +1777,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCROLL_BELOW_DOCUMENT:
                if (ignore_system_lyxrc ||
                    scroll_below_document
@@ -1803,6 +1787,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
@@ -1812,6 +1797,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MAC_DONTSWAP_CTRL_META:
                if (ignore_system_lyxrc ||
                    mac_dontswap_ctrl_meta
@@ -1821,15 +1807,17 @@ 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_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
@@ -1843,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_DIALOGS_ICONIFY_WITH_MAIN:
                if (ignore_system_lyxrc ||
                    dialogs_iconify_with_main
@@ -1852,6 +1841,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) {
@@ -1860,6 +1850,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) {
@@ -1868,6 +1859,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) {
@@ -1876,6 +1868,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) {
@@ -1884,6 +1877,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) {
@@ -1892,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_TYPEWRITER_FOUNDRY:
                if (ignore_system_lyxrc ||
                    typewriter_font_foundry != system_lyxrc.typewriter_font_foundry) {
@@ -1900,7 +1895,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) {
@@ -1910,6 +1905,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]
@@ -1932,6 +1928,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"
@@ -1946,9 +1943,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) {
@@ -1958,6 +1958,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) {
@@ -1967,6 +1968,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) {
@@ -1976,6 +1978,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) {
@@ -1985,6 +1998,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) {
@@ -1994,6 +2008,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) {
@@ -2003,6 +2018,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) {
@@ -2012,6 +2028,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) {
@@ -2021,6 +2038,7 @@ 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) {
@@ -2030,6 +2048,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_DVI:
                if (ignore_system_lyxrc ||
                    forward_search_dvi != system_lyxrc.forward_search_dvi) {
@@ -2037,6 +2056,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) {
@@ -2049,6 +2069,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);
@@ -2063,82 +2084,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) {
@@ -2147,32 +2097,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) {
@@ -2181,6 +2106,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
@@ -2190,36 +2116,12 @@ 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:
-               if (ignore_system_lyxrc ||
-                   print_file_extension != system_lyxrc.print_file_extension) {
-                       os << "\\print_file_extension \""
-                          << print_file_extension
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
 
-               os << "\n#\n"
-                  << "# TEX SECTION #######################################\n"
-                  << "#\n\n";
+       os << "\n#\n"
+                << "# TEX SECTION #######################################\n"
+                << "#\n\n";
 
+       // fall through
        case RC_TEXINPUTS_PREFIX:
                if (ignore_system_lyxrc ||
                    texinputs_prefix != system_lyxrc.texinputs_prefix) {
@@ -2227,7 +2129,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_FONT_ENCODING:
                if (ignore_system_lyxrc ||
                    fontenc != system_lyxrc.fontenc) {
@@ -2236,18 +2138,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-       case RC_FORCE_PAINT_SINGLE_CHAR:
-               if (ignore_system_lyxrc ||
-                   force_paint_single_char != system_lyxrc.force_paint_single_char) {
-                       os << "\\force_paint_single_char \"" << force_paint_single_char << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
                os << "\n#\n"
                   << "# FILE SECTION ######################################\n"
                   << "#\n\n";
 
+       // fall through
        case RC_DOCUMENTPATH:
                if (ignore_system_lyxrc ||
                    document_path != system_lyxrc.document_path) {
@@ -2256,6 +2151,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) {
@@ -2264,6 +2160,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) {
@@ -2272,6 +2169,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) {
@@ -2279,6 +2177,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) {
@@ -2286,6 +2194,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) {
@@ -2294,6 +2203,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) {
@@ -2302,6 +2212,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) {
@@ -2310,6 +2221,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) {
@@ -2318,6 +2230,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) {
@@ -2325,6 +2238,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) {
@@ -2333,6 +2247,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) {
@@ -2341,6 +2256,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) {
@@ -2349,6 +2265,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
@@ -2358,6 +2275,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) {
@@ -2365,6 +2292,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) {
@@ -2373,6 +2301,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) {
@@ -2381,6 +2310,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) {
@@ -2389,6 +2319,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) {
@@ -2397,6 +2328,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) {
@@ -2405,6 +2337,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) {
@@ -2413,6 +2346,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_PLAINTEXT_LINELEN:
                if (ignore_system_lyxrc ||
                    plaintext_linelen != system_lyxrc.plaintext_linelen) {
@@ -2420,6 +2354,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) {
@@ -2427,6 +2362,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) {
@@ -2434,6 +2370,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) {
@@ -2451,6 +2396,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# SPELLCHECKER SECTION ##############################\n"
                   << "#\n\n";
 
+       // fall through
        case RC_ACCEPT_COMPOUND:
                if (ignore_system_lyxrc ||
                    spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
@@ -2459,6 +2405,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_ALT_LANG:
                if (ignore_system_lyxrc ||
                    spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
@@ -2467,6 +2414,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_ESC_CHARS:
                if (ignore_system_lyxrc ||
                    spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
@@ -2474,6 +2422,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_USE_NATIVE_FILEDIALOG:
+               if (ignore_system_lyxrc ||
+                   use_native_filedialog != system_lyxrc.use_native_filedialog) {
+                       os << "\\use_native_filedialog "
+                          << convert<string>(use_native_filedialog)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_USE_SYSTEM_COLORS:
                if (ignore_system_lyxrc ||
                    use_system_colors != system_lyxrc.use_system_colors) {
@@ -2483,6 +2442,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_USE_TOOLTIP:
                if (ignore_system_lyxrc ||
                    use_tooltip != system_lyxrc.use_tooltip) {
@@ -2492,6 +2452,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) {
@@ -2499,15 +2460,24 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << convert<string>(use_pixmap_cache)
                           << '\n';
                }
+               if (tag != RC_LAST)
+                       break;
+               // 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) {
@@ -2515,7 +2485,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) {
@@ -2523,7 +2501,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) {
@@ -2532,7 +2510,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) {
@@ -2541,21 +2519,24 @@ 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;
+               // fall through
        case RC_LANGUAGE_CUSTOM_PACKAGE:
                if (ignore_system_lyxrc ||
                    language_custom_package != system_lyxrc.language_custom_package) {
@@ -2564,6 +2545,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_GLOBAL_OPTIONS:
                if (ignore_system_lyxrc ||
                    language_global_options
@@ -2574,6 +2556,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_PACKAGE_SELECTION:
                if (ignore_system_lyxrc ||
                    language_package_selection != system_lyxrc.language_package_selection) {
@@ -2595,6 +2578,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_BEGIN:
                if (ignore_system_lyxrc ||
                    language_command_begin
@@ -2605,6 +2589,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
@@ -2614,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_LANGUAGE_COMMAND_LOCAL:
                if (ignore_system_lyxrc ||
                    language_command_local
@@ -2624,6 +2610,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) {
@@ -2632,6 +2619,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) {
@@ -2640,6 +2628,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
@@ -2654,6 +2643,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) {
@@ -2661,13 +2651,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) {
@@ -2675,6 +2659,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) {
@@ -2694,7 +2679,7 @@ 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_wheel_zoom != system_lyxrc.scroll_wheel_zoom) {
@@ -2722,24 +2707,27 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# FORMATS SECTION ##########################\n"
                   << "#\n\n";
 
+       // 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->inExportMenu() != cit->inExportMenu()) {
+                           format->inExportMenu() != cit->inExportMenu() ||
+                           format->noMenu() != cit->noMenu() ||
+                           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()) << "\" \"";
@@ -2748,28 +2736,31 @@ 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 =
                                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();
@@ -2783,12 +2774,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                    || 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();
@@ -2808,12 +2800,31 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                    || 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_PLATEX_VIEW_FORMAT:
+               if ((ignore_system_lyxrc ||
+                    default_platex_view_format != system_lyxrc.default_platex_view_format)
+                   && !default_platex_view_format.empty()) {
+                       os << "\\default_platex_view_format " << default_platex_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) {
@@ -2821,6 +2832,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)
@@ -2830,31 +2842,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"
@@ -2900,7 +2913,11 @@ 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_AUTOCORRECTION_MATH:
@@ -2922,6 +2939,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:
@@ -2931,19 +2949,24 @@ 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_PLATEX_VIEW_FORMAT:
        case LyXRC::RC_DEFAULT_VIEW_FORMAT:
        case LyXRC::RC_DEFFILE:
        case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
        case LyXRC::RC_DISPLAY_GRAPHICS:
        case LyXRC::RC_DOCUMENTPATH:
+               if (lyxrc_orig.document_path != lyxrc_new.document_path) {
+                       FileName path(lyxrc_new.document_path);
+                       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_FORCE_PAINT_SINGLE_CHAR:
        case LyXRC::RC_FILEFORMAT:
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
@@ -2951,8 +2974,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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:
@@ -2967,38 +2992,39 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_LANGUAGE_PACKAGE_SELECTION:
        case LyXRC::RC_LYXRCFORMAT:
        case LyXRC::RC_MAC_DONTSWAP_CTRL_META:
-       case LyXRC::RC_MAC_LIKE_WORD_MOVEMENT:
+       case LyXRC::RC_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", replaceEnvironmentPath(lyxrc_new.path_prefix));
+                       // Resets python path
+                       support::os::python(true);
+               }
+               // fall through
        case LyXRC::RC_PREVIEW:
+               if (lyxrc_orig.preview != lyxrc_new.preview) {
+                       // Update all previews of all documents.
+                       /* FIXME: this can be very expensive. It would be cheaper
+                        * to kill all existing previews and update visible
+                        * previews.*/
+                       theBufferList().updatePreviews();
+               }
+               // fall through
        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:
        case LyXRC::RC_SCREEN_FONT_SANS:
@@ -3007,13 +3033,28 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_SCREEN_FONT_SIZES:
        case LyXRC::RC_SCREEN_FONT_TYPEWRITER:
        case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
-       case LyXRC::RC_GEOMETRY_SESSION:
        case LyXRC::RC_SCREEN_ZOOM:
+               if (lyxrc_orig.roman_font_name != lyxrc_new.roman_font_name
+               || lyxrc_orig.sans_font_name != lyxrc_new.sans_font_name
+               || lyxrc_orig.typewriter_font_name != lyxrc_new.typewriter_font_name
+               || lyxrc_orig.roman_font_foundry != lyxrc_new.roman_font_foundry
+               || lyxrc_orig.sans_font_foundry != lyxrc_new.sans_font_foundry
+               || lyxrc_orig.use_scalable_fonts != lyxrc_new.use_scalable_fonts
+               || lyxrc_orig.font_sizes != lyxrc_new.font_sizes
+               || lyxrc_orig.typewriter_font_foundry != lyxrc_new.typewriter_font_foundry
+               || lyxrc_orig.defaultZoom != lyxrc_new.defaultZoom) {
+               dispatch(FuncRequest(LFUN_SCREEN_FONT_UPDATE));
+       }
+
+       case LyXRC::RC_GEOMETRY_SESSION:
        case LyXRC::RC_SERVERPIPE:
        case LyXRC::RC_SET_COLOR:
        case LyXRC::RC_SHOW_BANNER:
        case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
        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:
@@ -3021,15 +3062,24 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_TEMPLATEPATH:
        case LyXRC::RC_TEX_ALLOWS_SPACES:
        case LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS:
+               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_USE_CONVERTER_CACHE:
+       case LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN:
+       case LyXRC::RC_USE_CONVERTER_NEEDAUTH:
+       case LyXRC::RC_USE_NATIVE_FILEDIALOG:
        case LyXRC::RC_USE_SYSTEM_COLORS:
        case LyXRC::RC_USE_TOOLTIP:
        case LyXRC::RC_USE_PIXMAP_CACHE:
+       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:
@@ -3037,34 +3087,23 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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_CURSOR_WIDTH:
-       case LyXRC::RC_LAST:
                break;
        }
-
-       // Do what is needed (if any) for changes to actually take effect.
-       if (lyxrc_orig.document_path != lyxrc_new.document_path) {
-               FileName path(lyxrc_new.document_path);
-               if (path.exists() && path.isDirectory())
-                       package().document_dir() = FileName(lyxrc.document_path);
-       }
-       if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
-               prependEnvPath("PATH", lyxrc.path_prefix);
-       }
-       if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
-               os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
-       }
 }
 
 
@@ -3128,6 +3167,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;
 
@@ -3147,8 +3194,8 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Make Apple key act as Meta and Control key as Ctrl.");
                break;
 
-       case RC_MAC_LIKE_WORD_MOVEMENT:
-               str = _("Use the Mac OS X conventions for the word-level cursor movement");
+       case RC_MAC_LIKE_CURSOR_MOVEMENT:
+               str = _("Use the Mac OS X conventions for cursor movement");
                break;
 
        case RC_SHOW_MACRO_LABEL:
@@ -3164,16 +3211,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].");
-               break;
-
-       case RC_DEFAULT_LANGUAGE:
-               str = _("New documents will be assigned this language.");
+       case RC_DEFAULT_OTF_VIEW_FORMAT:
+               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE] with non-TeX fonts.");
                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:
@@ -3200,10 +3243,6 @@ 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_FORCE_PAINT_SINGLE_CHAR:
-               str = _("Disable any kerning and ligatures for text drawing on screen.");
-               break;
-
        case RC_FILEFORMAT:
                break;
 
@@ -3219,6 +3258,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;
 
@@ -3277,8 +3320,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:
@@ -3318,7 +3360,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:
@@ -3344,86 +3386,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;