]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Avoid full metrics computation with Update:FitCursor
[lyx.git] / src / LyXRC.cpp
index 99289aa1b02fd68de1036dc8d3ef695149d34887..9c8decab43269f593fee3bd94fffa5ca2e9cf50b 100644 (file)
 #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/Lexer.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>
@@ -61,7 +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 = 29; // spitz: remove \\date_insert_format
+static unsigned int const LYXRC_FILEFORMAT = 38; // chillenb: screen_width and screen_limit
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
        { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@@ -78,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 },
@@ -92,10 +94,12 @@ 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 },
        { "\\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 },
@@ -103,20 +107,20 @@ LexerKeyword lyxrcTags[] = {
        { "\\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 },
        { "\\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 },
@@ -159,6 +163,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\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 },
@@ -170,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 },
@@ -190,6 +197,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
        { "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
        { "\\ui_file", LyXRC::RC_UIFILE },
+       { "\\ui_style", LyXRC::RC_UI_STYLE },
        { "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
        { "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
        { "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
@@ -200,6 +208,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\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
@@ -477,16 +486,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:
@@ -595,6 +604,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> icon_set;
                        break;
 
+               case RC_UI_STYLE:
+                       lexrc >> ui_style;
+                       break;
+
                case RC_USE_SYSTEM_THEME_ICONS:
                        lexrc >> use_system_theme_icons;
                        break;
@@ -639,13 +652,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);
@@ -654,8 +671,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;
                }
 
@@ -665,8 +684,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:
@@ -751,8 +797,8 @@ 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())
@@ -797,6 +843,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;
@@ -880,6 +929,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 `"
@@ -965,6 +1016,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;
@@ -989,8 +1043,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;
@@ -1007,11 +1061,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;
@@ -1066,6 +1124,36 @@ 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
                }
@@ -1440,6 +1528,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                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) {
@@ -1536,6 +1629,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // fall through
+       case RC_UI_STYLE:
+               if (ignore_system_lyxrc ||
+                       ui_style != system_lyxrc.ui_style) {
+                       os << "\\ui_style \"" << ui_style
+                               << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_USE_SYSTEM_THEME_ICONS:
                if (ignore_system_lyxrc ||
                          use_system_theme_icons != system_lyxrc.use_system_theme_icons) {
@@ -1571,6 +1673,56 @@ 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
@@ -1611,6 +1763,26 @@ 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
@@ -1721,40 +1893,40 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                // 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);
@@ -1762,11 +1934,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // fall through
-       case RC_FULL_SCREEN_LIMIT:
+       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)
@@ -1822,11 +1994,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // fall through
-       case RC_FULL_SCREEN_WIDTH:
+       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)
@@ -1877,21 +2049,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)
@@ -2263,10 +2456,10 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "#\n\n";
 
        // fall through
-       case RC_DEFAULT_DECIMAL_POINT:
+       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;
@@ -2421,6 +2614,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;
 
@@ -2508,6 +2710,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() << "\" \""
@@ -2610,8 +2813,9 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        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)
@@ -2713,6 +2917,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:
@@ -2730,6 +2938,8 @@ 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_GUI_LANGUAGE:
@@ -2746,6 +2956,7 @@ 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:
@@ -2753,6 +2964,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
        case LyXRC::RC_ICON_SET:
+       case LyXRC::RC_UI_STYLE:
        case LyXRC::RC_INDEX_ALTERNATIVES:
        case LyXRC::RC_INDEX_COMMAND:
        case LyXRC::RC_JBIBTEX_COMMAND:
@@ -2778,6 +2990,7 @@ 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:
@@ -2822,7 +3035,8 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                || lyxrc_orig.roman_font_foundry != lyxrc_new.roman_font_foundry
                || lyxrc_orig.sans_font_foundry != lyxrc_new.sans_font_foundry
                || lyxrc_orig.use_scalable_fonts != lyxrc_new.use_scalable_fonts
-               || lyxrc_orig.font_sizes != lyxrc_new.font_sizes
+               || !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));
@@ -2852,6 +3066,7 @@ 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:
@@ -2864,13 +3079,13 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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:
@@ -2878,7 +3093,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:
@@ -3099,6 +3314,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;