]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Hack to display section symbol
[lyx.git] / src / LyXRC.cpp
index 32ba8fdf0477a9602450293636411bf4a06d70ce..fa50d4a51d8aa2832ac8781bc93b5c85e6b947dd 100644 (file)
 #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"
-
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/environment.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
-#include "support/gettext.h"
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/Package.h"
 #include "support/TempFile.h"
-#include "support/userinfo.h"
+
+#ifdef USE_MACOSX_PACKAGING
+#include "support/AppleSupport.h"
+#endif
 
 #include <fstream>
 #include <iostream>
@@ -59,8 +60,7 @@ namespace {
 
 // The format should also be updated in configure.py, and conversion code
 // should be added to prefs2prefs_prefs.py.
-static unsigned int const LYXRC_FILEFORMAT = 20; // tommaso: 'needauth' options
-
+static unsigned int const LYXRC_FILEFORMAT = 37; // chillenb: screen_width and screen_limit
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
        { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@@ -77,6 +77,9 @@ LexerKeyword lyxrcTags[] = {
        { "\\bind_file", LyXRC::RC_BINDFILE },
        { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
        { "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
+       { "\\citation_search", LyXRC::RC_CITATION_SEARCH },
+       { "\\citation_search_pattern", LyXRC::RC_CITATION_SEARCH_PATTERN },
+       { "\\citation_search_view", LyXRC::RC_CITATION_SEARCH_VIEW },
        { "\\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 },
@@ -91,32 +94,33 @@ LexerKeyword lyxrcTags[] = {
        { "\\converter", LyXRC::RC_CONVERTER },
        { "\\converter_cache_maxage", LyXRC::RC_CONVERTER_CACHE_MAXAGE },
        { "\\copier", LyXRC::RC_COPIER },
+       { "\\ct_additions_underlined", LyXRC::RC_CT_ADDITIONS_UNDERLINED },
+       { "\\ct_markup_copied", LyXRC::RC_CT_MARKUP_COPIED },
        { "\\cursor_follows_scrollbar", LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR },
        { "\\cursor_width", LyXRC::RC_CURSOR_WIDTH },
-       { "\\date_insert_format", LyXRC::RC_DATE_INSERT_FORMAT },
        { "\\def_file", LyXRC::RC_DEFFILE },
-       { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_POINT },
+       { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_SEP },
        { "\\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 },
        { "\\document_path", LyXRC::RC_DOCUMENTPATH },
+       { "\\draw_strategy", LyXRC::RC_DRAW_STRATEGY },
        { "\\editor_alternatives", LyXRC::RC_EDITOR_ALTERNATIVES },
        { "\\escape_chars", LyXRC::RC_ESC_CHARS },
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
+       { "\\experimental:bookmarks_visibility", LyXRC::RC_BOOKMARKS_VISIBILITY },
        { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
-       { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
        { "\\format", LyXRC::RC_FILEFORMAT },
        { "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
        { "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
-       { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
        { "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
        { "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
        { "\\fullscreen_statusbar", LyXRC::RC_FULL_SCREEN_STATUSBAR },
        { "\\fullscreen_tabbar", LyXRC::RC_FULL_SCREEN_TABBAR },
        { "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
-       { "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
        { "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
        { "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
        { "\\hunspelldir_path", LyXRC::RC_HUNSPELLDIR_PATH },
@@ -124,6 +128,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 },
@@ -157,6 +162,8 @@ LexerKeyword lyxrcTags[] = {
        { "\\print_landscape_flag", LyXRC::RC_PRINTLANDSCAPEFLAG },
        { "\\print_paper_dimension_flag", LyXRC::RC_PRINTPAPERDIMENSIONFLAG },
        { "\\print_paper_flag", LyXRC::RC_PRINTPAPERFLAG },
+       { "\\pygmentize_command", LyXRC::RC_PYGMENTIZE_COMMAND },
+       { "\\respect_os_kbd_language", LyXRC::RC_RESPECT_OS_KBD_LANGUAGE },
        { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
        { "\\save_origin", LyXRC::RC_SAVE_ORIGIN },
        { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
@@ -168,6 +175,8 @@ LexerKeyword lyxrcTags[] = {
        { "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES },
        { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
        { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
+       { "\\screen_limit", LyXRC::RC_SCREEN_LIMIT },
+       { "\\screen_width", LyXRC::RC_SCREEN_WIDTH },
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
        { "\\scroll_below_document", LyXRC::RC_SCROLL_BELOW_DOCUMENT },
        { "\\scroll_wheel_zoom", LyXRC::RC_SCROLL_WHEEL_ZOOM },
@@ -192,13 +201,13 @@ LexerKeyword lyxrcTags[] = {
        { "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
        { "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
        { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
-       { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
-       { "\\use_qimage", LyXRC::RC_USE_QIMAGE },
+       { "\\use_native_filedialog", LyXRC::RC_USE_NATIVE_FILEDIALOG },
        // 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_initials", LyXRC::RC_USER_INITIALS },
        { "\\user_name", LyXRC::RC_USER_NAME },
        { "\\view_dvi_paper_option", LyXRC::RC_VIEWDVI_PAPEROPTION },
        // compatibility with versions older than 1.4.0 only
@@ -210,158 +219,6 @@ LexerKeyword lyxrcTags[] = {
 
 const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
 
-} // namespace anon
-
-
-LyXRC::LyXRC()
-{
-       setDefaults();
-}
-
-
-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 = ".";
-       print_landscape_flag = "-t landscape";
-       print_paper_flag = "-t";
-       print_paper_dimension_flag = "-T";
-       document_path.erase();
-       view_dvi_paper_option.erase();
-       default_view_format = "pdf2";
-       default_otf_view_format = "pdf4";
-       chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
-       bibtex_command = "automatic";
-       fontenc = "default";
-       index_command = "makeindex -c -q";
-       nomencl_command = "makeindex -s nomencl.ist";
-       dpi = 75;
-       // Because a screen is typically wider than a piece of paper:
-       zoom = 150;
-       allow_geometry_session = true;
-       // Default LaTeX font size:
-       font_sizes[FONT_SIZE_TINY] = "5.0";
-       font_sizes[FONT_SIZE_SCRIPT] = "7.0";
-       font_sizes[FONT_SIZE_FOOTNOTE] = "8.0";
-       font_sizes[FONT_SIZE_SMALL] = "9.0";
-       font_sizes[FONT_SIZE_NORMAL] = "10.0";
-       font_sizes[FONT_SIZE_LARGE] = "12.0";
-       font_sizes[FONT_SIZE_LARGER] = "14.4";
-       font_sizes[FONT_SIZE_LARGEST] = "17.26";
-       font_sizes[FONT_SIZE_HUGE] = "20.74";
-       font_sizes[FONT_SIZE_HUGER] = "24.88";
-       use_scalable_fonts = true;
-       roman_font_name = "";
-       sans_font_name = "";
-       typewriter_font_name = "";
-       autosave = 300;
-       auto_region_delete = true;
-       auto_reset_options = false;
-       plaintext_linelen = 65;
-       mouse_wheel_speed = 1.0;
-       num_lastfiles = 20;
-       check_lastfiles = true;
-       use_lastfilepos = true;
-       load_session = false;
-       make_backup = true;
-       save_compressed = false;
-       save_origin = false;
-       backupdir_path.erase();
-       display_graphics = true;
-       // Spellchecker settings:
-// FIXME: this check should test the target platform (darwin)
-#if defined(USE_MACOSX_PACKAGING)
-       spellchecker = "native";
-#elif defined(USE_ASPELL)
-       spellchecker = "aspell";
-#elif defined(USE_HUNSPELL)
-       spellchecker = "hunspell";
-#else
-       spellchecker = "aspell";
-#endif
-       spellchecker_accept_compound = false;
-       spellcheck_continuously = false;
-       completion_minlength = 6;
-       spellcheck_notes = true;
-       use_kbmap = false;
-       visual_cursor = false;
-       auto_number = true;
-       mark_foreign_language = true;
-       language_auto_begin = true;
-       language_auto_end = true;
-       language_global_options = true;
-       language_package_selection = LP_AUTO;
-       language_custom_package = "\\usepackage{babel}";
-       language_command_begin = "\\selectlanguage{$$lang}";
-       language_command_local = "\\foreignlanguage{$$lang}{";
-       sort_layouts = false;
-       group_layouts = true;
-       gui_language = "auto";
-       show_banner = true;
-       windows_style_tex_paths = false;
-       tex_allows_spaces = false;
-       date_insert_format = "%x";
-       cursor_follows_scrollbar = false;
-       scroll_below_document = false;
-       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
-       paragraph_markers = false;
-       mac_dontswap_ctrl_meta = false;
-       mac_like_cursor_movement = false;
-       macro_edit_style = MACRO_EDIT_INLINE_BOX;
-       dialogs_iconify_with_main = false;
-       preview = PREVIEW_OFF;
-       preview_hashed_labels  = false;
-       preview_scale_factor = 1.0;
-       use_converter_cache = true;
-       use_converter_needauth_forbidden = true;
-       use_converter_needauth = true;
-       use_system_colors = false;
-       use_tooltip = true;
-       use_pixmap_cache = false;
-       use_qimage = true;
-       converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
-       user_name = to_utf8(support::user_name());
-       user_email = to_utf8(support::user_email());
-       open_buffers_in_tabs = true;
-       single_close_tab_button = false;
-       single_instance = true;
-       forward_search_dvi = string();
-       forward_search_pdf = string();
-       export_overwrite = NO_FILES;
-
-       // Fullscreen settings
-       full_screen_limit = false;
-       full_screen_toolbars = true;
-       full_screen_tabbar = true;
-       full_screen_menubar = true;
-       full_screen_statusbar = true;
-       full_screen_scrollbar = true;
-       full_screen_width = 700;
-
-       completion_cursor_text = true;
-       completion_popup_math = true;
-       completion_popup_text = false;
-       completion_popup_delay = 2.0;
-       completion_popup_after_complete = true;
-       autocorrection_math = false;
-       completion_inline_math = true;
-       completion_inline_text = false;
-       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;
-}
-
-
-namespace {
 
 void oldFontFormat(string & family, string & foundry)
 {
@@ -373,7 +230,7 @@ void oldFontFormat(string & family, string & foundry)
                foundry.erase();
 }
 
-} // namespace anon
+} // namespace
 
 
 bool LyXRC::read(FileName const & filename, bool check_format)
@@ -401,6 +258,8 @@ bool LyXRC::read(FileName const & filename, bool check_format)
                lexrc2.setFile(tempfile);
                LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
                retval = read(lexrc2, check_format);
+               if (retval == FormatMismatch)
+                       LYXERR0("Conversion failed for " << filename.absFileName());
        }
        return retval == ReadOK;
 }
@@ -426,7 +285,7 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                return ReadError;
 
        // format prior to 2.0 and introduction of format tag
-       unsigned int format = 0;
+       unsigned int rc_format = 0;
 
        while (lexrc.isOK()) {
                // By using two switches we take advantage of the compiler
@@ -449,14 +308,14 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                switch (static_cast<LyXRCTags>(le)) {
                case RC_LYXRCFORMAT:
                        if (lexrc.next())
-                               format = lexrc.getInteger();
+                               rc_format = lexrc.getInteger();
                        break;
                case RC_INPUT: // Include file
                        if (lexrc.next()) {
                                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());
                                }
@@ -526,10 +385,6 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        break;
 
-               case RC_FONT_ENCODING:
-                       lexrc >> fontenc;
-                       break;
-
                case RC_PRINTLANDSCAPEFLAG:
                        lexrc >> print_landscape_flag;
                        break;
@@ -542,6 +397,12 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> print_paper_flag;
                        break;
 
+               case RC_PYGMENTIZE_COMMAND:
+                       if (lexrc.next(true)) {
+                               pygmentize_command = lexrc.getString();
+                       }
+                       break;
+
                case RC_VIEWDVI_PAPEROPTION:
                        if (lexrc.next())
                                view_dvi_paper_option = lexrc.getString();
@@ -573,6 +434,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());
@@ -608,9 +475,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
 
                case RC_SCREEN_ZOOM:
-                       lexrc >> zoom;
-                       if (zoom < 10)
-                               zoom = 10;
+                       lexrc >> defaultZoom;
+                       if (defaultZoom < 10)
+                               defaultZoom = 10;
                        break;
 
                case RC_GEOMETRY_SESSION:
@@ -618,16 +485,16 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
 
                case RC_SCREEN_FONT_SIZES:
-                       lexrc >> font_sizes[FONT_SIZE_TINY];
-                       lexrc >> font_sizes[FONT_SIZE_SCRIPT];
-                       lexrc >> font_sizes[FONT_SIZE_FOOTNOTE];
-                       lexrc >> font_sizes[FONT_SIZE_SMALL];
-                       lexrc >> font_sizes[FONT_SIZE_NORMAL];
-                       lexrc >> font_sizes[FONT_SIZE_LARGE];
-                       lexrc >> font_sizes[FONT_SIZE_LARGER];
-                       lexrc >> font_sizes[FONT_SIZE_LARGEST];
-                       lexrc >> font_sizes[FONT_SIZE_HUGE];
-                       lexrc >> font_sizes[FONT_SIZE_HUGER];
+                       lexrc >> font_sizes[TINY_SIZE];
+                       lexrc >> font_sizes[SCRIPT_SIZE];
+                       lexrc >> font_sizes[FOOTNOTE_SIZE];
+                       lexrc >> font_sizes[SMALL_SIZE];
+                       lexrc >> font_sizes[NORMAL_SIZE];
+                       lexrc >> font_sizes[LARGE_SIZE];
+                       lexrc >> font_sizes[LARGER_SIZE];
+                       lexrc >> font_sizes[LARGEST_SIZE];
+                       lexrc >> font_sizes[HUGE_SIZE];
+                       lexrc >> font_sizes[HUGER_SIZE];
                        break;
 
                case RC_SCREEN_FONT_SCALABLE:
@@ -780,13 +647,17 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                lexrc.printError("Missing color tag.");
                                break;
                        }
-                       string lyx_name = lexrc.getString();
+                       string const lyx_name = lexrc.getString();
 
                        if (!lexrc.next()) {
                                lexrc.printError("Missing color name for color: `$$Token'");
                                break;
                        }
-                       string x11_name = lexrc.getString();
+                       string const x11_name = lexrc.getString();
+
+                       string x11_darkname = x11_name;
+                       if (lexrc.next())
+                               x11_darkname = lexrc.getString();
 
                        ColorCode const col =
                                lcolor.getFromLyXName(lyx_name);
@@ -795,8 +666,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                            col == Color_ignore)
                                break;
 
-                       if (!lcolor.setColor(col, x11_name))
+                       if (!lcolor.setColor(col, x11_name, x11_darkname))
                                LYXERR0("Bad lyxrc set_color for " << lyx_name);
+                       LYXERR(Debug::LYXRC, "Set " << lyx_name << "(" << col << ") to "
+                              << x11_name << " and " << x11_darkname);
                        break;
                }
 
@@ -806,8 +679,35 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
 
                case RC_SERVERPIPE:
+                       if (lexrc.next()) {
+                               string userdir = package().user_support().absFileName();
+                               if (userdir.back() == '/')
+                                 userdir.pop_back();
+                               lyxpipes = subst(os::internal_path(lexrc.getString()), "$$UserDir",
+                                       userdir);
+                       }
+                       break;
+
+               case RC_CITATION_SEARCH:
+                       lexrc >> citation_search;
+                       break;
+
+               case RC_CITATION_SEARCH_PATTERN:
                        if (lexrc.next())
-                               lyxpipes = os::internal_path(lexrc.getString());
+                               citation_search_pattern = lexrc.getString();
+                       break;
+
+               case RC_CITATION_SEARCH_VIEW:
+                       if (lexrc.next())
+                               citation_search_view = lexrc.getString();
+                       break;
+
+               case RC_CT_ADDITIONS_UNDERLINED:
+                       lexrc >> ct_additions_underlined;
+                       break;
+
+               case RC_CT_MARKUP_COPIED:
+                       lexrc >> ct_markup_copied;
                        break;
 
                case RC_CURSOR_FOLLOWS_SCROLLBAR:
@@ -855,18 +755,15 @@ 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;
                case RC_USE_TOOLTIP:
                        lexrc >> use_tooltip;
                        break;
-               case RC_USE_PIXMAP_CACHE:
-                       lexrc >> use_pixmap_cache;
-                       break;
-               case RC_USE_QIMAGE:
-                       lexrc >> use_qimage;
-                       break;
                case RC_SPELLCHECKER:
                        lexrc >> spellchecker;
                        break;
@@ -895,16 +792,13 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        if (lexrc.next())
                                backupdir_path = os::internal_path(lexrc.getString());
                        break;
-               case RC_DEFAULT_DECIMAL_POINT:
-                       lexrc >> default_decimal_point;
+               case RC_DEFAULT_DECIMAL_SEP:
+                       lexrc >> default_decimal_sep;
                        break;
                case RC_DEFAULT_LENGTH_UNIT:
                        if (lexrc.next())
                                default_length_unit = (Length::UNIT) lexrc.getInteger();
                        break;
-               case RC_DATE_INSERT_FORMAT:
-                       lexrc >> date_insert_format;
-                       break;
                case RC_LANGUAGE_CUSTOM_PACKAGE:
                        lexrc >> language_custom_package;
                        break;
@@ -944,6 +838,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_LANGUAGE_COMMAND_LOCAL:
                        lexrc >> language_command_local;
                        break;
+               case RC_RESPECT_OS_KBD_LANGUAGE:
+                       lexrc >> respect_os_kbd_language;
+                       break;
                case RC_VISUAL_CURSOR:
                        lexrc >> visual_cursor;
                        break;
@@ -987,7 +884,7 @@ 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: {
@@ -1027,6 +924,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                        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 `"
@@ -1038,9 +937,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                if (theConverters().formatIsUsed(format))
                                        LYXERR0("Can't delete format " << format);
                                else
-                                       formats.erase(format);
+                                       theFormats().erase(format);
                        } else {
-                               formats.add(format, extensions, prettyname,
+                               theFormats().add(format, extensions, prettyname,
                                            shortcut, viewer, editor, mime, flgs);
                        }
                        break;
@@ -1066,6 +965,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> default_otf_view_format;
                        break;
 
+               case RC_DEFAULT_PLATEX_VIEW_FORMAT:
+                       lexrc >> default_platex_view_format;
+                       break;
+
                case RC_DEFAULT_VIEW_FORMAT:
                        lexrc >> default_view_format;
                        break;
@@ -1108,6 +1011,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_USER_EMAIL:
                        lexrc >> user_email;
                        break;
+               case RC_USER_INITIALS:
+                       lexrc >> user_initials;
+                       break;
 
                case RC_PATH_PREFIX:
                        lexrc >> path_prefix;
@@ -1132,8 +1038,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_GROUP_LAYOUTS:
                        lexrc >> group_layouts;
                        break;
-               case RC_FULL_SCREEN_LIMIT:
-                       lexrc >> full_screen_limit;
+               case RC_SCREEN_LIMIT:
+                       lexrc >> screen_limit;
                        break;
                case RC_FULL_SCREEN_TOOLBARS:
                        lexrc >> full_screen_toolbars;
@@ -1150,11 +1056,15 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_FULL_SCREEN_MENUBAR:
                        lexrc >> full_screen_menubar;
                        break;
-               case RC_FULL_SCREEN_WIDTH:
-                       lexrc >> full_screen_width;
+               case RC_SCREEN_WIDTH:
+                       lexrc >> screen_width;
                        break;
                case RC_OPEN_BUFFERS_IN_TABS:
                        lexrc >> open_buffers_in_tabs;
+#ifdef USE_MACOSX_PACKAGING
+                       if (appleUserTabbingPreferenceAlways())
+                               open_buffers_in_tabs = true;
+#endif
                        break;
                case RC_SINGLE_CLOSE_TAB_BUTTON:
                        lexrc >> single_close_tab_button;
@@ -1209,18 +1119,48 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> mouse_middlebutton_paste;
                        break;
 
+               case RC_BOOKMARKS_VISIBILITY:
+                       if (lexrc.next()) {
+                               string const tmp = lexrc.getString();
+                               if (tmp == "none")
+                                       bookmarks_visibility = BMK_NONE;
+                               else if (tmp == "margin")
+                                       bookmarks_visibility = BMK_MARGIN;
+                               else if (tmp == "inline")
+                                       bookmarks_visibility = BMK_INLINE;
+                               else {
+                                       bookmarks_visibility = BMK_NONE;
+                                       LYXERR0("Unrecognized bookmark visibility " << tmp <<'"');
+                               }
+                       }
+                       break;
+
+               case RC_DRAW_STRATEGY:
+                       if (lexrc.next()) {
+                               string const tmp = lexrc.getString();
+                               if (tmp == "partial")
+                                       draw_strategy = DS_PARTIAL;
+                               else if (tmp == "backingstore")
+                                       draw_strategy = DS_BACKINGSTORE;
+                               else {
+                                       draw_strategy = DS_PARTIAL;
+                                       LYXERR0("Unrecognized draw strategy " << tmp <<'"');
+                               }
+                       }
+                       break;
+
                case RC_LAST:
                        break; // this is just a dummy
                }
 
                // This is triggered the first time through the loop unless
                // we hit a format tag.
-               if (check_format && format != LYXRC_FILEFORMAT)
+               if (check_format && rc_format != LYXRC_FILEFORMAT)
                        return FormatMismatch;
        }
 
        /// Update converters data-structures
-       theConverters().update(formats);
+       theConverters().update(theFormats());
        theConverters().buildGraph();
        theBufferList().invalidateConverterCache();
 
@@ -1271,7 +1211,7 @@ namespace {
                             "\"", "\\\"");
        }
 
-}
+} // namespace
 
 
 void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
@@ -1308,7 +1248,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) {
@@ -1325,7 +1265,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) {
@@ -1333,6 +1273,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) {
@@ -1341,6 +1282,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) {
@@ -1351,6 +1293,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) {
@@ -1362,6 +1305,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) {
@@ -1370,6 +1314,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) {
@@ -1381,6 +1326,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) {
@@ -1389,6 +1335,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) {
@@ -1397,6 +1344,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
@@ -1408,6 +1356,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_CHKTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    chktex_command != system_lyxrc.chktex_command) {
@@ -1415,6 +1364,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();
@@ -1427,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_BIBTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    bibtex_command != system_lyxrc.bibtex_command) {
@@ -1434,6 +1385,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) {
@@ -1441,6 +1393,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();
@@ -1453,6 +1419,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) {
@@ -1460,6 +1427,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) {
@@ -1467,6 +1435,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) {
@@ -1474,6 +1443,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) {
@@ -1481,6 +1451,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_PYGMENTIZE_COMMAND:
+               if (ignore_system_lyxrc ||
+                   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).
@@ -1490,6 +1469,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                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 "
@@ -1497,6 +1477,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) {
@@ -1504,6 +1485,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) {
@@ -1512,6 +1494,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) {
@@ -1520,6 +1503,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SERVERPIPE:
                if (ignore_system_lyxrc ||
                    lyxpipes != system_lyxrc.lyxpipes) {
@@ -1528,25 +1512,22 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_DATE_INSERT_FORMAT:
-               if (ignore_system_lyxrc ||
-                   date_insert_format != system_lyxrc.date_insert_format) {
-                       os << "\\date_insert_format \"" << date_insert_format
-                          << "\"\n";
-               }
-               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_USER_INITIALS:
+               os << "\\user_initials \"" << user_initials << "\"\n";
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_SHOW_BANNER:
                if (ignore_system_lyxrc ||
                    show_banner != system_lyxrc.show_banner) {
@@ -1554,7 +1535,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) {
@@ -1574,7 +1555,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 !=
@@ -1584,7 +1565,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) {
@@ -1593,7 +1574,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) {
@@ -1602,7 +1583,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_NEEDAUTH_FORBIDDEN:
                if (ignore_system_lyxrc ||
                    use_converter_needauth_forbidden != system_lyxrc.use_converter_needauth_forbidden) {
@@ -1611,7 +1592,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_NEEDAUTH:
                if (ignore_system_lyxrc ||
                    use_converter_needauth != system_lyxrc.use_converter_needauth) {
@@ -1620,7 +1601,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_CONVERTER_CACHE_MAXAGE:
                if (ignore_system_lyxrc ||
                    converter_cache_maxage != system_lyxrc.converter_cache_maxage) {
@@ -1633,7 +1614,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) {
@@ -1642,7 +1623,7 @@ 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) {
@@ -1652,7 +1633,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SCREEN_DPI:
                if (ignore_system_lyxrc ||
                    dpi != system_lyxrc.dpi) {
@@ -1660,13 +1641,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) {
@@ -1675,6 +1658,57 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_CITATION_SEARCH:
+               if (ignore_system_lyxrc ||
+                   citation_search != system_lyxrc.citation_search) {
+                       os << "# Set to true to use script to search"
+                          << " local disk for citation targets.\n"
+                          << "\\citation_search "
+                          << convert<string>(citation_search)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_CITATION_SEARCH_VIEW:
+               if (ignore_system_lyxrc ||
+                   citation_search_view != system_lyxrc.citation_search_view) {
+                       os << "\\citation_search_view \""
+                          << citation_search_view << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_CITATION_SEARCH_PATTERN:
+               if (ignore_system_lyxrc ||
+                   citation_search_pattern != system_lyxrc.citation_search_pattern) {
+                       os << "\\citation_search_pattern \""
+                          << citation_search_pattern << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_CT_ADDITIONS_UNDERLINED:
+               if (ignore_system_lyxrc ||
+                   ct_additions_underlined
+                   != system_lyxrc.ct_additions_underlined) {
+                       os << "\\ct_additions_underlined "
+                          << convert<string>(ct_additions_underlined) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_CT_MARKUP_COPIED:
+               if (ignore_system_lyxrc ||
+                   ct_markup_copied
+                   != system_lyxrc.ct_markup_copied) {
+                       os << "\\ct_markup_copied "
+                          << convert<string>(ct_markup_copied) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_CURSOR_FOLLOWS_SCROLLBAR:
                if (ignore_system_lyxrc ||
                    cursor_follows_scrollbar
@@ -1684,6 +1718,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
@@ -1693,6 +1728,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
@@ -1702,6 +1738,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_PARAGRAPH_MARKERS:
                if (ignore_system_lyxrc ||
                        paragraph_markers
@@ -1711,6 +1748,27 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_BOOKMARKS_VISIBILITY:
+               if (ignore_system_lyxrc ||
+                       bookmarks_visibility != system_lyxrc.bookmarks_visibility) {
+                       string status;
+                       switch (bookmarks_visibility) {
+                       case BMK_NONE:
+                               status = "none";
+                               break;
+                       case BMK_INLINE:
+                               status = "inline";
+                               break;
+                       case BMK_MARGIN:
+                               status = "margin";
+                               break;
+                       }
+                       os << "\\experimental:bookmarks_visibility " << status << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_MAC_DONTSWAP_CTRL_META:
                if (ignore_system_lyxrc ||
                    mac_dontswap_ctrl_meta
@@ -1720,6 +1778,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MAC_LIKE_CURSOR_MOVEMENT:
                if (ignore_system_lyxrc ||
                    mac_like_cursor_movement
@@ -1729,6 +1788,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_MACRO_EDIT_STYLE:
                if (ignore_system_lyxrc ||
                    macro_edit_style
@@ -1742,6 +1802,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
@@ -1751,6 +1812,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SCREEN_FONT_ROMAN:
                if (ignore_system_lyxrc ||
                    roman_font_name != system_lyxrc.roman_font_name) {
@@ -1759,6 +1821,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) {
@@ -1767,6 +1830,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) {
@@ -1775,6 +1839,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) {
@@ -1783,6 +1848,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) {
@@ -1791,6 +1857,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) {
@@ -1799,7 +1866,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) {
@@ -1809,57 +1876,60 @@ 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]
-                   != system_lyxrc.font_sizes[FONT_SIZE_TINY] ||
-                   font_sizes[FONT_SIZE_SCRIPT]
-                   != system_lyxrc.font_sizes[FONT_SIZE_SCRIPT] ||
-                   font_sizes[FONT_SIZE_FOOTNOTE]
-                   != system_lyxrc.font_sizes[FONT_SIZE_FOOTNOTE] ||
-                   font_sizes[FONT_SIZE_SMALL]
-                   != system_lyxrc.font_sizes[FONT_SIZE_SMALL] ||
-                   font_sizes[FONT_SIZE_NORMAL]
-                   != system_lyxrc.font_sizes[FONT_SIZE_NORMAL] ||
-                   font_sizes[FONT_SIZE_LARGE]
-                   != system_lyxrc.font_sizes[FONT_SIZE_LARGE] ||
-                   font_sizes[FONT_SIZE_LARGER]
-                   != system_lyxrc.font_sizes[FONT_SIZE_LARGER] ||
-                   font_sizes[FONT_SIZE_LARGEST]
-                   != system_lyxrc.font_sizes[FONT_SIZE_LARGEST] ||
-                   font_sizes[FONT_SIZE_HUGE]
-                   != system_lyxrc.font_sizes[FONT_SIZE_HUGE] ||
-                   font_sizes[FONT_SIZE_HUGER]
-                   != system_lyxrc.font_sizes[FONT_SIZE_HUGER]) {
+                   font_sizes[TINY_SIZE]
+                   != system_lyxrc.font_sizes[TINY_SIZE] ||
+                   font_sizes[SCRIPT_SIZE]
+                   != system_lyxrc.font_sizes[SCRIPT_SIZE] ||
+                   font_sizes[FOOTNOTE_SIZE]
+                   != system_lyxrc.font_sizes[FOOTNOTE_SIZE] ||
+                   font_sizes[SMALL_SIZE]
+                   != system_lyxrc.font_sizes[SMALL_SIZE] ||
+                   font_sizes[NORMAL_SIZE]
+                   != system_lyxrc.font_sizes[NORMAL_SIZE] ||
+                   font_sizes[LARGE_SIZE]
+                   != system_lyxrc.font_sizes[LARGE_SIZE] ||
+                   font_sizes[LARGER_SIZE]
+                   != system_lyxrc.font_sizes[LARGER_SIZE] ||
+                   font_sizes[LARGEST_SIZE]
+                   != system_lyxrc.font_sizes[LARGEST_SIZE] ||
+                   font_sizes[HUGE_SIZE]
+                   != system_lyxrc.font_sizes[HUGE_SIZE] ||
+                   font_sizes[HUGER_SIZE]
+                   != system_lyxrc.font_sizes[HUGER_SIZE]) {
                        streamsize old_prec = os.precision();
                        os.setf(ios::fixed);
                        os.precision(2);
                        os << "\\screen_font_sizes"
-                          << ' ' << font_sizes[FONT_SIZE_TINY]
-                          << ' ' << font_sizes[FONT_SIZE_SCRIPT]
-                          << ' ' << font_sizes[FONT_SIZE_FOOTNOTE]
-                          << ' ' << font_sizes[FONT_SIZE_SMALL]
-                          << ' ' << font_sizes[FONT_SIZE_NORMAL]
-                          << ' ' << font_sizes[FONT_SIZE_LARGE]
-                          << ' ' << font_sizes[FONT_SIZE_LARGER]
-                          << ' ' << font_sizes[FONT_SIZE_LARGEST]
-                          << ' ' << font_sizes[FONT_SIZE_HUGE]
-                          << ' ' << font_sizes[FONT_SIZE_HUGER]
+                          << ' ' << font_sizes[TINY_SIZE]
+                          << ' ' << font_sizes[SCRIPT_SIZE]
+                          << ' ' << font_sizes[FOOTNOTE_SIZE]
+                          << ' ' << font_sizes[SMALL_SIZE]
+                          << ' ' << font_sizes[NORMAL_SIZE]
+                          << ' ' << font_sizes[LARGE_SIZE]
+                          << ' ' << font_sizes[LARGER_SIZE]
+                          << ' ' << font_sizes[LARGEST_SIZE]
+                          << ' ' << font_sizes[HUGE_SIZE]
+                          << ' ' << font_sizes[HUGER_SIZE]
                           << '\n';
                        os.precision(old_prec);
                        os.unsetf(ios::fixed);
                }
                if (tag != RC_LAST)
                        break;
-       case RC_FULL_SCREEN_LIMIT:
+               // fall through
+       case RC_SCREEN_LIMIT:
                if (ignore_system_lyxrc ||
-                   full_screen_limit != system_lyxrc.full_screen_limit) {
-                       os << "\\fullscreen_limit "
-                          << convert<string>(full_screen_limit)
+                   screen_limit != system_lyxrc.screen_limit) {
+                       os << "\\screen_limit "
+                          << convert<string>(screen_limit)
                           << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_TOOLBARS:
                if (ignore_system_lyxrc ||
                    full_screen_toolbars != system_lyxrc.full_screen_toolbars) {
@@ -1869,6 +1939,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_SCROLLBAR:
                if (ignore_system_lyxrc ||
                    full_screen_scrollbar != system_lyxrc.full_screen_scrollbar) {
@@ -1878,6 +1949,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_FULL_SCREEN_STATUSBAR:
                if (ignore_system_lyxrc ||
                    full_screen_statusbar != system_lyxrc.full_screen_statusbar) {
@@ -1887,6 +1959,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_TABBAR:
                if (ignore_system_lyxrc ||
                    full_screen_tabbar != system_lyxrc.full_screen_tabbar) {
@@ -1896,6 +1969,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) {
@@ -1905,15 +1979,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_FULL_SCREEN_WIDTH:
+               // fall through
+       case RC_SCREEN_WIDTH:
                if (ignore_system_lyxrc ||
-                   full_screen_width != system_lyxrc.full_screen_width) {
-                       os << "\\fullscreen_width "
-                          << convert<string>(full_screen_width)
+                   screen_width != system_lyxrc.screen_width) {
+                       os << "\\screen_width "
+                          << screen_width.asString()
                           << '\n';
                }
                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) {
@@ -1923,6 +1999,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SINGLE_CLOSE_TAB_BUTTON:
                if (ignore_system_lyxrc ||
                    single_close_tab_button != system_lyxrc.single_close_tab_button) {
@@ -1932,6 +2009,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_SINGLE_INSTANCE:
                if (ignore_system_lyxrc ||
                    single_instance != system_lyxrc.single_instance) {
@@ -1941,6 +2019,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) {
@@ -1948,6 +2027,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) {
@@ -1955,20 +2035,42 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
+       case RC_DRAW_STRATEGY:
+               if (ignore_system_lyxrc ||
+                       draw_strategy != system_lyxrc.draw_strategy) {
+                       string status;
+                       switch (draw_strategy) {
+                       case DS_PARTIAL:
+                               status = "partial";
+                               break;
+                       case DS_BACKINGSTORE:
+                               status = "backingstore";
+                               break;
+                       }
+                       os << "\\draw_strategy " << status << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
 
        os << "\n#\n"
-                       << "# COLOR SECTION ###################################\n"
-                       << "#\n\n";
+               << "# 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);
-                       string const col = lcolor.getX11Name(lc);
+                       string const col = lcolor.getAllX11HexNames(lc).first;
+                       string const darkcol = lcolor.getAllX11HexNames(lc).second;
                        if (ignore_system_lyxrc
-                           || col != system_lcolor.getX11Name(lc)) {
+                           || col != system_lcolor.getAllX11HexNames(lc).first
+                           || darkcol != system_lcolor.getAllX11HexNames(lc).second) {
                                os << "\\set_color \""
                                   << lcolor.getLyXName(lc) << "\" \""
-                                  << col << "\"\n";
+                                  << col << "\" \""
+                                  << darkcol << "\"\n";
                        }
                }
                if (tag != RC_LAST)
@@ -1978,6 +2080,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                 << "# PRINTER SECTION ###################################\n"
                 << "#\n\n";
 
+       // fall through
        case RC_PRINTLANDSCAPEFLAG:
                if (ignore_system_lyxrc ||
                    print_landscape_flag != system_lyxrc.print_landscape_flag) {
@@ -1986,7 +2089,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_PRINTPAPERFLAG:
                if (ignore_system_lyxrc ||
                    print_paper_flag != system_lyxrc.print_paper_flag) {
@@ -1995,7 +2098,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
@@ -2010,6 +2113,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                 << "# TEX SECTION #######################################\n"
                 << "#\n\n";
 
+       // fall through
        case RC_TEXINPUTS_PREFIX:
                if (ignore_system_lyxrc ||
                    texinputs_prefix != system_lyxrc.texinputs_prefix) {
@@ -2017,19 +2121,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
-       case RC_FONT_ENCODING:
-               if (ignore_system_lyxrc ||
-                   fontenc != system_lyxrc.fontenc) {
-                       os << "\\font_encoding \"" << fontenc << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
+               // fall through
                os << "\n#\n"
                   << "# FILE SECTION ######################################\n"
                   << "#\n\n";
-
+       // fall through
        case RC_DOCUMENTPATH:
                if (ignore_system_lyxrc ||
                    document_path != system_lyxrc.document_path) {
@@ -2038,6 +2134,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) {
@@ -2046,6 +2143,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) {
@@ -2054,6 +2152,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) {
@@ -2061,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_MOUSE_MIDDLEBUTTON_PASTE:
                if (ignore_system_lyxrc ||
                    mouse_middlebutton_paste != system_lyxrc.mouse_middlebutton_paste) {
@@ -2069,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_COMPLETION_INLINE_DELAY:
                if (ignore_system_lyxrc ||
                    completion_inline_delay != system_lyxrc.completion_inline_delay) {
@@ -2076,6 +2177,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) {
@@ -2084,6 +2186,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) {
@@ -2092,6 +2195,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) {
@@ -2100,6 +2204,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) {
@@ -2108,6 +2213,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) {
@@ -2115,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_COMPLETION_POPUP_MATH:
                if (ignore_system_lyxrc ||
                    completion_popup_math != system_lyxrc.completion_popup_math) {
@@ -2123,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_TEXT:
                if (ignore_system_lyxrc ||
                    completion_popup_text != system_lyxrc.completion_popup_text) {
@@ -2131,6 +2239,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) {
@@ -2139,6 +2248,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
@@ -2148,6 +2258,7 @@ 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) {
@@ -2156,14 +2267,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
-               case RC_NUMLASTFILES:
+               // fall through
+       case RC_NUMLASTFILES:
                if (ignore_system_lyxrc ||
                    num_lastfiles != system_lyxrc.num_lastfiles) {
                        os << "\\num_lastfiles " << num_lastfiles << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_CHECKLASTFILES:
                if (ignore_system_lyxrc ||
                    check_lastfiles != system_lyxrc.check_lastfiles) {
@@ -2172,6 +2284,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) {
@@ -2180,6 +2293,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) {
@@ -2188,6 +2302,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) {
@@ -2196,6 +2311,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) {
@@ -2204,6 +2320,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) {
@@ -2212,6 +2329,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) {
@@ -2219,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_MAKE_BACKUP:
                if (ignore_system_lyxrc ||
                    make_backup != system_lyxrc.make_backup) {
@@ -2226,6 +2345,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) {
@@ -2233,6 +2353,7 @@ 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) {
@@ -2240,6 +2361,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_BACKUPDIR_PATH:
                if (ignore_system_lyxrc ||
                    backupdir_path != system_lyxrc.backupdir_path) {
@@ -2257,6 +2379,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) {
@@ -2265,6 +2388,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) {
@@ -2273,6 +2397,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) {
@@ -2280,6 +2405,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) {
@@ -2289,6 +2425,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) {
@@ -2298,37 +2435,21 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_USE_PIXMAP_CACHE:
-               if (ignore_system_lyxrc ||
-                   use_pixmap_cache != system_lyxrc.use_pixmap_cache) {
-                       os << "\\use_pixmap_cache "
-                          << convert<string>(use_pixmap_cache)
-                          << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
-       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;
+               // fall through
 
                os << "\n#\n"
                   << "# LANGUAGE SUPPORT SECTION ##########################\n"
                   << "#\n\n";
 
-       case RC_DEFAULT_DECIMAL_POINT:
+       // fall through
+       case RC_DEFAULT_DECIMAL_SEP:
                if (ignore_system_lyxrc ||
-                   default_decimal_point != system_lyxrc.default_decimal_point) {
-                       os << "\\default_decimal_point " << default_decimal_point << '\n';
+                   default_decimal_sep != system_lyxrc.default_decimal_sep) {
+                       os << "\\default_decimal_point \"" << default_decimal_sep << "\"" << '\n';
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_DEFAULT_LENGTH_UNIT:
                if (ignore_system_lyxrc ||
                    default_length_unit != system_lyxrc.default_length_unit) {
@@ -2336,7 +2457,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_SPELLCHECKER:
                if (ignore_system_lyxrc ||
                    spellchecker != system_lyxrc.spellchecker) {
@@ -2344,7 +2465,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) {
@@ -2353,7 +2474,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) {
@@ -2362,7 +2483,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_VISUAL_CURSOR:
                if (ignore_system_lyxrc ||
                        visual_cursor != system_lyxrc.visual_cursor) {
@@ -2370,6 +2491,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_CLOSE_BUFFER_WITH_LAST_VIEW:
                if (ignore_system_lyxrc ||
                        close_buffer_with_last_view != system_lyxrc.close_buffer_with_last_view) {
@@ -2378,6 +2500,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_LANGUAGE_CUSTOM_PACKAGE:
                if (ignore_system_lyxrc ||
                    language_custom_package != system_lyxrc.language_custom_package) {
@@ -2386,6 +2509,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
@@ -2396,6 +2520,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) {
@@ -2417,6 +2542,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
@@ -2427,6 +2553,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
@@ -2436,6 +2563,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
@@ -2446,6 +2574,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) {
@@ -2454,6 +2583,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) {
@@ -2462,6 +2592,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
@@ -2469,6 +2600,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        os << "\\mark_foreign_language " <<
                                convert<string>(mark_foreign_language) << '\n';
                }
+               // fall through
+       case RC_RESPECT_OS_KBD_LANGUAGE:
+               if (ignore_system_lyxrc ||
+                   respect_os_kbd_language
+                   != system_lyxrc.respect_os_kbd_language) {
+                       os << "\\respect_os_kbd_language " <<
+                               convert<string>(respect_os_kbd_language) << '\n';
+               }
+               //fall through
                if (tag != RC_LAST)
                        break;
 
@@ -2476,6 +2616,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) {
@@ -2483,6 +2624,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_GUI_LANGUAGE:
                if (ignore_system_lyxrc ||
                    gui_language != system_lyxrc.gui_language) {
@@ -2490,6 +2632,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) {
@@ -2509,7 +2652,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) {
@@ -2537,12 +2680,13 @@ 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->extensions() != cit->extensions() ||
                            format->prettyname() != cit->prettyname() ||
@@ -2552,6 +2696,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                            format->documentFormat() != cit->documentFormat() ||
                            format->vectorFormat() != cit->vectorFormat() ||
                            format->inExportMenu() != cit->inExportMenu() ||
+                           format->noMenu() != cit->noMenu() ||
                            format->mime() != cit->mime()) {
                                os << "\\format \"" << cit->name() << "\" \""
                                   << cit->extensions() << "\" \""
@@ -2575,13 +2720,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
 
                // 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";
                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();
@@ -2607,6 +2753,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                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();
@@ -2632,6 +2779,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                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)
@@ -2640,13 +2788,25 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                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) {
+               if ((ignore_system_lyxrc ||
+                       default_view_format != system_lyxrc.default_view_format)
+                       && !default_view_format.empty()) {
                        os << "\\default_view_format " << default_view_format << '\n';
                }
                if (tag != RC_LAST)
                        break;
+               // fall through
        case RC_VIEWER:
                // Ignore it
                if (tag != RC_LAST)
@@ -2656,6 +2816,7 @@ 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();
@@ -2680,7 +2841,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << "\" \"" << cit->to() << "\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
-
+               // fall through
        case RC_COPIER:
                if (tag == RC_LAST)
                        os << "\n#\n"
@@ -2742,6 +2903,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_BIBTEX_ALTERNATIVES:
        case LyXRC::RC_BIBTEX_COMMAND:
        case LyXRC::RC_BINDFILE:
+       case LyXRC::RC_BOOKMARKS_VISIBILITY:
+       case LyXRC::RC_CITATION_SEARCH:
+       case LyXRC::RC_CITATION_SEARCH_PATTERN:
+       case LyXRC::RC_CITATION_SEARCH_VIEW:
        case LyXRC::RC_CHECKLASTFILES:
        case LyXRC::RC_COMPLETION_CURSOR_TEXT:
        case LyXRC::RC_COMPLETION_INLINE_DELAY:
@@ -2759,11 +2924,13 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_CONVERTER:
        case LyXRC::RC_CONVERTER_CACHE_MAXAGE:
        case LyXRC::RC_COPIER:
+       case LyXRC::RC_CT_ADDITIONS_UNDERLINED:
+       case LyXRC::RC_CT_MARKUP_COPIED:
        case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR:
        case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
-       case LyXRC::RC_DATE_INSERT_FORMAT:
        case LyXRC::RC_GUI_LANGUAGE:
        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:
@@ -2775,10 +2942,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                                package().document_dir() = FileName(lyxrc.document_path);
                }
                // fall through
+       case LyXRC::RC_DRAW_STRATEGY:
        case LyXRC::RC_EDITOR_ALTERNATIVES:
        case LyXRC::RC_ESC_CHARS:
        case LyXRC::RC_EXAMPLEPATH:
-       case LyXRC::RC_FONT_ENCODING:
        case LyXRC::RC_FILEFORMAT:
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
@@ -2786,8 +2953,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:
@@ -2806,18 +2975,27 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_MACRO_EDIT_STYLE:
        case LyXRC::RC_MAKE_BACKUP:
        case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
+       case LyXRC::RC_RESPECT_OS_KBD_LANGUAGE:
        case LyXRC::RC_MOUSE_WHEEL_SPEED:
        case LyXRC::RC_MOUSE_MIDDLEBUTTON_PASTE:
        case LyXRC::RC_NUMLASTFILES:
        case LyXRC::RC_PARAGRAPH_MARKERS:
        case LyXRC::RC_PATH_PREFIX:
                if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
-                       prependEnvPath("PATH", lyxrc_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_PRINTLANDSCAPEFLAG:
@@ -2826,6 +3004,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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:
@@ -2834,8 +3013,21 @@ 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
+               || !std::equal(std::begin(lyxrc_orig.font_sizes), std::end(lyxrc_orig.font_sizes),
+                              std::begin(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));
+               }
+               // fall through
+       case LyXRC::RC_GEOMETRY_SESSION:
        case LyXRC::RC_SERVERPIPE:
        case LyXRC::RC_SET_COLOR:
        case LyXRC::RC_SHOW_BANNER:
@@ -2859,26 +3051,26 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_THESAURUSDIRPATH:
        case LyXRC::RC_UIFILE:
        case LyXRC::RC_USER_EMAIL:
+       case LyXRC::RC_USER_INITIALS:
        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:
        case LyXRC::RC_SORT_LAYOUTS:
-       case LyXRC::RC_FULL_SCREEN_LIMIT:
+       case LyXRC::RC_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_SCREEN_WIDTH:
        case LyXRC::RC_VISUAL_CURSOR:
        case LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW:
        case LyXRC::RC_VIEWER:
@@ -2886,7 +3078,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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_DECIMAL_SEP:
        case LyXRC::RC_DEFAULT_LENGTH_UNIT:
        case LyXRC::RC_SCROLL_WHEEL_ZOOM:
        case LyXRC::RC_CURSOR_WIDTH:
@@ -2895,6 +3087,15 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
 }
 
 
+set<string> LyXRC::getRCs()
+{
+       set<string> res;
+       for (int i = 0; i != lyxrcCount; ++i)
+               res.insert(ltrim(lyxrcTags[i].tag, "\\"));
+       return res;
+}
+
+
 #if 0
 string const LyXRC::getDescription(LyXRCTags tag)
 {
@@ -2990,11 +3191,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Show a small box around a Math Macro with the macro name when the cursor is inside.");
                break;
 
-       case RC_DATE_INSERT_FORMAT:
-               //xgettext:no-c-format
-               str = _("This accepts the normal strftime formats; see man strftime for full details. E.g.\"%A, %e. %B %Y\".");
-               break;
-
        case RC_DEFFILE:
                str = _("Command definition file. Can either specify an absolute path, or LyX will look in its global and local commands/ directories.");
                break;
@@ -3027,10 +3223,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("The path that LyX will set when offering to choose an example. An empty value selects the directory LyX was started from.");
                break;
 
-       case RC_FONT_ENCODING:
-               str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
-               break;
-
        case RC_FILEFORMAT:
                break;
 
@@ -3046,6 +3238,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;
 
@@ -3103,6 +3299,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Select to control the highlighting of words with a language foreign to that of the document.");
                break;
 
+       case RC_RESPECT_OS_KBD_LANGUAGE:
+               str = _("Select to use the current keyboard language, as set from the operating system, as default input language.");
+               break;
+
        case RC_MOUSE_WHEEL_SPEED:
                str = _("The scrolling speed of the mouse wheel.");
                break;
@@ -3276,10 +3476,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Enable the automatic appearance of tool tips in the work area.");
                break;
 
-       case RC_USE_PIXMAP_CACHE:
-               str = _("Enable the pixmap cache that might improve performance on Mac and Windows.");
-               break;
-
        case RC_VIEWDVI_PAPEROPTION:
                _("Specify the paper command to DVI viewer (leave empty or use \"-paper\")");
                break;