]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
support to load the mathdots package via the document settings; fixes #5373; fileform...
[lyx.git] / src / LyXRC.cpp
index 1d9b11054ba89d94d45e5229410503fb323de84d..252bbfb36d4c3c28c8a1a3feaa9f3355dfa2d296 100644 (file)
@@ -23,6 +23,7 @@
 #include "FontEnums.h"
 #include "Format.h"
 #include "Lexer.h"
+#include "LyX.h"
 #include "Mover.h"
 #include "Session.h"
 #include "version.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/userinfo.h"
 
 #include <fstream>
 #include <iostream>
+#include <algorithm>
 
 using namespace std;
 using namespace lyx::support;
@@ -81,6 +85,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\cursor_follows_scrollbar", LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR },
        { "\\date_insert_format", LyXRC::RC_DATE_INSERT_FORMAT },
        { "\\def_file", LyXRC::RC_DEFFILE },
+       { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_POINT },
        { "\\default_language", LyXRC::RC_DEFAULT_LANGUAGE },
        { "\\default_papersize", LyXRC::RC_DEFAULT_PAPERSIZE },
        { "\\default_view_format", LyXRC::RC_DEFAULT_VIEW_FORMAT },
@@ -90,8 +95,11 @@ LexerKeyword lyxrcTags[] = {
        { "\\editor_alternatives", LyXRC::RC_EDITOR_ALTERNATIVES },
        { "\\escape_chars", LyXRC::RC_ESC_CHARS },
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
+       { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
        { "\\format", LyXRC::RC_FORMAT },
+       { "\\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 },
@@ -109,7 +117,6 @@ LexerKeyword lyxrcTags[] = {
        { "\\kbmap", LyXRC::RC_KBMAP },
        { "\\kbmap_primary", LyXRC::RC_KBMAP_PRIMARY },
        { "\\kbmap_secondary", LyXRC::RC_KBMAP_SECONDARY },
-       { "\\label_init_length", LyXRC::RC_LABEL_INIT_LENGTH },
        { "\\language_auto_begin", LyXRC::RC_LANGUAGE_AUTO_BEGIN },
        { "\\language_auto_end", LyXRC::RC_LANGUAGE_AUTO_END },
        { "\\language_command_begin", LyXRC::RC_LANGUAGE_COMMAND_BEGIN },
@@ -154,6 +161,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\print_to_printer", LyXRC::RC_PRINTTOPRINTER },
        { "\\printer", LyXRC::RC_PRINTER },
        { "\\rtl", LyXRC::RC_RTL_SUPPORT },
+       { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
        { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
        { "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
        { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
@@ -165,12 +173,15 @@ LexerKeyword lyxrcTags[] = {
        { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
        { "\\scroll_below_document", LyXRC::RC_SCROLL_BELOW_DOCUMENT },
+       { "\\scroll_wheel_zoom", LyXRC::RC_SCROLL_WHEEL_ZOOM },
        { "\\serverpipe", LyXRC::RC_SERVERPIPE },
        { "\\set_color", LyXRC::RC_SET_COLOR },
        { "\\show_banner", LyXRC::RC_SHOW_BANNER },
+       { "\\single_close_tab_button", LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON },
        { "\\sort_layouts", LyXRC::RC_SORT_LAYOUTS },
        { "\\spell_command", LyXRC::RC_SPELL_COMMAND },
        { "\\spellcheck_continuously", LyXRC::RC_SPELLCHECK_CONTINUOUSLY },
+       { "\\spellcheck_notes", LyXRC::RC_SPELLCHECK_NOTES },
        { "\\spellchecker", LyXRC::RC_SPELLCHECKER },
        { "\\splitindex_command", LyXRC::RC_SPLITINDEX_COMMAND },
        { "\\tempdir_path", LyXRC::RC_TEMPDIRPATH },
@@ -188,6 +199,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
        // compatibility with versions older than 1.4.0 only
        { "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
+       { "\\use_system_colors", LyXRC::RC_USE_SYSTEM_COLORS },
        // compatibility with versions older than 1.4.0 only
        { "\\use_tempdir", LyXRC::RC_USETEMPDIR },
        { "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
@@ -243,7 +255,7 @@ void LyXRC::setDefaults()
        index_command = "makeindex -c -q";
        nomencl_command = "makeindex -s nomencl.ist";
        dpi = 75;
-       // Because a screen typically is wider than a piece of paper:
+       // Because a screen is typically wider than a piece of paper:
        zoom = 150;
        allow_geometry_session = true;
        // Default LaTeX font size:
@@ -271,12 +283,23 @@ void LyXRC::setDefaults()
        use_lastfilepos = true;
        load_session = false;
        make_backup = true;
+       save_compressed = 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;
+       spellcheck_notes = true;
        use_kbmap = false;
        rtl_support = true;
        visual_cursor = false;
@@ -299,21 +322,26 @@ void LyXRC::setDefaults()
        date_insert_format = "%x";
        cursor_follows_scrollbar = false;
        scroll_below_document = false;
+       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
        paragraph_markers = false;
        mac_like_word_movement = false;
        macro_edit_style = MACRO_EDIT_INLINE_BOX;
        dialogs_iconify_with_main = false;
-       label_init_length = 3;
        preview = PREVIEW_OFF;
        preview_hashed_labels  = false;
-       preview_scale_factor = "0.9";
+       preview_scale_factor = 1.0;
        use_converter_cache = true;
+       use_system_colors = false;
        use_tooltip = true;
        use_pixmap_cache = false;
        converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
        user_name = to_utf8(support::user_name());
        user_email = to_utf8(support::user_email());
        open_buffers_in_tabs = true;
+       single_close_tab_button = false;
+       forward_search_dvi = string();
+       forward_search_pdf = string();
+       export_overwrite = NO_FILES;
 
        // Fullscreen settings
        full_screen_limit = false;
@@ -333,6 +361,7 @@ void LyXRC::setDefaults()
        completion_inline_text = false;
        completion_inline_dots = -1;
        completion_inline_delay = 0.2;
+       default_decimal_point = ".";
 }
 
 
@@ -414,7 +443,7 @@ int LyXRC::read(Lexer & lexrc)
                                                      lexrc.getString());
                                if (read(tmp)) {
                                        lexrc.printError("Error reading "
-                                                        "included file: " + tmp.absFilename());
+                                                        "included file: " + tmp.absFileName());
                                }
                        }
                        break;
@@ -887,6 +916,9 @@ int LyXRC::read(Lexer & lexrc)
                case RC_ACCEPT_COMPOUND:
                        lexrc >> spellchecker_accept_compound;
                        break;
+               case RC_USE_SYSTEM_COLORS:
+                       lexrc >> use_system_colors;
+                       break;
                case RC_USE_TOOLTIP:
                        lexrc >> use_tooltip;
                        break;
@@ -905,15 +937,24 @@ int LyXRC::read(Lexer & lexrc)
                case RC_SPELLCHECK_CONTINUOUSLY:
                        lexrc >> spellcheck_continuously;
                        break;
+               case RC_SPELLCHECK_NOTES:
+                       lexrc >> spellcheck_notes;
+                       break;
                case RC_MAKE_BACKUP:
                        lexrc >> make_backup;
                        break;
+               case RC_SAVE_COMPRESSED:
+                       lexrc >> save_compressed;
+                       break;
                case RC_BACKUPDIR_PATH:
                        if (lexrc.next()) {
                                backupdir_path = os::internal_path(lexrc.getString());
                                backupdir_path = expandPath(backupdir_path);
                        }
                        break;
+               case RC_DEFAULT_DECIMAL_POINT:
+                       lexrc >> default_decimal_point;
+                       break;
                case RC_DATE_INSERT_FORMAT:
                        lexrc >> date_insert_format;
                        break;
@@ -1040,13 +1081,13 @@ int LyXRC::read(Lexer & lexrc)
                                format = lexrc.getString();
                        if (lexrc.eatLine())
                                command = lexrc.getString();
-                       viewer_alternatives.push_back(make_pair(format, command));
+                       viewer_alternatives[format].insert(command);
                        break;
                }
                case RC_EDITOR_ALTERNATIVES:  {
                        string format, command;
                        lexrc >> format >> command;
-                       editor_alternatives.push_back(make_pair(format, command));
+                       editor_alternatives[format].insert(command);
                        break;
                }
 
@@ -1062,10 +1103,6 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> gui_language;
                        break;
 
-               case RC_LABEL_INIT_LENGTH:
-                       lexrc >> label_init_length;
-                       break;
-
                case RC_SHOW_BANNER:
                        lexrc >> show_banner;
                        break;
@@ -1139,6 +1176,49 @@ int LyXRC::read(Lexer & lexrc)
                case RC_OPEN_BUFFERS_IN_TABS:
                        lexrc >> open_buffers_in_tabs;
                        break;
+               case RC_SINGLE_CLOSE_TAB_BUTTON:
+                       lexrc >> single_close_tab_button;
+                       break;
+               case RC_FORWARD_SEARCH_DVI:
+                       if (lexrc.next(true)) 
+                               forward_search_dvi = lexrc.getString();
+                       break;
+               case RC_FORWARD_SEARCH_PDF:
+                       if (lexrc.next(true)) 
+                               forward_search_pdf = lexrc.getString();
+                       break;
+               case RC_EXPORT_OVERWRITE:
+                       if (lexrc.next()) {
+                               string const tmp = lexrc.getString();
+                               if (tmp == "all" || tmp == "true")
+                                       export_overwrite = ALL_FILES;
+                               else if (tmp == "main")
+                                       export_overwrite = MAIN_FILE;
+                               else {
+                                       export_overwrite = NO_FILES;
+                                       if (tmp != "ask" && tmp != "false")
+                                               LYXERR0("Unrecognized export_overwrite status \""
+                                                      << tmp << '"');
+                               }
+                       }
+                       break;
+               case RC_SCROLL_WHEEL_ZOOM:
+                       if (lexrc.next()) {
+                               string const tmp = lexrc.getString();
+                               if (tmp == "ctrl")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
+                               else if (tmp == "shift")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_SHIFT;
+                               else if (tmp == "alt")
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_ALT;
+                               else {
+                                       scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_OFF;
+                                       if (tmp != "off" && tmp != "false")
+                                               LYXERR0("Unrecognized scroll_wheel_zoom status \""
+                                                      << tmp << '"');
+                               }
+                       }
+                       break;
 
                // Obsoteted in 1.4.0
                case RC_USETEMPDIR:
@@ -1371,8 +1451,30 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        case PAPER_B5:
                                os << "b5"; break;
                        case PAPER_CUSTOM:
+                       case PAPER_A0:
+                       case PAPER_A1:
+                       case PAPER_A2:
+                       case PAPER_A6:
+                       case PAPER_B0:
+                       case PAPER_B1:
+                       case PAPER_B2:
                        case PAPER_B3:
-                       case PAPER_B4: break;
+                       case PAPER_B4:
+                       case PAPER_B6:
+                       case PAPER_C0:
+                       case PAPER_C1:
+                       case PAPER_C2:
+                       case PAPER_C3:
+                       case PAPER_C4:
+                       case PAPER_C5:
+                       case PAPER_C6:
+                       case PAPER_JISB0:
+                       case PAPER_JISB1:
+                       case PAPER_JISB2:
+                       case PAPER_JISB3:
+                       case PAPER_JISB4:
+                       case PAPER_JISB5:
+                       case PAPER_JISB6: break;
                        }
                        os << "\"\n";
                }
@@ -1386,8 +1488,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_BIBTEX_ALTERNATIVES: {
-               set<string>::const_iterator it = bibtex_alternatives.begin();
-               set<string>::const_iterator end = bibtex_alternatives.end();
+               CommandSet::const_iterator it = bibtex_alternatives.begin();
+               CommandSet::const_iterator end = bibtex_alternatives.end();
                for ( ; it != end; ++it) {
                        if (ignore_system_lyxrc
                            || !system_lyxrc.bibtex_alternatives.count(*it))
@@ -1412,8 +1514,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_INDEX_ALTERNATIVES: {
-               set<string>::const_iterator it = index_alternatives.begin();
-               set<string>::const_iterator end = index_alternatives.end();
+               CommandSet::const_iterator it = index_alternatives.begin();
+               CommandSet::const_iterator end = index_alternatives.end();
                for ( ; it != end; ++it) {
                        if (ignore_system_lyxrc
                            || !system_lyxrc.index_alternatives.count(*it))
@@ -1505,14 +1607,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_LABEL_INIT_LENGTH:
-               if (ignore_system_lyxrc ||
-                   label_init_length != system_lyxrc.label_init_length) {
-                       os << "\\label_init_length " << label_init_length
-                          << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
 
        case RC_USER_NAME:
                os << "\\user_name \"" << user_name << "\"\n";
@@ -1833,6 +1927,29 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SINGLE_CLOSE_TAB_BUTTON:
+               if (ignore_system_lyxrc ||
+                   single_close_tab_button != system_lyxrc.single_close_tab_button) {
+                       os << "\\single_close_tab_button "
+                          << convert<string>(single_close_tab_button)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FORWARD_SEARCH_DVI:
+               if (ignore_system_lyxrc ||
+                   forward_search_dvi != system_lyxrc.forward_search_dvi) {
+                       os << "\\forward_search_dvi \"" << escapeCommand(forward_search_dvi) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FORWARD_SEARCH_PDF:
+               if (ignore_system_lyxrc ||
+                   forward_search_pdf != system_lyxrc.forward_search_pdf) {
+                       os << "\\forward_search_pdf \"" << escapeCommand(forward_search_pdf) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
 
        os << "\n#\n"
                        << "# COLOR SECTION ###################################\n"
@@ -2207,6 +2324,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SAVE_COMPRESSED:
+               if (ignore_system_lyxrc ||
+                   save_compressed != system_lyxrc.save_compressed) {
+                       os << "\\save_compressed " << convert<string>(save_compressed) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_BACKUPDIR_PATH:
                if (ignore_system_lyxrc ||
                    backupdir_path != system_lyxrc.backupdir_path) {
@@ -2263,6 +2387,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                // obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
+       case RC_USE_SYSTEM_COLORS:
+               if (ignore_system_lyxrc ||
+                   use_system_colors != system_lyxrc.use_system_colors) {
+                       os << "\\use_system_colors "
+                          << convert<string>(use_system_colors)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_USE_TOOLTIP:
                if (ignore_system_lyxrc ||
                    use_tooltip != system_lyxrc.use_tooltip) {
@@ -2296,6 +2429,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
+       case RC_DEFAULT_DECIMAL_POINT:
+               if (ignore_system_lyxrc ||
+                   default_decimal_point != system_lyxrc.default_decimal_point) {
+                       os << "\\default_decimal_point " << default_decimal_point << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+
        case RC_SPELLCHECKER:
                if (ignore_system_lyxrc ||
                    spellchecker != system_lyxrc.spellchecker) {
@@ -2313,6 +2454,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
+       case RC_SPELLCHECK_NOTES:
+               if (ignore_system_lyxrc ||
+                   spellcheck_notes != system_lyxrc.spellcheck_notes) {
+                       os << "\\spellcheck_notes " << convert<string>(spellcheck_notes)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+
        case RC_RTL_SUPPORT:
                if (ignore_system_lyxrc ||
                    rtl_support != system_lyxrc.rtl_support) {
@@ -2434,6 +2584,48 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_EXPORT_OVERWRITE:
+               if (ignore_system_lyxrc ||
+                   export_overwrite != system_lyxrc.export_overwrite) {
+                       string status;
+                       switch (export_overwrite) {
+                       case NO_FILES:
+                               status = "ask";
+                               break;
+                       case MAIN_FILE:
+                               status = "main";
+                               break;
+                       case ALL_FILES:
+                               status = "all";
+                               break;
+                       }
+                       os << "\\export_overwrite " << status << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+
+       case RC_SCROLL_WHEEL_ZOOM:
+               if (ignore_system_lyxrc ||
+                       scroll_wheel_zoom != system_lyxrc.scroll_wheel_zoom) {
+                       string status;
+                       switch (scroll_wheel_zoom) {
+                       case SCROLL_WHEEL_ZOOM_OFF:
+                               status = "off";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_CTRL:
+                               status = "ctrl";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_SHIFT:
+                               status = "shift";
+                               break;
+                       case SCROLL_WHEEL_ZOOM_ALT:
+                               status = "alt";
+                               break;
+                       }
+                       os << "\\scroll_wheel_zoom " << status << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
 
                os << "\n#\n"
                   << "# FORMATS SECTION ##########################\n"
@@ -2477,26 +2669,56 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << "\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
-       case RC_VIEWER_ALTERNATIVES:
-               if (ignore_system_lyxrc ||
-                   viewer_alternatives != system_lyxrc.viewer_alternatives) {
-                       for (vector<pair<string, string> >::const_iterator it = viewer_alternatives.begin();
-                            it != viewer_alternatives.end(); ++it)
-                       os << "\\viewer_alternatives "
-                          << it->first << " " << it->second << "\n";
+       case RC_VIEWER_ALTERNATIVES: {
+               Alternatives::const_iterator it = viewer_alternatives.begin();
+               Alternatives::const_iterator const en = viewer_alternatives.end();
+               Alternatives::const_iterator const sysend = 
+                               system_lyxrc.viewer_alternatives.end();
+               for (; it != en; ++it) {
+                       string const & fmt = it->first;
+                       CommandSet const & cmd = it->second;
+                       CommandSet::const_iterator sit = cmd.begin();
+                       CommandSet::const_iterator const sen = cmd.end();
+                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ? 
+                                       system_lyxrc.viewer_alternatives.begin() : // we won't use it in this case
+                                       system_lyxrc.viewer_alternatives.find(fmt);
+                       for (; sit != sen; ++sit) {
+                               string const & cmd = *sit;
+                               if (ignore_system_lyxrc 
+                                   || sysfmt == sysend               // format not found
+                                        || sysfmt->second.count(cmd) == 0 // this command not found
+                                  )
+                                       os << "\\viewer_alternatives " << fmt << " " << cmd << "\n";
+                       }
                }
                if (tag != RC_LAST)
                        break;
-       case RC_EDITOR_ALTERNATIVES:
-               if (ignore_system_lyxrc ||
-                   editor_alternatives != system_lyxrc.editor_alternatives) {
-                       for (vector<pair<string, string> >::const_iterator it = editor_alternatives.begin();
-                            it != editor_alternatives.end(); ++it)
-                       os << "\\editor_alternatives "
-                          << it->first << " " << it->second << "\n";
+       }
+       case RC_EDITOR_ALTERNATIVES: {
+               Alternatives::const_iterator it = editor_alternatives.begin();
+               Alternatives::const_iterator const en = editor_alternatives.end();
+               Alternatives::const_iterator const sysend = 
+                               system_lyxrc.editor_alternatives.end();
+               for (; it != en; ++it) {
+                       string const & fmt = it->first;
+                       CommandSet const & cmd = it->second;
+                       CommandSet::const_iterator sit = cmd.begin();
+                       CommandSet::const_iterator const sen = cmd.end();
+                       Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ? 
+                                       system_lyxrc.editor_alternatives.begin() : // we won't use it in this case
+                                       system_lyxrc.editor_alternatives.find(fmt);
+                       for (; sit != sen; ++sit) {
+                               string const & cmd = *sit;
+                               if (ignore_system_lyxrc 
+                                   || sysfmt == sysend               // format not found
+                                   || sysfmt->second.count(cmd) == 0 // this command not found
+                                  )
+                                       os << "\\editor_alternatives " << fmt << " " << cmd << "\n";
+                       }
                }
                if (tag != RC_LAST)
                        break;
+       }
        case RC_DEFAULT_VIEW_FORMAT:
                if (ignore_system_lyxrc ||
                    default_view_format != system_lyxrc.default_view_format) {
@@ -2574,6 +2796,183 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
 }
 
 
+void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
+{
+       // Why the switch you might ask. It is a trick to ensure that all
+       // the elements in the LyXRCTags enum is handled. As you can see
+       // there are no breaks at all. So it is just a huge fall-through.
+       // The nice thing is that we will get a warning from the compiler
+       // if we forget an element.
+       LyXRC::LyXRCTags tag = LyXRC::RC_LAST;
+       switch (tag) {
+       case LyXRC::RC_ACCEPT_COMPOUND:
+       case LyXRC::RC_ALT_LANG:
+       case LyXRC::RC_PLAINTEXT_LINELEN:
+       case LyXRC::RC_PLAINTEXT_ROFF_COMMAND:
+       case LyXRC::RC_AUTOCORRECTION_MATH:
+       case LyXRC::RC_AUTOREGIONDELETE:
+       case LyXRC::RC_AUTORESET_OPTIONS:
+       case LyXRC::RC_AUTOSAVE:
+       case LyXRC::RC_AUTO_NUMBER:
+       case LyXRC::RC_BACKUPDIR_PATH:
+       case LyXRC::RC_BIBTEX_ALTERNATIVES:
+       case LyXRC::RC_BIBTEX_COMMAND:
+       case LyXRC::RC_BINDFILE:
+       case LyXRC::RC_CHECKLASTFILES:
+       case LyXRC::RC_COMPLETION_CURSOR_TEXT:
+       case LyXRC::RC_COMPLETION_INLINE_DELAY:
+       case LyXRC::RC_COMPLETION_INLINE_DOTS:
+       case LyXRC::RC_COMPLETION_INLINE_MATH:
+       case LyXRC::RC_COMPLETION_INLINE_TEXT:
+       case LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE:
+       case LyXRC::RC_COMPLETION_POPUP_DELAY:
+       case LyXRC::RC_COMPLETION_POPUP_MATH:
+       case LyXRC::RC_COMPLETION_POPUP_TEXT:
+       case LyXRC::RC_USELASTFILEPOS:
+       case LyXRC::RC_LOADSESSION:
+       case LyXRC::RC_CHKTEX_COMMAND:
+       case LyXRC::RC_CONVERTER:
+       case LyXRC::RC_CONVERTER_CACHE_MAXAGE:
+       case LyXRC::RC_COPIER:
+       case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR:
+       case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
+       case LyXRC::RC_DATE_INSERT_FORMAT:
+       case LyXRC::RC_DEFAULT_LANGUAGE:
+       case LyXRC::RC_GUI_LANGUAGE:
+       case LyXRC::RC_DEFAULT_PAPERSIZE:
+       case LyXRC::RC_DEFAULT_VIEW_FORMAT:
+       case LyXRC::RC_DEFFILE:
+       case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
+       case LyXRC::RC_DISPLAY_GRAPHICS:
+       case LyXRC::RC_DOCUMENTPATH:
+               if (lyxrc_orig.document_path != lyxrc_new.document_path) {
+                       FileName path(lyxrc_new.document_path);
+                       if (path.exists() && path.isDirectory())
+                               package().document_dir() = FileName(lyxrc.document_path);
+               }
+       case LyXRC::RC_EDITOR_ALTERNATIVES:
+       case LyXRC::RC_ESC_CHARS:
+       case LyXRC::RC_EXAMPLEPATH:
+       case LyXRC::RC_FONT_ENCODING:
+       case LyXRC::RC_FORMAT:
+       case LyXRC::RC_GROUP_LAYOUTS:
+       case LyXRC::RC_HUNSPELLDIR_PATH:
+       case LyXRC::RC_INDEX_ALTERNATIVES:
+       case LyXRC::RC_INDEX_COMMAND:
+       case LyXRC::RC_JBIBTEX_COMMAND:
+       case LyXRC::RC_JINDEX_COMMAND:
+       case LyXRC::RC_NOMENCL_COMMAND:
+       case LyXRC::RC_INPUT:
+       case LyXRC::RC_KBMAP:
+       case LyXRC::RC_KBMAP_PRIMARY:
+       case LyXRC::RC_KBMAP_SECONDARY:
+       case LyXRC::RC_LANGUAGE_AUTO_BEGIN:
+       case LyXRC::RC_LANGUAGE_AUTO_END:
+       case LyXRC::RC_LANGUAGE_COMMAND_BEGIN:
+       case LyXRC::RC_LANGUAGE_COMMAND_END:
+       case LyXRC::RC_LANGUAGE_COMMAND_LOCAL:
+       case LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS:
+       case LyXRC::RC_LANGUAGE_PACKAGE:
+       case LyXRC::RC_LANGUAGE_USE_BABEL:
+       case LyXRC::RC_MAC_LIKE_WORD_MOVEMENT:
+       case LyXRC::RC_MACRO_EDIT_STYLE:
+       case LyXRC::RC_MAKE_BACKUP:
+       case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
+       case LyXRC::RC_MOUSE_WHEEL_SPEED:
+       case LyXRC::RC_NUMLASTFILES:
+       case LyXRC::RC_PARAGRAPH_MARKERS:
+       case LyXRC::RC_PATH_PREFIX:
+               if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
+                       prependEnvPath("PATH", lyxrc.path_prefix);
+               }
+       case LyXRC::RC_PERS_DICT:
+       case LyXRC::RC_PREVIEW:
+       case LyXRC::RC_PREVIEW_HASHED_LABELS:
+       case LyXRC::RC_PREVIEW_SCALE_FACTOR:
+       case LyXRC::RC_PRINTCOLLCOPIESFLAG:
+       case LyXRC::RC_PRINTCOPIESFLAG:
+       case LyXRC::RC_PRINTER:
+       case LyXRC::RC_PRINTEVENPAGEFLAG:
+       case LyXRC::RC_PRINTEXSTRAOPTIONS:
+       case LyXRC::RC_PRINTFILEEXTENSION:
+       case LyXRC::RC_PRINTLANDSCAPEFLAG:
+       case LyXRC::RC_PRINTODDPAGEFLAG:
+       case LyXRC::RC_PRINTPAGERANGEFLAG:
+       case LyXRC::RC_PRINTPAPERDIMENSIONFLAG:
+       case LyXRC::RC_PRINTPAPERFLAG:
+       case LyXRC::RC_PRINTREVERSEFLAG:
+       case LyXRC::RC_PRINTSPOOL_COMMAND:
+       case LyXRC::RC_PRINTSPOOL_PRINTERPREFIX:
+       case LyXRC::RC_PRINTTOFILE:
+       case LyXRC::RC_PRINTTOPRINTER:
+       case LyXRC::RC_PRINT_ADAPTOUTPUT:
+       case LyXRC::RC_PRINT_COMMAND:
+       case LyXRC::RC_RTL_SUPPORT:
+       case LyXRC::RC_SAVE_COMPRESSED:
+       case LyXRC::RC_SCREEN_DPI:
+       case LyXRC::RC_SCREEN_FONT_ROMAN:
+       case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
+       case LyXRC::RC_SCREEN_FONT_SANS:
+       case LyXRC::RC_SCREEN_FONT_SANS_FOUNDRY:
+       case LyXRC::RC_SCREEN_FONT_SCALABLE:
+       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:
+       case LyXRC::RC_SERVERPIPE:
+       case LyXRC::RC_SET_COLOR:
+       case LyXRC::RC_SHOW_BANNER:
+       case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
+       case LyXRC::RC_SPELL_COMMAND:
+       case LyXRC::RC_SPELLCHECKER:
+       case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
+       case LyXRC::RC_SPELLCHECK_NOTES:
+       case LyXRC::RC_SPLITINDEX_COMMAND:
+       case LyXRC::RC_TEMPDIRPATH:
+       case LyXRC::RC_TEMPLATEPATH:
+       case LyXRC::RC_TEX_ALLOWS_SPACES:
+       case LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS:
+               if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
+                       os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
+               }
+       case LyXRC::RC_THESAURUSDIRPATH:
+       case LyXRC::RC_UIFILE:
+       case LyXRC::RC_USER_EMAIL:
+       case LyXRC::RC_USER_NAME:
+       case LyXRC::RC_USETEMPDIR:
+       case LyXRC::RC_USE_ALT_LANG:
+       case LyXRC::RC_USE_CONVERTER_CACHE:
+       case LyXRC::RC_USE_ESC_CHARS:
+       case LyXRC::RC_USE_INP_ENC:
+       case LyXRC::RC_USE_PERS_DICT:
+       case LyXRC::RC_USE_SYSTEM_COLORS:
+       case LyXRC::RC_USE_TOOLTIP:
+       case LyXRC::RC_USE_PIXMAP_CACHE:
+       case LyXRC::RC_USE_SPELL_LIB:
+       case LyXRC::RC_VIEWDVI_PAPEROPTION:
+       case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
+       case LyXRC::RC_SORT_LAYOUTS:
+       case LyXRC::RC_FULL_SCREEN_LIMIT:
+       case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
+       case LyXRC::RC_FULL_SCREEN_MENUBAR:
+       case LyXRC::RC_FULL_SCREEN_TABBAR:
+       case LyXRC::RC_FULL_SCREEN_TOOLBARS:
+       case LyXRC::RC_FULL_SCREEN_WIDTH:
+       case LyXRC::RC_VISUAL_CURSOR:
+       case LyXRC::RC_VIEWER:
+       case LyXRC::RC_VIEWER_ALTERNATIVES:
+       case LyXRC::RC_FORWARD_SEARCH_DVI:
+       case LyXRC::RC_FORWARD_SEARCH_PDF:
+       case LyXRC::RC_EXPORT_OVERWRITE:
+       case LyXRC::RC_DEFAULT_DECIMAL_POINT:
+       case LyXRC::RC_SCROLL_WHEEL_ZOOM:
+       case LyXRC::RC_LAST:
+               break;
+       }
+}
+
+
 #if 0
 string const LyXRC::getDescription(LyXRCTags tag)
 {
@@ -2728,10 +3127,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Use this to set the correct mapping file for your keyboard. You'll need this if you for instance want to type German documents on an American keyboard.");
                break;
 
-       case RC_LABEL_INIT_LENGTH:
-               str = _("Maximum number of words in the initialization string for a new label");
-               break;
-
        case RC_LANGUAGE_AUTO_BEGIN:
                str = _("Select if a language switching command is needed at the beginning of the document.");
                break;
@@ -3002,6 +3397,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_USETEMPDIR:
                break;
 
+       case RC_USE_USE_SYSTEM_COLORS:
+               str = _("Enable use the system colors for some things like main window background and selection.");
+               break;
+
        case RC_USE_TOOLTIP:
                str = _("Enable the automatic appearance of tool tips in the work area.");
                break;