]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
cosmetics
[lyx.git] / src / LyXRC.cpp
index db89b3b2164465369499db56f2a4f1b46eed2f7f..b8becc0689207c104b27680d13c7d9b5847e0124 100644 (file)
@@ -3,11 +3,11 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
  * \author John Levon
- * \author André Pönitz
+ * \author André Pönitz
  * \author Allan Rae
  * \author Dekel Tsur
  *
 
 #include "LyXRC.h"
 
-#include "support/debug.h"
 #include "Color.h"
 #include "Converter.h"
+#include "FontEnums.h"
 #include "Format.h"
-#include "support/gettext.h"
-#include "Session.h"
 #include "Lexer.h"
-#include "FontEnums.h"
 #include "Mover.h"
+#include "Session.h"
+#include "version.h"
 
 #include "graphics/GraphicsTypes.h"
 
 #include "support/convert.h"
+#include "support/debug.h"
 #include "support/environment.h"
 #include "support/filetools.h"
+#include "support/gettext.h"
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/userinfo.h"
@@ -50,7 +51,7 @@ namespace os = support::os;
 namespace {
 
 // when adding something to this array keep it sorted!
-keyword_item lyxrcTags[] = {
+LexerKeyword lyxrcTags[] = {
        { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
        { "\\allow_geometry_session", LyXRC::RC_GEOMETRY_SESSION },
        { "\\alternate_language", LyXRC::RC_ALT_LANG },
@@ -63,6 +64,15 @@ keyword_item lyxrcTags[] = {
        { "\\bind_file", LyXRC::RC_BINDFILE },
        { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
        { "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
+       { "\\completion_cursor_text", LyXRC::RC_COMPLETION_CURSOR_TEXT },
+       { "\\completion_inline_delay", LyXRC::RC_COMPLETION_INLINE_DELAY },
+       { "\\completion_inline_dots", LyXRC::RC_COMPLETION_INLINE_DOTS },
+       { "\\completion_inline_math", LyXRC::RC_COMPLETION_INLINE_MATH },
+       { "\\completion_inline_text", LyXRC::RC_COMPLETION_INLINE_TEXT },
+       { "\\completion_popup_after_complete", LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE },
+       { "\\completion_popup_delay", LyXRC::RC_COMPLETION_POPUP_DELAY },
+       { "\\completion_popup_math", LyXRC::RC_COMPLETION_POPUP_MATH },
+       { "\\completion_popup_text", LyXRC::RC_COMPLETION_POPUP_TEXT },
        { "\\converter", LyXRC::RC_CONVERTER },
        { "\\converter_cache_maxage", LyXRC::RC_CONVERTER_CACHE_MAXAGE },
        { "\\copier", LyXRC::RC_COPIER },
@@ -80,6 +90,13 @@ keyword_item lyxrcTags[] = {
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
        { "\\format", LyXRC::RC_FORMAT },
+       { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
+       { "\\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 },
        { "\\index_command", LyXRC::RC_INDEX_COMMAND },
        { "\\input", LyXRC::RC_INPUT },
        { "\\kbmap", LyXRC::RC_KBMAP },
@@ -95,9 +112,14 @@ keyword_item lyxrcTags[] = {
        { "\\language_package", LyXRC::RC_LANGUAGE_PACKAGE },
        { "\\language_use_babel", LyXRC::RC_LANGUAGE_USE_BABEL },
        { "\\load_session", LyXRC::RC_LOADSESSION },
+       { "\\mac_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
+       { "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
        { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
        { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
+       { "\\mouse_wheel_speed", LyXRC::RC_MOUSE_WHEEL_SPEED },
+       { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
        { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
+       { "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
        { "\\path_prefix", LyXRC::RC_PATH_PREFIX },
        { "\\personal_dictionary", LyXRC::RC_PERS_DICT },
        { "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
@@ -153,17 +175,18 @@ keyword_item 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_spell_lib", LyXRC::RC_USE_SPELL_LIB },
        // compatibility with versions older than 1.4.0 only
        { "\\use_tempdir", LyXRC::RC_USETEMPDIR },
+       { "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
        { "\\user_email", LyXRC::RC_USER_EMAIL },
        { "\\user_name", LyXRC::RC_USER_NAME },
        { "\\view_dvi_paper_option", LyXRC::RC_VIEWDVI_PAPEROPTION },
        // compatibility with versions older than 1.4.0 only
-       { "\\viewer", LyXRC::RC_VIEWER}
+       { "\\viewer", LyXRC::RC_VIEWER},
+       { "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR}
 };
 
-const int lyxrcCount = sizeof(lyxrcTags) / sizeof(keyword_item);
+const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
 
 } // namespace anon
 
@@ -174,7 +197,8 @@ LyXRC::LyXRC()
 }
 
 
-void LyXRC::setDefaults() {
+void LyXRC::setDefaults()
+{
        bind_file = "cua";
        def_file = "default";
        ui_file = "default";
@@ -203,6 +227,7 @@ void LyXRC::setDefaults() {
        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:
        zoom = 150;
@@ -226,23 +251,23 @@ void LyXRC::setDefaults() {
        auto_region_delete = true;
        auto_reset_options = false;
        plaintext_linelen = 65;
+       mouse_wheel_speed = 1.0;
        num_lastfiles = maxlastfiles;
        check_lastfiles = true;
        use_lastfilepos = true;
        load_session = false;
        make_backup = true;
        backupdir_path.erase();
-       display_graphics = graphics::ColorDisplay;
+       display_graphics = true;
        // Spellchecker settings:
-       use_spell_lib = true;
-       isp_command = "ispell";
-       isp_accept_compound = false;
-       isp_use_input_encoding = false;
-       isp_use_alt_lang = false;
-       isp_use_pers_dict = false;
-       isp_use_esc_chars = false;
+       spellchecker_accept_compound = false;
+       spellchecker_use_input_encoding = false;
+       spellchecker_use_alt_lang = false;
+       spellchecker_use_pers_dict = false;
+       spellchecker_use_esc_chars = false;
        use_kbmap = false;
        rtl_support = true;
+       visual_cursor = false;
        auto_number = true;
        mark_foreign_language = true;
        language_auto_begin = true;
@@ -253,24 +278,45 @@ void LyXRC::setDefaults() {
        language_command_begin = "\\selectlanguage{$$lang}";
        language_command_local = "\\foreignlanguage{$$lang}{";
        sort_layouts = false;
+       group_layouts = true;
        default_language = "english";
+       gui_language = "auto";
        show_banner = true;
        windows_style_tex_paths = false;
        tex_allows_spaces = false;
        date_insert_format = "%x";
        cursor_follows_scrollbar = 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";
        use_converter_cache = true;
+       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;
+
+       // Fullscreen settings
+       full_screen_limit = false;
+       full_screen_toolbars = true;
+       full_screen_tabbar = true;
+       full_screen_scrollbar = true;
+       full_screen_width = 700;
+
+       completion_cursor_text = true;
+       completion_popup_math = true;
+       completion_popup_text = false;
+       completion_popup_delay = 2.0;
+       completion_popup_after_complete = true;
+       completion_inline_math = true;
+       completion_inline_text = false;
+       completion_inline_dots = -1;
+       completion_inline_delay = 0.2;
 }
 
 
@@ -291,12 +337,13 @@ void oldFontFormat(string & family, string & foundry)
 
 int LyXRC::read(FileName const & filename)
 {
-       Lexer lexrc(lyxrcTags, lyxrcCount);
+       Lexer lexrc(lyxrcTags);
        if (lyxerr.debugging(Debug::PARSER))
                lexrc.printTable(lyxerr);
 
        lexrc.setFile(filename);
-       if (!lexrc.isOK()) return -2;
+       if (!lexrc.isOK())
+               return -2;
 
        LYXERR(Debug::LYXRC, "Reading '" << filename << "'...");
 
@@ -306,12 +353,13 @@ int LyXRC::read(FileName const & filename)
 
 int LyXRC::read(istream & is)
 {
-       Lexer lexrc(lyxrcTags, lyxrcCount);
+       Lexer lexrc(lyxrcTags);
        if (lyxerr.debugging(Debug::PARSER))
                lexrc.printTable(lyxerr);
 
        lexrc.setStream(is);
-       if (!lexrc.isOK()) return -2;
+       if (!lexrc.isOK())
+               return -2;
 
        LYXERR(Debug::LYXRC, "Reading istream...");
 
@@ -321,7 +369,8 @@ int LyXRC::read(istream & is)
 
 int LyXRC::read(Lexer & lexrc)
 {
-       if (!lexrc.isOK()) return -2;
+       if (!lexrc.isOK())
+               return -2;
 
        while (lexrc.isOK()) {
                // By using two switches we take advantage of the compiler
@@ -338,7 +387,8 @@ int LyXRC::read(Lexer & lexrc)
                        continue;
                case Lexer::LEX_FEOF:
                        continue;
-               default: break;
+               default:
+                       break;
                }
                switch (static_cast<LyXRCTags>(le)) {
                case RC_INPUT: // Include file
@@ -353,51 +403,39 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
                case RC_BINDFILE:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                bind_file = os::internal_path(lexrc.getString());
-                       }
                        break;
 
                case RC_DEFFILE:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                def_file = os::internal_path(lexrc.getString());
-                       }
                        break;
 
                case RC_UIFILE:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                ui_file = os::internal_path(lexrc.getString());
-                       }
                        break;
 
                case RC_AUTORESET_OPTIONS:
-                       if (lexrc.next()) {
-                               auto_reset_options = lexrc.getBool();
-                       }
+                       lexrc >> auto_reset_options;
                        break;
 
                case RC_DISPLAY_GRAPHICS:
-                       if (lexrc.next()) {
-                               display_graphics = graphics::displayTranslator().find(lexrc.getString());
-                       }
+                       if (lexrc.next())
+                               display_graphics = lexrc.getString() == "true";
                        break;
 
                case RC_TEX_EXPECTS_WINDOWS_PATHS:
-                       if (lexrc.next()) {
-                               windows_style_tex_paths = lexrc.getBool();
-                       }
+                       lexrc >> windows_style_tex_paths;
                        break;
 
                case RC_TEX_ALLOWS_SPACES:
-                       if (lexrc.next()) {
-                               tex_allows_spaces = lexrc.getBool();
-                       }
+                       lexrc >> tex_allows_spaces;
                        break;
 
                case RC_KBMAP:
-                       if (lexrc.next()) {
-                               use_kbmap = lexrc.getBool();
-                       }
+                       lexrc >> use_kbmap;
                        break;
 
                case RC_KBMAP_PRIMARY:
@@ -429,75 +467,53 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_FONT_ENCODING:
-                       if (lexrc.next()) {
-                               fontenc = lexrc.getString();
-                       }
+                       lexrc >> fontenc;
                        break;
 
                case RC_PRINTER:
-                       if (lexrc.next()) {
-                               printer = lexrc.getString();
-                       }
+                       lexrc >> printer;
                        break;
 
                case RC_PRINT_COMMAND:
-                       if (lexrc.next()) {
+                       if (lexrc.next(true)) {
                                print_command = lexrc.getString();
                        }
                        break;
 
                case RC_PRINTEVENPAGEFLAG:
-                       if (lexrc.next()) {
-                               print_evenpage_flag = lexrc.getString();
-                       }
+                       lexrc >> print_evenpage_flag;
                        break;
 
                case RC_PRINTODDPAGEFLAG:
-                       if (lexrc.next()) {
-                               print_oddpage_flag = lexrc.getString();
-                       }
+                       lexrc >> print_oddpage_flag;
                        break;
 
                case RC_PRINTPAGERANGEFLAG:
-                       if (lexrc.next()) {
-                               print_pagerange_flag = lexrc.getString();
-                       }
+                       lexrc >> print_pagerange_flag;
                        break;
 
                case RC_PRINTCOPIESFLAG:
-                       if (lexrc.next()) {
-                               print_copies_flag = lexrc.getString();
-                       }
+                       lexrc >> print_copies_flag;
                        break;
 
                case RC_PRINTCOLLCOPIESFLAG:
-                       if (lexrc.next()) {
-                               print_collcopies_flag = lexrc.getString();
-                       }
+                       lexrc >> print_collcopies_flag;
                        break;
 
                case RC_PRINTREVERSEFLAG:
-                       if (lexrc.next()) {
-                               print_reverse_flag = lexrc.getString();
-                       }
+                       lexrc >> print_reverse_flag;
                        break;
 
                case RC_PRINTLANDSCAPEFLAG:
-                       if (lexrc.next()) {
-                               print_landscape_flag = lexrc.getString();
-                       }
+                       lexrc >> print_landscape_flag;
                        break;
 
                case RC_PRINTTOPRINTER:
-                       if (lexrc.next()) {
-                               print_to_printer = lexrc.getString();
-                       }
+                       lexrc >> print_to_printer;
                        break;
 
                case RC_PRINT_ADAPTOUTPUT:
-                       if (lexrc.next()) {
-                               print_adapt_output = lexrc.getBool();
-                       }
+                       lexrc >> print_adapt_output;
                        break;
 
                case RC_PRINTTOFILE:
@@ -507,181 +523,123 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_PRINTFILEEXTENSION:
-                       if (lexrc.next()) {
-                               print_file_extension = lexrc.getString();
-                       }
+                       lexrc >> print_file_extension;
                        break;
 
                case RC_PRINTEXSTRAOPTIONS:
-                       if (lexrc.next()) {
-                               print_extra_options = lexrc.getString();
-                       }
+                       lexrc >> print_extra_options;
                        break;
 
                case RC_PRINTSPOOL_COMMAND:
-                       if (lexrc.next()) {
+                       if (lexrc.next(true)) {
                                print_spool_command = lexrc.getString();
                        }
                        break;
 
                case RC_PRINTSPOOL_PRINTERPREFIX:
-                       if (lexrc.next()) {
-                               print_spool_printerprefix = lexrc.getString();
-                       }
+                       lexrc >> print_spool_printerprefix;
                        break;
 
                case RC_PRINTPAPERDIMENSIONFLAG:
-                       if (lexrc.next()) {
-                               print_paper_dimension_flag = lexrc.getString();
-                       }
+                       lexrc >> print_paper_dimension_flag;
                        break;
 
                case RC_PRINTPAPERFLAG:
-                       if (lexrc.next()) {
-                               print_paper_flag = lexrc.getString();
-                       }
+                       lexrc >> print_paper_flag;
                        break;
 
                case RC_CUSTOM_EXPORT_COMMAND:
-                       if (lexrc.next()) {
-                               custom_export_command = lexrc.getString();
-                       }
+                       lexrc >> custom_export_command;
                        break;
 
                case RC_CUSTOM_EXPORT_FORMAT:
-                       if (lexrc.next()) {
-                               custom_export_format = lexrc.getString();
-                       }
+                       lexrc >> custom_export_format;
                        break;
 
                case RC_DEFAULT_PAPERSIZE:
                        if (lexrc.next()) {
-                               string const size =
-                                       ascii_lowercase(lexrc.getString());
+                               string const size = ascii_lowercase(lexrc.getString());
                                if (size == "usletter")
-                                       default_papersize =
-                                               PAPER_USLETTER;
+                                       default_papersize = PAPER_USLETTER;
                                else if (size == "legal")
-                                       default_papersize =
-                                               PAPER_USLEGAL;
+                                       default_papersize = PAPER_USLEGAL;
                                else if (size == "executive")
-                                       default_papersize =
-                                               PAPER_USEXECUTIVE;
+                                       default_papersize = PAPER_USEXECUTIVE;
                                else if (size == "a3")
-                                       default_papersize =
-                                               PAPER_A3;
+                                       default_papersize = PAPER_A3;
                                else if (size == "a4")
-                                       default_papersize =
-                                               PAPER_A4;
+                                       default_papersize = PAPER_A4;
                                else if (size == "a5")
-                                       default_papersize =
-                                               PAPER_A5;
+                                       default_papersize = PAPER_A5;
                                else if (size == "b5")
-                                       default_papersize =
-                                               PAPER_B5;
+                                       default_papersize = PAPER_B5;
                                else if (size == "default")
-                                       default_papersize =
-                                               PAPER_DEFAULT;
+                                       default_papersize = PAPER_DEFAULT;
                        }
                        break;
 
                case RC_VIEWDVI_PAPEROPTION:
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                view_dvi_paper_option = lexrc.getString();
-                       } else {
+                       else
                                view_dvi_paper_option.erase();
-                       }
                        break;
 
                case RC_CHKTEX_COMMAND:
-                       if (lexrc.next()) {
+                       if (lexrc.next(true)) {
                                chktex_command = lexrc.getString();
                        }
                        break;
 
                case RC_BIBTEX_COMMAND:
-                       if (lexrc.next()) {
+                       if (lexrc.next(true)) {
                                bibtex_command = lexrc.getString();
                        }
                        break;
 
                case RC_INDEX_COMMAND:
-                       if (lexrc.next()) {
+                       if (lexrc.next(true)) {
                                index_command = lexrc.getString();
                        }
                        break;
 
-               case RC_SCREEN_DPI:
-                       if (lexrc.next()) {
-                               dpi = lexrc.getInteger();
+               case RC_NOMENCL_COMMAND:
+                       if (lexrc.next(true)) {
+                               nomencl_command = lexrc.getString();
                        }
                        break;
 
+               case RC_SCREEN_DPI:
+                       lexrc >> dpi;
+                       break;
+
                case RC_SCREEN_ZOOM:
-                       if (lexrc.next()) {
-                               zoom = lexrc.getInteger();
-                       }
+                       lexrc >> zoom;
                        break;
 
                case RC_GEOMETRY_SESSION:
-                       if (lexrc.next()) {
-                               allow_geometry_session = lexrc.getBool();
-                       }
+                       lexrc >> allow_geometry_session;
                        break;
 
                case RC_SCREEN_FONT_SIZES:
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_TINY] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_SCRIPT] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_FOOTNOTE] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_SMALL] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_NORMAL] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_LARGE] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_LARGER] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_LARGEST] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_HUGE] =
-                                       lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               font_sizes[FONT_SIZE_HUGER] =
-                                       lexrc.getString();
-                       }
+                       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];
                        break;
 
                case RC_SCREEN_FONT_SCALABLE:
-                       if (lexrc.next()) {
-                               use_scalable_fonts = lexrc.getBool();
-                       }
+                       lexrc >> use_scalable_fonts;
                        break;
 
                case RC_AUTOSAVE:
-                       if (lexrc.next()) {
-                               autosave = lexrc.getInteger();
-                       }
+                       lexrc >> autosave;
                        break;
 
                case RC_DOCUMENTPATH:
@@ -713,33 +671,64 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_USETEMPDIR:
-                       if (lexrc.next()) {
-                               lyxerr << "Ignoring obsolete use_tempdir flag." << endl;
-                       }
+                       if (lexrc.next())
+                               LYXERR0("Ignoring obsolete use_tempdir flag.");
                        break;
 
                case RC_USELASTFILEPOS:
-                       if (lexrc.next()) {
-                               use_lastfilepos = lexrc.getBool();
-                       }
+                       lexrc >> use_lastfilepos;
                        break;
 
                case RC_LOADSESSION:
-                       if (lexrc.next()) {
-                               load_session = lexrc.getBool();
-                       }
+                       lexrc >> load_session;
+                       break;
+
+               case RC_MOUSE_WHEEL_SPEED:
+                       lexrc >> mouse_wheel_speed;
+                       break;
+
+               case RC_COMPLETION_INLINE_DELAY:
+                       lexrc >> completion_inline_delay;
+                       break;
+
+               case RC_COMPLETION_INLINE_MATH:
+                       lexrc >> completion_inline_math;
+                       break;
+
+               case RC_COMPLETION_INLINE_TEXT:
+                       lexrc >> completion_inline_text;
+                       break;
+
+               case RC_COMPLETION_INLINE_DOTS:
+                       lexrc >> completion_inline_dots;
+                       break;
+
+               case RC_COMPLETION_POPUP_DELAY:
+                       lexrc >> completion_popup_delay;
+                       break;
+
+               case RC_COMPLETION_POPUP_MATH:
+                       lexrc >> completion_popup_math;
+                       break;
+
+               case RC_COMPLETION_POPUP_TEXT:
+                       lexrc >> completion_popup_text;
+                       break;
+
+               case RC_COMPLETION_CURSOR_TEXT:
+                       lexrc >> completion_cursor_text;
+                       break;
+
+               case RC_COMPLETION_POPUP_AFTER_COMPLETE:
+                       lexrc >> completion_popup_after_complete;
                        break;
 
                case RC_NUMLASTFILES:
-                       if (lexrc.next()) {
-                               num_lastfiles = lexrc.getInteger();
-                       }
+                       lexrc >> num_lastfiles;
                        break;
 
                case RC_CHECKLASTFILES:
-                       if (lexrc.next()) {
-                               check_lastfiles = lexrc.getBool();
-                       }
+                       lexrc >> check_lastfiles;
                        break;
 
                case RC_SCREEN_FONT_ROMAN:
@@ -766,40 +755,29 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_SCREEN_FONT_ROMAN_FOUNDRY:
-                       if (lexrc.next()) {
-                               roman_font_foundry = lexrc.getString();
-                       }
+                       lexrc >> roman_font_foundry;
                        break;
 
                case RC_SCREEN_FONT_SANS_FOUNDRY:
-                       if (lexrc.next()) {
-                               sans_font_foundry = lexrc.getString();
-                       }
+                       lexrc >> sans_font_foundry;
                        break;
 
                case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
-                       if (lexrc.next()) {
-                               typewriter_font_foundry = lexrc.getString();
-                       }
+                       lexrc >> typewriter_font_foundry;
                        break;
 
-               case RC_SET_COLOR:
-               {
-                       string lyx_name, x11_name;
-
-                       if (lexrc.next()) {
-                               lyx_name = lexrc.getString();
-                       } else {
+               case RC_SET_COLOR: {
+                       if (!lexrc.next()) {
                                lexrc.printError("Missing color tag.");
                                break;
                        }
+                       string lyx_name = lexrc.getString();
 
-                       if (lexrc.next()) {
-                               x11_name = lexrc.getString();
-                       } else {
+                       if (!lexrc.next()) {
                                lexrc.printError("Missing color name for color: `$$Token'");
                                break;
                        }
+                       string x11_name = lexrc.getString();
 
                        ColorCode const col =
                                lcolor.getFromLyXName(lyx_name);
@@ -808,18 +786,14 @@ int LyXRC::read(Lexer & lexrc)
                            col == Color_ignore)
                                break;
 
-                       if (!lcolor.setColor(col, x11_name)) {
-                               lyxerr << "Bad lyxrc set_color for "
-                                       << lyx_name << endl;
-
-                       }
+                       if (!lcolor.setColor(col, x11_name))
+                               LYXERR0("Bad lyxrc set_color for " << lyx_name);
                        break;
                }
+
                case RC_AUTOREGIONDELETE:
                        // Auto region delete defaults to true
-                       if (lexrc.next()) {
-                               auto_region_delete = lexrc.getBool();
-                       }
+                       lexrc >> auto_region_delete;
                        break;
 
                case RC_SERVERPIPE:
@@ -830,87 +804,67 @@ int LyXRC::read(Lexer & lexrc)
                        break;
 
                case RC_CURSOR_FOLLOWS_SCROLLBAR:
+                       lexrc >> cursor_follows_scrollbar;
+                       break;
+
+               case RC_MAC_LIKE_WORD_MOVEMENT:
+                       lexrc >> mac_like_word_movement;
+                       break;
+
+               case RC_MACRO_EDIT_STYLE:
                        if (lexrc.next()) {
-                               cursor_follows_scrollbar = lexrc.getBool();
+                               switch (lexrc.getInteger()) {
+                               case 0: macro_edit_style = MACRO_EDIT_INLINE_BOX; break;
+                               case 1: macro_edit_style = MACRO_EDIT_INLINE; break;
+                               case 2: macro_edit_style = MACRO_EDIT_LIST; break;
+                               }
                        }
                        break;
 
                case RC_DIALOGS_ICONIFY_WITH_MAIN:
-                       if (lexrc.next()) {
-                               dialogs_iconify_with_main = lexrc.getBool();
-                       }
+                       lexrc >> dialogs_iconify_with_main;
                        break;
 
-               case RC_PLAINTEXT_ROFF_COMMAND:
-                       if (lexrc.next()) {
-                               plaintext_roff_command = lexrc.getString();
-                       }
+               case RC_PLAINTEXT_ROFF_COMMAND: 
+                       (void) lexrc.getString(); // Obsoleted in 2.0
                        break;
                case RC_PLAINTEXT_LINELEN:
-                       if (lexrc.next()) {
-                               plaintext_linelen = lexrc.getInteger();
-                       }
+                       lexrc >> plaintext_linelen;
                        break;
                        // Spellchecker settings:
-               case RC_USE_SPELL_LIB:
-                       if (lexrc.next()) {
-                               use_spell_lib = lexrc.getBool();
-                       }
-                       break;
-               case RC_SPELL_COMMAND:
-                       if (lexrc.next()) {
-                               isp_command = lexrc.getString();
-                       }
-                       break;
                case RC_ACCEPT_COMPOUND:
-                       if (lexrc.next()) {
-                               isp_accept_compound = lexrc.getBool();
-                       }
+                       lexrc >> spellchecker_accept_compound;
                        break;
                case RC_USE_INP_ENC:
-                       if (lexrc.next()) {
-                               isp_use_input_encoding = lexrc.getBool();
-                       }
+                       lexrc >> spellchecker_use_input_encoding;
                        break;
                case RC_USE_ALT_LANG:
-                       if (lexrc.next()) {
-                               isp_use_alt_lang = lexrc.getBool();
-                       }
+                       lexrc >> spellchecker_use_alt_lang;
                        break;
                case RC_USE_PERS_DICT:
-                       if (lexrc.next()) {
-                               isp_use_pers_dict = lexrc.getBool();
-                       }
+                       lexrc >> spellchecker_use_pers_dict;
+                       break;
+               case RC_USE_TOOLTIP:
+                       lexrc >> use_tooltip;
                        break;
                case RC_USE_PIXMAP_CACHE:
-                       if (lexrc.next()) {
-                               use_pixmap_cache = lexrc.getBool();
-                       }
+                       lexrc >> use_pixmap_cache;
                        break;
                case RC_USE_ESC_CHARS:
-                       if (lexrc.next()) {
-                               isp_use_esc_chars = lexrc.getBool();
-                       }
+                       lexrc >> spellchecker_use_esc_chars;
                        break;
                case RC_ALT_LANG:
-                       if (lexrc.next()) {
-                               isp_alt_lang = lexrc.getString();
-                       }
+                       lexrc >> spellchecker_alt_lang;
                        break;
                case RC_PERS_DICT:
-                       if (lexrc.next()) {
-                               isp_pers_dict = os::internal_path(lexrc.getString());
-                       }
+                       if (lexrc.next())
+                               spellchecker_pers_dict = os::internal_path(lexrc.getString());
                        break;
                case RC_ESC_CHARS:
-                       if (lexrc.next()) {
-                               isp_esc_chars = lexrc.getString();
-                       }
+                       lexrc >> spellchecker_esc_chars;
                        break;
                case RC_MAKE_BACKUP:
-                       if (lexrc.next()) {
-                               make_backup = lexrc.getBool();
-                       }
+                       lexrc >> make_backup;
                        break;
                case RC_BACKUPDIR_PATH:
                        if (lexrc.next()) {
@@ -919,129 +873,85 @@ int LyXRC::read(Lexer & lexrc)
                        }
                        break;
                case RC_DATE_INSERT_FORMAT:
-                       if (lexrc.next()) {
-                               date_insert_format = lexrc.getString();
-                       }
+                       lexrc >> date_insert_format;
                        break;
                case RC_LANGUAGE_PACKAGE:
-                       if (lexrc.next()) {
-                               language_package = lexrc.getString();
-                       }
+                       lexrc >> language_package;
                        break;
                case RC_LANGUAGE_AUTO_BEGIN:
-                       if (lexrc.next()) {
-                               language_auto_begin = lexrc.getBool();
-                       }
+                       lexrc >> language_auto_begin;
                        break;
                case RC_LANGUAGE_AUTO_END:
-                       if (lexrc.next()) {
-                               language_auto_end = lexrc.getBool();
-                       }
+                       lexrc >> language_auto_end;
                        break;
                case RC_LANGUAGE_GLOBAL_OPTIONS:
-                       if (lexrc.next()) {
-                               language_global_options = lexrc.getBool();
-                       }
+                       lexrc >> language_global_options;
                        break;
                case RC_LANGUAGE_USE_BABEL:
-                       if (lexrc.next()) {
-                               language_use_babel = lexrc.getBool();
-                       }
+                       lexrc >> language_use_babel;
                        break;
                case RC_LANGUAGE_COMMAND_BEGIN:
-                       if (lexrc.next()) {
-                               language_command_begin = lexrc.getString();
-                       }
+                       lexrc >> language_command_begin;
                        break;
                case RC_LANGUAGE_COMMAND_END:
-                       if (lexrc.next()) {
-                               language_command_end = lexrc.getString();
-                       }
+                       lexrc >> language_command_end;
                        break;
                case RC_LANGUAGE_COMMAND_LOCAL:
-                       if (lexrc.next()) {
-                               language_command_local = lexrc.getString();
-                       }
+                       lexrc >> language_command_local;
                        break;
                case RC_RTL_SUPPORT:
-                       if (lexrc.next()) {
-                               rtl_support = lexrc.getBool();
-                       }
+                       lexrc >> rtl_support;
+                       break;
+               case RC_VISUAL_CURSOR:
+                       lexrc >> visual_cursor;
                        break;
                case RC_AUTO_NUMBER:
-                       if (lexrc.next()) {
-                               auto_number = lexrc.getBool();
-                       }
+                       lexrc >> auto_number;
                        break;
                case RC_MARK_FOREIGN_LANGUAGE:
-                       if (lexrc.next()) {
-                               mark_foreign_language = lexrc.getBool();
-                       }
+                       lexrc >> mark_foreign_language;
                        break;
 
                case RC_COPIER: {
                        string fmt, command;
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                fmt = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
+                       if (lexrc.next(true))
                                command = lexrc.getString();
-                       }
                        setMover(fmt, command);
                        break;
                }
 
                case RC_CONVERTER: {
                        string from, to, command, flags;
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                from = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                to = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
+                       if (lexrc.next(true))
                                command = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
+                       if (lexrc.next())
                                flags = lexrc.getString();
-                       }
-                       if (command.empty()) {
+                       if (command.empty())
                                theConverters().erase(from, to);
-                       } else {
+                       else
                                theConverters().add(from, to, command, flags);
-                       }
                        break;
                }
                // compatibility with versions older than 1.4.0 only
                case RC_VIEWER: {
                        string format, command;
-                       if (lexrc.next()) {
-                               format = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               command = lexrc.getString();
-                       }
+                       lexrc >> format >> command;
                        formats.setViewer(format, command);
                        break;
                }
                case RC_FORMAT: {
                        string format, extension, prettyname, shortcut;
-                       if (lexrc.next()) {
-                               format = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               extension = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               prettyname = lexrc.getString();
-                       }
-                       if (lexrc.next()) {
-                               shortcut = lexrc.getString();
-                       }
+                       lexrc >> format >> extension >> prettyname >> shortcut;
                        string viewer, editor;
-                       if (lexrc.next())
+                       if (lexrc.next(true))
                                viewer = lexrc.getString();
-                       if (lexrc.next())
+                       if (lexrc.next(true))
                                editor = lexrc.getString();
                        string flags;
                        // Hack to ensure compatibility with versions older
@@ -1061,23 +971,21 @@ int LyXRC::read(Lexer & lexrc)
                        int flgs = Format::none;
                        while (!flags.empty()) {
                                string flag;
-                               flags = support::split(flags, flag, ',');
+                               flags = split(flags, flag, ',');
                                if (flag == "document")
                                        flgs |= Format::document;
                                else if (flag == "vector")
                                        flgs |= Format::vector;
                                else
-                                       lyxerr << "Ignoring unknown flag `"
+                                       LYXERR0("Ignoring unknown flag `"
                                               << flag << "' for format `"
-                                              << format << "'." << endl;
+                                              << format << "'.");
                        }
                        if (prettyname.empty()) {
-                               if (theConverters().formatIsUsed(format)) {
-                                       lyxerr << "Can't delete format "
-                                              << format << endl;
-                               } else {
+                               if (theConverters().formatIsUsed(format))
+                                       LYXERR0("Can't delete format " << format);
+                               else
                                        formats.erase(format);
-                               }
                        } else {
                                formats.add(format, extension, prettyname,
                                            shortcut, viewer, editor, flgs);
@@ -1085,21 +993,19 @@ int LyXRC::read(Lexer & lexrc)
                        break;
                }
                case RC_DEFAULT_LANGUAGE:
-                       if (lexrc.next()) {
-                               default_language = lexrc.getString();
-                       }
+                       lexrc >> default_language;
+                       break;
+
+               case RC_GUI_LANGUAGE:
+                       lexrc >> gui_language;
                        break;
 
                case RC_LABEL_INIT_LENGTH:
-                       if (lexrc.next()) {
-                               label_init_length = lexrc.getInteger();
-                       }
+                       lexrc >> label_init_length;
                        break;
 
                case RC_SHOW_BANNER:
-                       if (lexrc.next()) {
-                               show_banner = lexrc.getBool();
-                       }
+                       lexrc >> show_banner;
                        break;
 
                case RC_PREVIEW:
@@ -1112,57 +1018,71 @@ int LyXRC::read(Lexer & lexrc)
                                else {
                                        preview = PREVIEW_OFF;
                                        if (tmp != "false" && tmp != "off")
-                                               lyxerr << "Unrecognized "
-                                                       "preview status \""
-                                                      << tmp << '\n' << endl;
+                                               LYXERR0("Unrecognized preview status \""
+                                                      << tmp << '\n');
                                }
                        }
                        break;
 
                case RC_PREVIEW_HASHED_LABELS:
-                       if (lexrc.next()) {
-                               preview_hashed_labels = lexrc.getBool();
-                       }
+                       lexrc >> preview_hashed_labels;
                        break;
 
                case RC_PREVIEW_SCALE_FACTOR:
-                       if (lexrc.next()) {
-                               preview_scale_factor = lexrc.getString();
-                       }
+                       lexrc >> preview_scale_factor;
                        break;
 
                case RC_USER_NAME:
-                       if (lexrc.next())
-                               user_name = lexrc.getString();
+                       lexrc >> user_name;
                        break;
-
                case RC_USER_EMAIL:
-                       if (lexrc.next())
-                               user_email = lexrc.getString();
+                       lexrc >> user_email;
                        break;
 
                case RC_PATH_PREFIX:
-                       if (lexrc.next())
-                               path_prefix = lexrc.getString();
+                       lexrc >> path_prefix;
                        break;
 
                case RC_USE_CONVERTER_CACHE:
-                       if (lexrc.next())
-                               use_converter_cache = lexrc.getBool();
+                       lexrc >> use_converter_cache;
                        break;
-
                case RC_CONVERTER_CACHE_MAXAGE:
-                       if (lexrc.next())
-                               converter_cache_maxage =
-                                       convert<unsigned int>(lexrc.getString());
+                       lexrc >> converter_cache_maxage;
                        break;
 
                case RC_SORT_LAYOUTS:
-                       if (lexrc.next())
-                               sort_layouts = lexrc.getBool();
+                       lexrc >> sort_layouts;
+                       break;
+               case RC_GROUP_LAYOUTS:
+                       lexrc >> group_layouts;
+                       break;
+               case RC_FULL_SCREEN_LIMIT:
+                       lexrc >> full_screen_limit;
+                       break;
+               case RC_FULL_SCREEN_TOOLBARS:
+                       lexrc >> full_screen_toolbars;
+                       break;
+               case RC_FULL_SCREEN_SCROLLBAR:
+                       lexrc >> full_screen_scrollbar;
+                       break;
+               case RC_FULL_SCREEN_TABBAR:
+                       lexrc >> full_screen_tabbar;
+                       break;
+               case RC_FULL_SCREEN_WIDTH:
+                       lexrc >> full_screen_width;
+                       break;
+               case RC_OPEN_BUFFERS_IN_TABS:
+                       lexrc >> open_buffers_in_tabs;
+                       break;
+
+               // Obsoleted in 2.0
+               case RC_SPELL_COMMAND:
+               case RC_USE_SPELL_LIB:
+                       (void) lexrc.getString();
                        break;
 
-               case RC_LAST: break; // this is just a dummy
+               case RC_LAST:
+                       break; // this is just a dummy
                }
        }
 
@@ -1209,6 +1129,17 @@ private:
 };
 
 
+namespace {
+
+       // Escape \ and " so that LyXLex can read the string later
+       string escapeCommand(string const & str) {
+               return subst(subst(str , "\\", "\\\\"), 
+                            "\"", "\\\"");
+       }
+
+}
+
+
 void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
 {
        LyXRCTags tag = RC_LAST;
@@ -1220,21 +1151,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        }
 
        if (tag == RC_LAST)
-               os << "### This file is part of\n"
-                  << "### ========================================================\n"
-                  << "###          LyX, The Document Processor\n"
-                  << "###\n"
-                  << "###          Copyright 1995 Matthias Ettrich\n"
-                  << "###          Copyright 1995-2007 The LyX Team.\n"
-                  << "###\n"
-                  << "### ========================================================\n"
-                  << "\n"
-                  << "# This file is written by LyX, if you want to make your own\n"
-                  << "# modifications you should do them from inside LyX and save\n"
+               os << "# LyX " << lyx_version
+                  << " generated this file. If you want to make your own\n"
+                  << "# modifications you should do them from inside LyX and save.\n"
                   << "\n";
 
        // 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
+       // the elements in the LyXRCTags enum are 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.
@@ -1316,10 +1239,9 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (ignore_system_lyxrc ||
                    display_graphics != system_lyxrc.display_graphics) {
                        os << "# Display graphics within LyX\n"
-                          << "# monochrome|grayscale|color|none\n"
+                          << "# true|false\n"
                           << "\\display_graphics "
-                          << graphics::displayTranslator().find(
-                                graphics::DisplayType(display_graphics))
+                          << (display_graphics ? "true" : "false")
                           << '\n';
                }
                if (tag != RC_LAST)
@@ -1332,6 +1254,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_GROUP_LAYOUTS:
+               if (ignore_system_lyxrc ||
+                   group_layouts != system_lyxrc.group_layouts) {
+                       os << "# Group layouts by their category.\n"
+                          << "\\group_layouts " << convert<string>(group_layouts) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_VIEWDVI_PAPEROPTION:
                if (ignore_system_lyxrc ||
                    view_dvi_paper_option
@@ -1376,21 +1306,28 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        case RC_CHKTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    chktex_command != system_lyxrc.chktex_command) {
-                       os << "\\chktex_command \"" << chktex_command << "\"\n";
+                       os << "\\chktex_command \"" << escapeCommand(chktex_command) << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
        case RC_BIBTEX_COMMAND:
                if (ignore_system_lyxrc ||
                    bibtex_command != system_lyxrc.bibtex_command) {
-                       os << "\\bibtex_command \"" << bibtex_command << "\"\n";
+                       os << "\\bibtex_command \"" << escapeCommand(bibtex_command) << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
        case RC_INDEX_COMMAND:
                if (ignore_system_lyxrc ||
                    index_command != system_lyxrc.index_command) {
-                       os << "\\index_command \"" << index_command << "\"\n";
+                       os << "\\index_command \"" << escapeCommand(index_command) << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_NOMENCL_COMMAND:
+               if (ignore_system_lyxrc ||
+                   nomencl_command != system_lyxrc.nomencl_command) {
+                       os << "\\nomencl_command \"" << escapeCommand(nomencl_command) << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
@@ -1567,6 +1504,28 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_MAC_LIKE_WORD_MOVEMENT:
+               if (ignore_system_lyxrc ||
+                   mac_like_word_movement
+                   != system_lyxrc.mac_like_word_movement) {
+                       os << "\\mac_like_word_movement "
+                          << convert<string>(mac_like_word_movement) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_MACRO_EDIT_STYLE:
+               if (ignore_system_lyxrc ||
+                   macro_edit_style
+                   != system_lyxrc.macro_edit_style) {
+                       os << "\\macro_edit_style ";
+                       switch (macro_edit_style) {
+                       case MACRO_EDIT_INLINE_BOX: os << "0\n"; break;
+                       case MACRO_EDIT_INLINE: os << "1\n"; break;
+                       case MACRO_EDIT_LIST: os << "2\n"; break;
+                       }
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_DIALOGS_ICONIFY_WITH_MAIN:
                if (ignore_system_lyxrc ||
                    dialogs_iconify_with_main
@@ -1673,18 +1632,71 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_FULL_SCREEN_LIMIT:
+               if (ignore_system_lyxrc ||
+                   full_screen_limit != system_lyxrc.full_screen_limit) {
+                       os << "\\fullscreen_limit "
+                          << convert<string>(full_screen_limit)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FULL_SCREEN_TOOLBARS:
+               if (ignore_system_lyxrc ||
+                   full_screen_toolbars != system_lyxrc.full_screen_toolbars) {
+                       os << "\\fullscreen_toolbars "
+                          << convert<string>(full_screen_toolbars)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FULL_SCREEN_SCROLLBAR:
+               if (ignore_system_lyxrc ||
+                   full_screen_scrollbar != system_lyxrc.full_screen_scrollbar) {
+                       os << "\\fullscreen_scrollbar "
+                          << convert<string>(full_screen_scrollbar)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FULL_SCREEN_TABBAR:
+               if (ignore_system_lyxrc ||
+                   full_screen_tabbar != system_lyxrc.full_screen_tabbar) {
+                       os << "\\fullscreen_tabbar "
+                          << convert<string>(full_screen_tabbar)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_FULL_SCREEN_WIDTH:
+               if (ignore_system_lyxrc ||
+                   full_screen_width != system_lyxrc.full_screen_width) {
+                       os << "\\fullscreen_width "
+                          << convert<string>(full_screen_width)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_OPEN_BUFFERS_IN_TABS:
+               if (ignore_system_lyxrc ||
+                   open_buffers_in_tabs != system_lyxrc.open_buffers_in_tabs) {
+                       os << "\\open_buffers_in_tabs "
+                          << convert<string>(open_buffers_in_tabs)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
 
-               os << "\n#\n"
-                  << "# COLOR SECTION ###################################\n"
-                  << "#\n\n";
+       os << "\n#\n"
+                       << "# COLOR SECTION ###################################\n"
+                       << "#\n\n";
 
        case RC_SET_COLOR:
                for (int i = 0; i < Color_ignore; ++i) {
                        ColorCode lc = static_cast<ColorCode>(i);
-
-                       string const col(lcolor.getX11Name(lc));
-                       if (ignore_system_lyxrc ||
-                           col != system_lcolor.getX11Name(lc)) {
+                       string const col = lcolor.getX11Name(lc);
+                       if (ignore_system_lyxrc
+                           || col != system_lcolor.getX11Name(lc)) {
                                os << "\\set_color \""
                                   << lcolor.getLyXName(lc) << "\" \""
                                   << col << "\"\n";
@@ -1716,7 +1728,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        case RC_PRINT_COMMAND:
                if (ignore_system_lyxrc ||
                    print_command != system_lyxrc.print_command) {
-                       os << "\\print_command \"" << print_command << "\"\n";
+                       os << "\\print_command \"" << escapeCommand(print_command) << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
@@ -1731,7 +1743,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
        case RC_PRINTSPOOL_COMMAND:
                if (ignore_system_lyxrc ||
                    print_spool_command != system_lyxrc.print_spool_command) {
-                       os << "\\print_spool_command \"" << print_spool_command
+                       os << "\\print_spool_command \"" << escapeCommand(print_spool_command)
                           << "\"\n";
                }
                if (tag != RC_LAST)
@@ -1910,6 +1922,84 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_MOUSE_WHEEL_SPEED:
+               if (ignore_system_lyxrc ||
+                   mouse_wheel_speed != system_lyxrc.mouse_wheel_speed) {
+                       os << "\\mouse_wheel_speed " << mouse_wheel_speed << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_INLINE_DELAY:
+               if (ignore_system_lyxrc ||
+                   completion_inline_delay != system_lyxrc.completion_inline_delay) {
+                       os << "\\completion_inline_delay " << completion_inline_delay << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_INLINE_MATH:
+               if (ignore_system_lyxrc ||
+                   completion_inline_math != system_lyxrc.completion_inline_math) {
+                       os << "\\completion_inline_math "
+                               << convert<string>(completion_inline_math) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_INLINE_TEXT:
+               if (ignore_system_lyxrc ||
+                   completion_inline_text != system_lyxrc.completion_inline_text) {
+                       os << "\\completion_inline_text "
+                               << convert<string>(completion_inline_text) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_INLINE_DOTS:
+               if (ignore_system_lyxrc ||
+                   completion_inline_dots != system_lyxrc.completion_inline_dots) {
+                       os << "\\completion_inline_dots "
+                               << convert<string>(completion_inline_dots) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_POPUP_DELAY:
+               if (ignore_system_lyxrc ||
+                   completion_popup_delay != system_lyxrc.completion_popup_delay) {
+                       os << "\\completion_popup_delay " << completion_popup_delay << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_POPUP_MATH:
+               if (ignore_system_lyxrc ||
+                   completion_popup_math != system_lyxrc.completion_popup_math) {
+                       os << "\\completion_popup_math "
+                               << convert<string>(completion_popup_math) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_POPUP_TEXT:
+               if (ignore_system_lyxrc ||
+                   completion_popup_text != system_lyxrc.completion_popup_text) {
+                       os << "\\completion_popup_text "
+                               << convert<string>(completion_popup_text) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_CURSOR_TEXT:
+               if (ignore_system_lyxrc ||
+                   completion_cursor_text != system_lyxrc.completion_cursor_text) {
+                       os << "\\completion_cursor_text "
+                          << convert<string>(completion_cursor_text) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+       case RC_COMPLETION_POPUP_AFTER_COMPLETE:
+               if (ignore_system_lyxrc ||
+                   completion_popup_after_complete
+                   != system_lyxrc.completion_popup_after_complete) {
+                       os << "\\completion_popup_after_complete "
+                               << convert<string>(completion_popup_after_complete) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_NUMLASTFILES:
                if (ignore_system_lyxrc ||
                    num_lastfiles != system_lyxrc.num_lastfiles) {
@@ -1953,6 +2043,9 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // Ignore it
+       case RC_PLAINTEXT_ROFF_COMMAND: // Obsoleted in 2.0
+               if (tag != RC_LAST)
+                       break;
        case RC_PLAINTEXT_LINELEN:
                if (ignore_system_lyxrc ||
                    plaintext_linelen != system_lyxrc.plaintext_linelen) {
@@ -1980,80 +2073,69 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# PLAIN TEXT EXPORT SECTION ##############################\n"
                   << "#\n\n";
 
-       case RC_PLAINTEXT_ROFF_COMMAND:
-               if (ignore_system_lyxrc ||
-                   plaintext_roff_command != system_lyxrc.plaintext_roff_command) {
-                       os << "\\plaintext_roff_command \"" << plaintext_roff_command
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
                os << "\n#\n"
                   << "# SPELLCHECKER SECTION ##############################\n"
                   << "#\n\n";
-       case RC_USE_SPELL_LIB:
-               if (ignore_system_lyxrc ||
-                   use_spell_lib != system_lyxrc.use_spell_lib) {
-                       os << "\\use_spell_lib " << convert<string>(use_spell_lib) << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
        case RC_SPELL_COMMAND:
-               if (ignore_system_lyxrc ||
-                   isp_command != system_lyxrc.isp_command) {
-                       os << "\\spell_command \"" << isp_command << "\"\n";
-               }
+       case RC_USE_SPELL_LIB:
+               // Obsoleted in 2.0
                if (tag != RC_LAST)
                        break;
        case RC_ACCEPT_COMPOUND:
                if (ignore_system_lyxrc ||
-                   isp_accept_compound != system_lyxrc.isp_accept_compound) {
-                       os << "\\accept_compound " << convert<string>(isp_accept_compound)
+                   spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
+                       os << "\\accept_compound " << convert<string>(spellchecker_accept_compound)
                           << '\n';
                }
                if (tag != RC_LAST)
                        break;
        case RC_USE_ALT_LANG:
                if (ignore_system_lyxrc ||
-                   isp_use_alt_lang != system_lyxrc.isp_use_alt_lang) {
-                       os << "\\use_alt_language " << convert<string>(isp_use_alt_lang)
+                   spellchecker_use_alt_lang != system_lyxrc.spellchecker_use_alt_lang) {
+                       os << "\\use_alt_language " << convert<string>(spellchecker_use_alt_lang)
                           << '\n';
                }
                if (tag != RC_LAST)
                        break;
        case RC_ALT_LANG:
                if (ignore_system_lyxrc ||
-                   isp_alt_lang != system_lyxrc.isp_alt_lang) {
-                       os << "\\alternate_language \"" << isp_alt_lang
+                   spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
+                       os << "\\alternate_language \"" << spellchecker_alt_lang
                           << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
        case RC_USE_ESC_CHARS:
                if (ignore_system_lyxrc ||
-                   isp_use_esc_chars != system_lyxrc.isp_use_esc_chars) {
-                       os << "\\use_escape_chars " << convert<string>(isp_use_esc_chars)
+                   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:
                if (ignore_system_lyxrc ||
-                   isp_esc_chars != system_lyxrc.isp_esc_chars) {
-                       os << "\\escape_chars \"" << isp_esc_chars << "\"\n";
+                   spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
+                       os << "\\escape_chars \"" << spellchecker_esc_chars << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
        case RC_USE_PERS_DICT:
                if (ignore_system_lyxrc ||
-                   isp_use_pers_dict != system_lyxrc.isp_use_pers_dict) {
+                   spellchecker_use_pers_dict != system_lyxrc.spellchecker_use_pers_dict) {
                        os << "\\use_personal_dictionary "
-                          << convert<string>(isp_use_pers_dict)
+                          << convert<string>(spellchecker_use_pers_dict)
                           << '\n';
                }
                if (tag != RC_LAST)
                        break;
+       case RC_USE_TOOLTIP:
+               if (ignore_system_lyxrc ||
+                   use_tooltip != system_lyxrc.use_tooltip) {
+                       os << "\\use_tooltip "
+                          << convert<string>(use_tooltip)
+                          << '\n';
+               }
        case RC_USE_PIXMAP_CACHE:
                if (ignore_system_lyxrc ||
                    use_pixmap_cache != system_lyxrc.use_pixmap_cache) {
@@ -2062,18 +2144,18 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << '\n';
                }
        case RC_PERS_DICT:
-               if (isp_pers_dict != system_lyxrc.isp_pers_dict) {
-                       string const path = os::external_path(isp_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";
                }
                if (tag != RC_LAST)
                        break;
        case RC_USE_INP_ENC:
                if (ignore_system_lyxrc ||
-                   isp_use_input_encoding
-                   != system_lyxrc.isp_use_input_encoding) {
+                   spellchecker_use_input_encoding
+                   != system_lyxrc.spellchecker_use_input_encoding) {
                        os << "\\use_input_encoding "
-                          << convert<string>(isp_use_input_encoding)
+                          << convert<string>(spellchecker_use_input_encoding)
                           << '\n';
                }
                if (tag != RC_LAST)
@@ -2090,6 +2172,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_VISUAL_CURSOR:
+               if (ignore_system_lyxrc ||
+                       visual_cursor != system_lyxrc.visual_cursor) {
+                       os << "\\visual_cursor " << convert<string>(visual_cursor) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_LANGUAGE_PACKAGE:
                if (ignore_system_lyxrc ||
                    language_package != system_lyxrc.language_package) {
@@ -2190,6 +2279,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_GUI_LANGUAGE:
+               if (ignore_system_lyxrc ||
+                   gui_language != system_lyxrc.gui_language) {
+                       os << "\\gui_language " << gui_language << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
 
                os << "\n#\n"
                   << "# FORMATS SECTION ##########################\n"
@@ -2213,14 +2309,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << cit->extension() << "\" \""
                                   << cit->prettyname() << "\" \""
                                   << cit->shortcut() << "\" \""
-                                  << cit->viewer() << "\" \""
-                                  << cit->editor() << "\" \"";
+                                  << escapeCommand(cit->viewer()) << "\" \""
+                                  << escapeCommand(cit->editor()) << "\" \"";
                                vector<string> flags;
                                if (cit->documentFormat())
                                        flags.push_back("document");
                                if (cit->vectorFormat())
                                        flags.push_back("vector");
-                               os << support::getStringFromVector(flags);
+                               os << getStringFromVector(flags);
                                os << "\"\n";
                        }
                }
@@ -2254,7 +2350,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                            converter->flags != cit->flags)
                                os << "\\converter \"" << cit->from << "\" \""
                                   << cit->to << "\" \""
-                                  << cit->command << "\" \""
+                                  << escapeCommand(cit->command) << "\" \""
                                   << cit->flags << "\"\n";
                }
 
@@ -2288,7 +2384,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                        it->second.command();
 
                                os << "\\copier " << fmt
-                                  << " \"" << command << "\"\n";
+                                  << " \"" << escapeCommand(command) << "\"\n";
                        }
                }
                if (tag != RC_LAST)
@@ -2371,6 +2467,14 @@ 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_MAC_LIKE_WORD_MOVEMENT:
+               str = _("Use the Mac OS X conventions for the word-level cursor movement");
+               break;
+
+       case RC_SHOW_MACRO_LABEL:
+               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;
 
@@ -2426,6 +2530,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_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;
+
        case RC_INPUT:
                break;
 
@@ -2487,6 +2595,47 @@ 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_MOUSE_WHEEL_SPEED:
+               str = bformat(_("The scrolling speed of the mouse wheel."),
+                     maxlastfiles);
+               break;
+
+       case RC_COMPLETION_POPUP_DELAY:
+               str = _("The completion popup delay.");
+               break;
+
+       case RC_COMPLETION_POPUP_MATH:
+               str = _("Select to display the completion popup in math mode.");
+               break;
+
+       case RC_COMPLETION_POPUP_TEXT:
+               str = _("Select to display the completion popup in text mode.");
+               break;
+
+       case RC_COMPLETION_POPUP_AFTER_COMPLETE:
+               str = _("Show the completion popup without delay after non-unique completion attempt.");
+               break;
+
+       case RC_COMPLETION_POPUP_TEXT:
+               str = _("Show a small triangle on the cursor to indicate that a completion is available.");
+               break;
+
+       case RC_COMPLETION_POPUP_DELAY:
+               str = _("The inline completion delay.");
+               break;
+
+       case RC_COMPLETION_INLINE_MATH:
+               str = _("Select to display the inline completion in math mode.");
+               break;
+
+       case RC_COMPLETION_INLINE_TEXT:
+               str = _("Select to display the inline completion in text mode.");
+               break;
+
+       case RC_COMPLETION_INLINE_DOTS:
+               str = _("Use \"...\" to shorten long completions.");
+               break;
+
        case RC_NUMLASTFILES:
                str = bformat(_("Maximal number of lastfiles. Up to %1$d can appear in the file menu."),
                        maxlastfiles);
@@ -2591,6 +2740,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Select to enable support of right-to-left languages (e.g. Hebrew, Arabic).");
                break;
 
+       case RC_VISUAL_CURSOR:
+               str = _("Select to have visual bidi cursor movement, unselect for logical movement.");
+               break;
+
        case RC_SCREEN_DPI:
                str = _("DPI (dots per inch) of your monitor is auto-detected by LyX. If that goes wrong, override the setting here.");
                break;
@@ -2634,10 +2787,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("De-select if you don't want the startup banner.");
                break;
 
-       case RC_SPELL_COMMAND:
-               str = _("What command runs the spellchecker?");
-               break;
-
        case RC_TEMPDIRPATH:
                str = _("LyX will place its temporary directories in this path. They will be deleted when you quit LyX.");
                break;
@@ -2669,6 +2818,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Specify whether to pass the -T input encoding option to ispell. 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;
+
        case RC_USE_PIXMAP_CACHE:
                str = _("Enable the pixmap cache that might improve performance on Mac and Windows.");
                break;