]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Routines for calculating numerical labels for BibTeX citations.
[lyx.git] / src / LyXRC.cpp
index 1fd1bd249e83ad626ccd676a6b3854301f20fad4..ece84acc8e8d97bd914471cc2c88c0701fff99bf 100644 (file)
 
 #include <config.h>
 
-#include <fstream>
-#include <iostream>
-
 #include "LyXRC.h"
 
-#include "Color.h"
+#include "ColorSet.h"
 #include "Converter.h"
 #include "FontEnums.h"
 #include "Format.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>
+
 using namespace std;
 using namespace lyx::support;
 
@@ -61,6 +63,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\autocorrection_math", LyXRC::RC_AUTOCORRECTION_MATH },
        { "\\autosave", LyXRC::RC_AUTOSAVE },
        { "\\backupdir_path", LyXRC::RC_BACKUPDIR_PATH },
+       { "\\bibtex_alternatives", LyXRC::RC_BIBTEX_ALTERNATIVES },
        { "\\bibtex_command", LyXRC::RC_BIBTEX_COMMAND },
        { "\\bind_file", LyXRC::RC_BINDFILE },
        { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
@@ -78,28 +81,33 @@ LexerKeyword lyxrcTags[] = {
        { "\\converter_cache_maxage", LyXRC::RC_CONVERTER_CACHE_MAXAGE },
        { "\\copier", LyXRC::RC_COPIER },
        { "\\cursor_follows_scrollbar", LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR },
-       { "\\custom_export_command", LyXRC::RC_CUSTOM_EXPORT_COMMAND },
-       { "\\custom_export_format", LyXRC::RC_CUSTOM_EXPORT_FORMAT },
        { "\\date_insert_format", LyXRC::RC_DATE_INSERT_FORMAT },
        { "\\def_file", LyXRC::RC_DEFFILE },
        { "\\default_language", LyXRC::RC_DEFAULT_LANGUAGE },
        { "\\default_papersize", LyXRC::RC_DEFAULT_PAPERSIZE },
+       { "\\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 },
+       { "\\editor_alternatives", LyXRC::RC_EDITOR_ALTERNATIVES },
        { "\\escape_chars", LyXRC::RC_ESC_CHARS },
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
        { "\\format", LyXRC::RC_FORMAT },
        { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
+       { "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
        { "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
        { "\\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 },
+       { "\\index_alternatives", LyXRC::RC_INDEX_ALTERNATIVES },
        { "\\index_command", LyXRC::RC_INDEX_COMMAND },
        { "\\input", LyXRC::RC_INPUT },
+       { "\\jbibtex_command", LyXRC::RC_JBIBTEX_COMMAND },
+       { "\\jindex_command", LyXRC::RC_JINDEX_COMMAND },
        { "\\kbmap", LyXRC::RC_KBMAP },
        { "\\kbmap_primary", LyXRC::RC_KBMAP_PRIMARY },
        { "\\kbmap_secondary", LyXRC::RC_KBMAP_SECONDARY },
@@ -121,6 +129,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
        { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
        { "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
+       { "\\paragraph_markers", LyXRC::RC_PARAGRAPH_MARKERS },
        { "\\path_prefix", LyXRC::RC_PATH_PREFIX },
        { "\\personal_dictionary", LyXRC::RC_PERS_DICT },
        { "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
@@ -157,11 +166,16 @@ LexerKeyword lyxrcTags[] = {
        { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
        { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
+       { "\\scroll_below_document", LyXRC::RC_SCROLL_BELOW_DOCUMENT },
        { "\\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 },
+       { "\\spellchecker", LyXRC::RC_SPELLCHECKER },
+       { "\\splitindex_command", LyXRC::RC_SPLITINDEX_COMMAND },
        { "\\tempdir_path", LyXRC::RC_TEMPDIRPATH },
        { "\\template_path", LyXRC::RC_TEMPLATEPATH },
        { "\\tex_allows_spaces", LyXRC::RC_TEX_ALLOWS_SPACES },
@@ -185,6 +199,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\view_dvi_paper_option", LyXRC::RC_VIEWDVI_PAPEROPTION },
        // compatibility with versions older than 1.4.0 only
        { "\\viewer", LyXRC::RC_VIEWER},
+       { "\\viewer_alternatives", LyXRC::RC_VIEWER_ALTERNATIVES },
        { "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR}
 };
 
@@ -224,14 +239,14 @@ void LyXRC::setDefaults()
        document_path.erase();
        view_dvi_paper_option.erase();
        default_papersize = PAPER_DEFAULT;
-       custom_export_format = "ps";
+       default_view_format = "pdf2";
        chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
        bibtex_command = "bibtex";
        fontenc = "default";
        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:
@@ -262,11 +277,15 @@ void LyXRC::setDefaults()
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
+#if defined(USE_ASPELL)
+       spellchecker = "aspell";
+#elif defined(USE_HUNSPELL)
+       spellchecker = "hunspell";
+#else
+       spellchecker = "aspell";
+#endif
        spellchecker_accept_compound = false;
-       spellchecker_use_input_encoding = false;
-       spellchecker_use_alt_lang = false;
-       spellchecker_use_pers_dict = false;
-       spellchecker_use_esc_chars = false;
+       spellcheck_continuously = false;
        use_kbmap = false;
        rtl_support = true;
        visual_cursor = false;
@@ -288,13 +307,15 @@ void LyXRC::setDefaults()
        tex_allows_spaces = false;
        date_insert_format = "%x";
        cursor_follows_scrollbar = false;
+       scroll_below_document = false;
+       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_tooltip = true;
        use_pixmap_cache = false;
@@ -302,11 +323,13 @@ void LyXRC::setDefaults()
        user_name = to_utf8(support::user_name());
        user_email = to_utf8(support::user_email());
        open_buffers_in_tabs = true;
+       single_close_tab_button = false;
 
        // Fullscreen settings
        full_screen_limit = false;
        full_screen_toolbars = true;
        full_screen_tabbar = true;
+       full_screen_menubar = true;
        full_screen_scrollbar = true;
        full_screen_width = 700;
 
@@ -444,10 +467,8 @@ int LyXRC::read(Lexer & lexrc)
                case RC_KBMAP_PRIMARY:
                        if (lexrc.next()) {
                                string const kmap(os::internal_path(lexrc.getString()));
-                               if (kmap.empty()) {
-                                       // nothing
-                               } else if (!libFileSearch("kbd", kmap,
-                                                         "kmap").empty()) {
+                               if (!libFileSearch("kbd", kmap, "kmap").empty()
+                                         || kmap.empty()) {
                                        primary_kbmap = kmap;
                                } else {
                                        lexrc.printError("LyX: Keymap `$$Token' not found");
@@ -458,10 +479,8 @@ int LyXRC::read(Lexer & lexrc)
                case RC_KBMAP_SECONDARY:
                        if (lexrc.next()) {
                                string const kmap(os::internal_path(lexrc.getString()));
-                               if (kmap.empty()) {
-                                       // nothing
-                               } else if (!libFileSearch("kbd", kmap,
-                                                         "kmap").empty()) {
+                               if (!libFileSearch("kbd", kmap, "kmap").empty()
+                                         || kmap.empty()) {
                                        secondary_kbmap = kmap;
                                } else {
                                        lexrc.printError("LyX: Keymap `$$Token' not found");
@@ -551,14 +570,6 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> print_paper_flag;
                        break;
 
-               case RC_CUSTOM_EXPORT_COMMAND:
-                       lexrc >> custom_export_command;
-                       break;
-
-               case RC_CUSTOM_EXPORT_FORMAT:
-                       lexrc >> custom_export_format;
-                       break;
-
                case RC_DEFAULT_PAPERSIZE:
                        if (lexrc.next()) {
                                string const size = ascii_lowercase(lexrc.getString());
@@ -594,18 +605,48 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
 
+               case RC_BIBTEX_ALTERNATIVES:
+                       if (lexrc.next(true)) {
+                               bibtex_alternatives.insert(lexrc.getString());
+                       }
+                       break;
+
                case RC_BIBTEX_COMMAND:
                        if (lexrc.next(true)) {
                                bibtex_command = lexrc.getString();
                        }
                        break;
 
+               case RC_JBIBTEX_COMMAND:
+                       if (lexrc.next(true)) {
+                               jbibtex_command = lexrc.getString();
+                       }
+                       break;
+
+               case RC_INDEX_ALTERNATIVES:
+                       if (lexrc.next(true)) {
+                               index_alternatives.insert(lexrc.getString());
+                       }
+                       break;
+
                case RC_INDEX_COMMAND:
                        if (lexrc.next(true)) {
                                index_command = lexrc.getString();
                        }
                        break;
 
+               case RC_JINDEX_COMMAND:
+                       if (lexrc.next(true)) {
+                               jindex_command = lexrc.getString();
+                       }
+                       break;
+
+               case RC_SPLITINDEX_COMMAND:
+                       if (lexrc.next(true)) {
+                               splitindex_command = lexrc.getString();
+                       }
+                       break;
+
                case RC_NOMENCL_COMMAND:
                        if (lexrc.next(true)) {
                                nomencl_command = lexrc.getString();
@@ -680,9 +721,11 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
 
-               case RC_USETEMPDIR:
-                       if (lexrc.next())
-                               LYXERR0("Ignoring obsolete use_tempdir flag.");
+               case RC_HUNSPELLDIR_PATH:
+                       if (lexrc.next()) {
+                               hunspelldir_path = os::internal_path(lexrc.getString());
+                               hunspelldir_path = expandPath(hunspelldir_path);
+                       }
                        break;
 
                case RC_USELASTFILEPOS:
@@ -821,6 +864,14 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> cursor_follows_scrollbar;
                        break;
 
+               case RC_SCROLL_BELOW_DOCUMENT:
+                       lexrc >> scroll_below_document;
+                       break;
+
+               case RC_PARAGRAPH_MARKERS:
+                       lexrc >> paragraph_markers;
+                       break;
+
                case RC_MAC_LIKE_WORD_MOVEMENT:
                        lexrc >> mac_like_word_movement;
                        break;
@@ -839,9 +890,6 @@ int LyXRC::read(Lexer & lexrc)
                        lexrc >> dialogs_iconify_with_main;
                        break;
 
-               case RC_PLAINTEXT_ROFF_COMMAND: 
-                       (void) lexrc.getString(); // Obsoleted in 2.0
-                       break;
                case RC_PLAINTEXT_LINELEN:
                        lexrc >> plaintext_linelen;
                        break;
@@ -849,34 +897,24 @@ int LyXRC::read(Lexer & lexrc)
                case RC_ACCEPT_COMPOUND:
                        lexrc >> spellchecker_accept_compound;
                        break;
-               case RC_USE_INP_ENC:
-                       lexrc >> spellchecker_use_input_encoding;
-                       break;
-               case RC_USE_ALT_LANG:
-                       lexrc >> spellchecker_use_alt_lang;
-                       break;
-               case RC_USE_PERS_DICT:
-                       lexrc >> spellchecker_use_pers_dict;
-                       break;
                case RC_USE_TOOLTIP:
                        lexrc >> use_tooltip;
                        break;
                case RC_USE_PIXMAP_CACHE:
                        lexrc >> use_pixmap_cache;
                        break;
-               case RC_USE_ESC_CHARS:
-                       lexrc >> spellchecker_use_esc_chars;
+               case RC_SPELLCHECKER:
+                       lexrc >> spellchecker;
                        break;
                case RC_ALT_LANG:
                        lexrc >> spellchecker_alt_lang;
                        break;
-               case RC_PERS_DICT:
-                       if (lexrc.next())
-                               spellchecker_pers_dict = os::internal_path(lexrc.getString());
-                       break;
                case RC_ESC_CHARS:
                        lexrc >> spellchecker_esc_chars;
                        break;
+               case RC_SPELLCHECK_CONTINUOUSLY:
+                       lexrc >> spellcheck_continuously;
+                       break;
                case RC_MAKE_BACKUP:
                        lexrc >> make_backup;
                        break;
@@ -1006,6 +1044,26 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
                }
+               case RC_VIEWER_ALTERNATIVES:  {
+                       string format, command;
+                       if (lexrc.next())
+                               format = lexrc.getString();
+                       if (lexrc.eatLine())
+                               command = lexrc.getString();
+                       viewer_alternatives[format].insert(command);
+                       break;
+               }
+               case RC_EDITOR_ALTERNATIVES:  {
+                       string format, command;
+                       lexrc >> format >> command;
+                       editor_alternatives[format].insert(command);
+                       break;
+               }
+
+               case RC_DEFAULT_VIEW_FORMAT:
+                       lexrc >> default_view_format;
+                       break;
+                       
                case RC_DEFAULT_LANGUAGE:
                        lexrc >> default_language;
                        break;
@@ -1082,17 +1140,33 @@ int LyXRC::read(Lexer & lexrc)
                case RC_FULL_SCREEN_TABBAR:
                        lexrc >> full_screen_tabbar;
                        break;
+               case RC_FULL_SCREEN_MENUBAR:
+                       lexrc >> full_screen_menubar;
+                       break;
                case RC_FULL_SCREEN_WIDTH:
                        lexrc >> full_screen_width;
                        break;
                case RC_OPEN_BUFFERS_IN_TABS:
                        lexrc >> open_buffers_in_tabs;
                        break;
+               case RC_SINGLE_CLOSE_TAB_BUTTON:
+                       lexrc >> single_close_tab_button;
+                       break;
 
+               // Obsoteted in 1.4.0
+               case RC_USETEMPDIR:
                // Obsoleted in 2.0
                case RC_SPELL_COMMAND:
+               case RC_PERS_DICT:
+               case RC_PLAINTEXT_ROFF_COMMAND: 
+               case RC_USE_ALT_LANG:
+               case RC_USE_ESC_CHARS:
+               case RC_USE_INP_ENC:
+               case RC_USE_PERS_DICT:
                case RC_USE_SPELL_LIB:
-                       (void) lexrc.getString();
+                       LYXERR(Debug::LYXRC, "Skipping obsolete tag `" 
+                              << lexrc.getString() << "'.");
+                       lexrc.next(true);
                        break;
 
                case RC_LAST:
@@ -1324,6 +1398,18 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_BIBTEX_ALTERNATIVES: {
+               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))
+                               os << "\\bibtex_alternatives \""
+                                  << *it << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       }
        case RC_BIBTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    bibtex_command != system_lyxrc.bibtex_command) {
@@ -1331,6 +1417,25 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_JBIBTEX_COMMAND:
+               if (ignore_system_lyxrc ||
+                   jbibtex_command != system_lyxrc.jbibtex_command) {
+                       os << "\\jbibtex_command \"" << escapeCommand(jbibtex_command) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_INDEX_ALTERNATIVES: {
+               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))
+                               os << "\\index_alternatives \""
+                                  << *it << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       }
        case RC_INDEX_COMMAND:
                if (ignore_system_lyxrc ||
                    index_command != system_lyxrc.index_command) {
@@ -1338,6 +1443,20 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_JINDEX_COMMAND:
+               if (ignore_system_lyxrc ||
+                   jindex_command != system_lyxrc.jindex_command) {
+                       os << "\\jindex_command \"" << escapeCommand(jindex_command) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_SPLITINDEX_COMMAND:
+               if (ignore_system_lyxrc ||
+                   splitindex_command != system_lyxrc.splitindex_command) {
+                       os << "\\splitindex_command \"" << escapeCommand(splitindex_command) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_NOMENCL_COMMAND:
                if (ignore_system_lyxrc ||
                    nomencl_command != system_lyxrc.nomencl_command) {
@@ -1518,6 +1637,24 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SCROLL_BELOW_DOCUMENT:
+               if (ignore_system_lyxrc ||
+                   scroll_below_document
+                   != system_lyxrc.scroll_below_document) {
+                       os << "\\scroll_below_document "
+                          << convert<string>(scroll_below_document) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_PARAGRAPH_MARKERS:
+               if (ignore_system_lyxrc ||
+                       paragraph_markers
+                   != system_lyxrc.paragraph_markers) {
+                       os << "\\paragraph_markers "
+                          << convert<string>(paragraph_markers) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_MAC_LIKE_WORD_MOVEMENT:
                if (ignore_system_lyxrc ||
                    mac_like_word_movement
@@ -1682,6 +1819,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_FULL_SCREEN_MENUBAR:
+               if (ignore_system_lyxrc ||
+                   full_screen_menubar != system_lyxrc.full_screen_menubar) {
+                       os << "\\fullscreen_menubar "
+                          << convert<string>(full_screen_menubar)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_FULL_SCREEN_WIDTH:
                if (ignore_system_lyxrc ||
                    full_screen_width != system_lyxrc.full_screen_width) {
@@ -1698,6 +1844,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << convert<string>(open_buffers_in_tabs)
                           << '\n';
                }
+       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;
 
@@ -1872,30 +2025,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-               os << "\n#\n"
-                  << "# EXPORT SECTION ####################################\n"
-                  << "#\n\n";
-
-       case RC_CUSTOM_EXPORT_COMMAND:
-               if (ignore_system_lyxrc ||
-                   custom_export_command
-                   != system_lyxrc.custom_export_command) {
-                       os << "\\custom_export_command \""
-                          << custom_export_command
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_CUSTOM_EXPORT_FORMAT:
-               if (ignore_system_lyxrc ||
-                   custom_export_format
-                   != system_lyxrc.custom_export_format) {
-                       os << "\\custom_export_format \"" << custom_export_format
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
                os << "\n#\n"
                   << "# TEX SECTION #######################################\n"
                   << "#\n\n";
@@ -2069,6 +2198,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_HUNSPELLDIR_PATH:
+               if (ignore_system_lyxrc ||
+                   hunspelldir_path != system_lyxrc.hunspelldir_path) {
+                       string const path = os::external_path(hunspelldir_path);
+                       os << "\\hunspelldir_path \"" << path << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_USETEMPDIR:
                if (tag != RC_LAST)
                        break;
@@ -2106,6 +2243,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                os << "\n#\n"
                   << "# SPELLCHECKER SECTION ##############################\n"
                   << "#\n\n";
+
        case RC_SPELL_COMMAND:
        case RC_USE_SPELL_LIB:
                // Obsoleted in 2.0
@@ -2120,11 +2258,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_USE_ALT_LANG:
-               if (ignore_system_lyxrc ||
-                   spellchecker_use_alt_lang != system_lyxrc.spellchecker_use_alt_lang) {
-                       os << "\\use_alt_language " << convert<string>(spellchecker_use_alt_lang)
-                          << '\n';
-               }
+               // Obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
        case RC_ALT_LANG:
@@ -2136,11 +2270,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_USE_ESC_CHARS:
-               if (ignore_system_lyxrc ||
-                   spellchecker_use_esc_chars != system_lyxrc.spellchecker_use_esc_chars) {
-                       os << "\\use_escape_chars " << convert<string>(spellchecker_use_esc_chars)
-                          << '\n';
-               }
                if (tag != RC_LAST)
                        break;
        case RC_ESC_CHARS:
@@ -2151,12 +2280,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_USE_PERS_DICT:
-               if (ignore_system_lyxrc ||
-                   spellchecker_use_pers_dict != system_lyxrc.spellchecker_use_pers_dict) {
-                       os << "\\use_personal_dictionary "
-                          << convert<string>(spellchecker_use_pers_dict)
-                          << '\n';
-               }
+               // obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
        case RC_USE_TOOLTIP:
@@ -2166,6 +2290,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << convert<string>(use_tooltip)
                           << '\n';
                }
+               if (tag != RC_LAST)
+                       break;
        case RC_USE_PIXMAP_CACHE:
                if (ignore_system_lyxrc ||
                    use_pixmap_cache != system_lyxrc.use_pixmap_cache) {
@@ -2173,27 +2299,39 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << convert<string>(use_pixmap_cache)
                           << '\n';
                }
+               if (tag != RC_LAST)
+                       break;
        case RC_PERS_DICT:
-               if (spellchecker_pers_dict != system_lyxrc.spellchecker_pers_dict) {
-                       string const path = os::external_path(spellchecker_pers_dict);
-                       os << "\\personal_dictionary \"" << path << "\"\n";
-               }
+               // obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
        case RC_USE_INP_ENC:
-               if (ignore_system_lyxrc ||
-                   spellchecker_use_input_encoding
-                   != system_lyxrc.spellchecker_use_input_encoding) {
-                       os << "\\use_input_encoding "
-                          << convert<string>(spellchecker_use_input_encoding)
-                          << '\n';
-               }
+               // obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
 
                os << "\n#\n"
                   << "# LANGUAGE SUPPORT SECTION ##########################\n"
                   << "#\n\n";
+               if (tag != RC_LAST)
+                       break;
+
+       case RC_SPELLCHECKER:
+               if (ignore_system_lyxrc ||
+                   spellchecker != system_lyxrc.spellchecker) {
+                       os << "\\spellchecker " << spellchecker << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+
+       case RC_SPELLCHECK_CONTINUOUSLY:
+               if (ignore_system_lyxrc ||
+                   spellcheck_continuously != system_lyxrc.spellcheck_continuously) {
+                       os << "\\spellcheck_continuously " << convert<string>(spellcheck_continuously)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
 
        case RC_RTL_SUPPORT:
                if (ignore_system_lyxrc ||
@@ -2359,6 +2497,63 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << "\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
+       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: {
+               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) {
+                       os << "\\default_view_format " << default_view_format << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_VIEWER:
                // Ignore it
                if (tag != RC_LAST)
@@ -2392,7 +2587,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << "\" \"" << cit->to << "\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
-
+       
        case RC_COPIER:
                if (tag == RC_LAST)
                        os << "\n#\n"
@@ -2429,6 +2624,176 @@ 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_LABEL_INIT_LENGTH:
+       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_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_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_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_LAST:
+               break;
+       }
+}
+
+
 #if 0
 string const LyXRC::getDescription(LyXRCTags tag)
 {
@@ -2475,6 +2840,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Define the options of bibtex (cf. man bibtex) or select an alternative compiler (e.g. mlbibtex or bibulus).");
                break;
 
+       case RC_JBIBTEX_COMMAND:
+               str = _("Define the options of the bibtex program for PLaTeX (Japanese LaTeX).");
+               break;
+
        case RC_BINDFILE:
                str = _("Keybindings file. Can either specify an absolute path, or LyX will look in its global and local bind/ directories.");
                break;
@@ -2497,6 +2866,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("LyX normally doesn't update the cursor position if you move the scrollbar. Set to true if you'd prefer to always have the cursor on screen.");
                break;
 
+       case RC_SCROLL_BELOW_DOCUMENT:
+               str = _("LyX normally doesn't allow the user to scroll further than the bottom of the document. Set to true if you prefer to scroll the bottom of the document to the top of the screen");
+               break;
+
        case RC_MAC_LIKE_WORD_MOVEMENT:
                str = _("Use the Mac OS X conventions for the word-level cursor movement");
                break;
@@ -2505,12 +2878,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_CUSTOM_EXPORT_COMMAND:
-               break;
-
-       case RC_CUSTOM_EXPORT_FORMAT:
-               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\".");
@@ -2520,6 +2887,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Command definition file. Can either specify an absolute path, or LyX will look in its global and local commands/ directories.");
                break;
 
+       case RC_DEFAULT_VIEW_FORMAT:
+               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE].");
+               break;
+
        case RC_DEFAULT_LANGUAGE:
                str = _("New documents will be assigned this language.");
                break;
@@ -2560,6 +2931,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Define the options of makeindex (cf. man makeindex) or select an alternative compiler. E.g., using xindy/make-rules, the command string would be \"makeindex.sh -m $$lang\".");
                break;
 
+       case RC_JINDEX_COMMAND:
+               str = _("Define the options of the index program for PLaTeX (Japanese LaTeX).");
+               break;
+
        case RC_NOMENCL_COMMAND:
                str = _("Define the options of makeindex (cf. man makeindex) to be used for nomenclatures. This might differ from the index processing options.");
                break;
@@ -2681,11 +3056,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                         "Use the OS native format.");
                break;
 
-       case RC_PERS_DICT:
-       case RC_USE_PERS_DICT:
-               str = _("Specify an alternate personal dictionary file. E.g. \".aspell_english\".");
-               break;
-
        case RC_PREVIEW:
                str = _("Shows a typeset preview of things such as math");
                break;
@@ -2852,10 +3222,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_USETEMPDIR:
                break;
 
-       case RC_USE_INP_ENC:
-               str = _("Specify whether to pass the -T input encoding option to aspell. Enable this if you cannot check the spelling of words containing accented letters. This may not work with all dictionaries.");
-               break;
-
        case RC_USE_TOOLTIP:
                str = _("Enable the automatic appearance of tool tips in the work area.");
                break;