]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
Merge branch 'master' of git.lyx.org:lyx
[lyx.git] / src / LyXRC.cpp
index 6c7809c7e5811ea933e1021f9e059e3df8fdfe16..8b7c3b3ec89756bdeda71245322239e9ec4cb39d 100644 (file)
@@ -40,6 +40,7 @@
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/Package.h"
+#include "support/TempFile.h"
 #include "support/userinfo.h"
 
 #include <fstream>
@@ -55,7 +56,9 @@ namespace os = support::os;
 
 namespace {
 
-static unsigned int const LYXRC_FILEFORMAT = 13; // vfr: System theme's icons
+// The format should also be updated in configure.py, and conversion code
+// should be added to prefs2prefs_prefs.py.
+static unsigned int const LYXRC_FILEFORMAT = 19; // rgh: remove print support
 
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
@@ -93,6 +96,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\def_file", LyXRC::RC_DEFFILE },
        { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_POINT },
        { "\\default_length_unit", LyXRC::RC_DEFAULT_LENGTH_UNIT },
+       { "\\default_otf_view_format", LyXRC::RC_DEFAULT_OTF_VIEW_FORMAT },
        { "\\default_view_format", LyXRC::RC_DEFAULT_VIEW_FORMAT },
        { "\\dialogs_iconify_with_main", LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN },
        { "\\display_graphics", LyXRC::RC_DISPLAY_GRAPHICS },
@@ -102,13 +106,13 @@ LexerKeyword lyxrcTags[] = {
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
        { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
-       { "\\force_paint_single_char", LyXRC::RC_FORCE_PAINT_SINGLE_CHAR },
        { "\\format", LyXRC::RC_FILEFORMAT },
        { "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
        { "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
        { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
        { "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
        { "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
+       { "\\fullscreen_statusbar", LyXRC::RC_FULL_SCREEN_STATUSBAR },
        { "\\fullscreen_tabbar", LyXRC::RC_FULL_SCREEN_TABBAR },
        { "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
        { "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
@@ -138,6 +142,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
        { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
        { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
+       { "\\mouse_middlebutton_paste", LyXRC::RC_MOUSE_MIDDLEBUTTON_PASTE },
        { "\\mouse_wheel_speed", LyXRC::RC_MOUSE_WHEEL_SPEED },
        { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
        { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
@@ -148,26 +153,11 @@ LexerKeyword lyxrcTags[] = {
        { "\\preview", LyXRC::RC_PREVIEW },
        { "\\preview_hashed_labels", LyXRC::RC_PREVIEW_HASHED_LABELS },
        { "\\preview_scale_factor", LyXRC::RC_PREVIEW_SCALE_FACTOR },
-       { "\\print_adapt_output", LyXRC::RC_PRINT_ADAPTOUTPUT },
-       { "\\print_collcopies_flag", LyXRC::RC_PRINTCOLLCOPIESFLAG },
-       { "\\print_command", LyXRC::RC_PRINT_COMMAND },
-       { "\\print_copies_flag", LyXRC::RC_PRINTCOPIESFLAG },
-       { "\\print_evenpage_flag", LyXRC::RC_PRINTEVENPAGEFLAG },
-       { "\\print_extra_options", LyXRC::RC_PRINTEXSTRAOPTIONS },
-       { "\\print_file_extension", LyXRC::RC_PRINTFILEEXTENSION },
        { "\\print_landscape_flag", LyXRC::RC_PRINTLANDSCAPEFLAG },
-       { "\\print_oddpage_flag", LyXRC::RC_PRINTODDPAGEFLAG },
-       { "\\print_pagerange_flag", LyXRC::RC_PRINTPAGERANGEFLAG },
        { "\\print_paper_dimension_flag", LyXRC::RC_PRINTPAPERDIMENSIONFLAG },
        { "\\print_paper_flag", LyXRC::RC_PRINTPAPERFLAG },
-       { "\\print_reverse_flag", LyXRC::RC_PRINTREVERSEFLAG },
-       { "\\print_spool_command", LyXRC::RC_PRINTSPOOL_COMMAND },
-       { "\\print_spool_printerprefix", LyXRC::RC_PRINTSPOOL_PRINTERPREFIX },
-       { "\\print_to_file", LyXRC::RC_PRINTTOFILE },
-       { "\\print_to_printer", LyXRC::RC_PRINTTOPRINTER },
-       { "\\printer", LyXRC::RC_PRINTER },
-       { "\\rtl", LyXRC::RC_RTL_SUPPORT },
        { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
+       { "\\save_origin", LyXRC::RC_SAVE_ORIGIN },
        { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
        { "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
        { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
@@ -235,26 +225,13 @@ void LyXRC::setDefaults()
        ui_file = "default";
        // The current document directory
        texinputs_prefix = ".";
-       // Get printer from the environment. If fail, use default "",
-       // assuming that everything is set up correctly.
-       printer = getEnv("PRINTER");
-       print_adapt_output = false;
-       print_command = "dvips";
-       print_evenpage_flag = "-B";
-       print_oddpage_flag = "-A";
-       print_pagerange_flag = "-pp";
-       print_copies_flag = "-c";
-       print_collcopies_flag = "-C";
-       print_reverse_flag = "-r";
        print_landscape_flag = "-t landscape";
-       print_to_printer = "-P";
-       print_to_file = "-o ";
-       print_file_extension = ".ps";
        print_paper_flag = "-t";
        print_paper_dimension_flag = "-T";
        document_path.erase();
        view_dvi_paper_option.erase();
        default_view_format = "pdf2";
+       default_otf_view_format = "pdf4";
        chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
        bibtex_command = "bibtex";
        fontenc = "default";
@@ -284,12 +261,13 @@ void LyXRC::setDefaults()
        auto_reset_options = false;
        plaintext_linelen = 65;
        mouse_wheel_speed = 1.0;
-       num_lastfiles = maxlastfiles;
+       num_lastfiles = 20;
        check_lastfiles = true;
        use_lastfilepos = true;
        load_session = false;
        make_backup = true;
        save_compressed = false;
+       save_origin = false;
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
@@ -308,7 +286,6 @@ void LyXRC::setDefaults()
        completion_minlength = 6;
        spellcheck_notes = true;
        use_kbmap = false;
-       rtl_support = true;
        visual_cursor = false;
        auto_number = true;
        mark_foreign_language = true;
@@ -357,6 +334,7 @@ void LyXRC::setDefaults()
        full_screen_toolbars = true;
        full_screen_tabbar = true;
        full_screen_menubar = true;
+       full_screen_statusbar = true;
        full_screen_scrollbar = true;
        full_screen_width = 700;
 
@@ -374,6 +352,7 @@ void LyXRC::setDefaults()
        default_length_unit = Length::CM;
        cursor_width = 1;
        close_buffer_with_last_view = "yes";
+       mouse_middlebutton_paste = true;
 }
 
 
@@ -402,7 +381,8 @@ bool LyXRC::read(FileName const & filename, bool check_format)
                return retval == ReadOK;
 
        LYXERR(Debug::FILES, "Converting LyXRC file to " << LYXRC_FILEFORMAT);
-       FileName const tempfile = FileName::tempName("convert_lyxrc");
+       TempFile tmp("convert_lyxrc");
+       FileName const tempfile = tmp.name();
        bool const success = prefs2prefs(filename, tempfile, false);
        if (!success) {
                LYXERR0 ("Unable to convert " << filename.absFileName() <<
@@ -417,7 +397,6 @@ bool LyXRC::read(FileName const & filename, bool check_format)
                LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
                retval = read(lexrc2, check_format);
        }
-       tempfile.removeFile();
        return retval == ReadOK;
 }
 
@@ -441,9 +420,6 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
        if (!lexrc.isOK())
                return ReadError;
 
-       // default for current rowpainter capabilities
-       force_paint_single_char = true;
-
        // format prior to 2.0 and introduction of format tag
        unsigned int format = 0;
 
@@ -549,80 +525,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> fontenc;
                        break;
 
-               case RC_FORCE_PAINT_SINGLE_CHAR:
-                       lexrc >> force_paint_single_char;
-                       break;
-
-               case RC_PRINTER:
-                       lexrc >> printer;
-                       break;
-
-               case RC_PRINT_COMMAND:
-                       if (lexrc.next(true)) {
-                               print_command = lexrc.getString();
-                       }
-                       break;
-
-               case RC_PRINTEVENPAGEFLAG:
-                       lexrc >> print_evenpage_flag;
-                       break;
-
-               case RC_PRINTODDPAGEFLAG:
-                       lexrc >> print_oddpage_flag;
-                       break;
-
-               case RC_PRINTPAGERANGEFLAG:
-                       lexrc >> print_pagerange_flag;
-                       break;
-
-               case RC_PRINTCOPIESFLAG:
-                       lexrc >> print_copies_flag;
-                       break;
-
-               case RC_PRINTCOLLCOPIESFLAG:
-                       lexrc >> print_collcopies_flag;
-                       break;
-
-               case RC_PRINTREVERSEFLAG:
-                       lexrc >> print_reverse_flag;
-                       break;
-
                case RC_PRINTLANDSCAPEFLAG:
                        lexrc >> print_landscape_flag;
                        break;
 
-               case RC_PRINTTOPRINTER:
-                       lexrc >> print_to_printer;
-                       break;
-
-               case RC_PRINT_ADAPTOUTPUT:
-                       lexrc >> print_adapt_output;
-                       break;
-
-               case RC_PRINTTOFILE:
-                       if (lexrc.next()) {
-                               print_to_file = os::internal_path(lexrc.getString());
-                       }
-                       break;
-
-               case RC_PRINTFILEEXTENSION:
-                       lexrc >> print_file_extension;
-                       break;
-
-               case RC_PRINTEXSTRAOPTIONS:
-                       lexrc >> print_extra_options;
-                       break;
-
-               case RC_PRINTSPOOL_COMMAND:
-                       if (lexrc.next(true)) {
-                               print_spool_command = lexrc.getString();
-                       }
-                       break;
-
-               case RC_PRINTSPOOL_PRINTERPREFIX:
-                       lexrc >> print_spool_printerprefix;
-                       break;
-
                case RC_PRINTPAPERDIMENSIONFLAG:
                        lexrc >> print_paper_dimension_flag;
                        break;
@@ -989,6 +895,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_SAVE_COMPRESSED:
                        lexrc >> save_compressed;
                        break;
+               case RC_SAVE_ORIGIN:
+                       lexrc >> save_origin;
+                       break;
                case RC_BACKUPDIR_PATH:
                        if (lexrc.next()) {
                                backupdir_path = os::internal_path(lexrc.getString());
@@ -1044,9 +953,6 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_LANGUAGE_COMMAND_LOCAL:
                        lexrc >> language_command_local;
                        break;
-               case RC_RTL_SUPPORT:
-                       lexrc >> rtl_support;
-                       break;
                case RC_VISUAL_CURSOR:
                        lexrc >> visual_cursor;
                        break;
@@ -1149,19 +1055,25 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                }
                case RC_VIEWER_ALTERNATIVES:  {
                        string format, command;
-                       lexrc >> format;
-                       lexrc >> command;
-                       viewer_alternatives[format].insert(command);
+                       if ((lexrc >> format) && lexrc.next(true)) {
+                               command  = lexrc.getString();
+                               viewer_alternatives[format].insert(command);
+                       }
                        break;
                }
                case RC_EDITOR_ALTERNATIVES:  {
                        string format, command;
-                       lexrc >> format;
-                       lexrc >> command;
-                       editor_alternatives[format].insert(command);
+                       if ((lexrc >> format) && lexrc.next(true)) {
+                               command  = lexrc.getString();
+                               editor_alternatives[format].insert(command);
+                       }
                        break;
                }
 
+               case RC_DEFAULT_OTF_VIEW_FORMAT:
+                       lexrc >> default_otf_view_format;
+                       break;
+
                case RC_DEFAULT_VIEW_FORMAT:
                        lexrc >> default_view_format;
                        break;
@@ -1231,6 +1143,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_FULL_SCREEN_SCROLLBAR:
                        lexrc >> full_screen_scrollbar;
                        break;
+               case RC_FULL_SCREEN_STATUSBAR:
+                       lexrc >> full_screen_statusbar;
+                       break;
                case RC_FULL_SCREEN_TABBAR:
                        lexrc >> full_screen_tabbar;
                        break;
@@ -1292,6 +1207,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        break;
 
+               case RC_MOUSE_MIDDLEBUTTON_PASTE:
+                       lexrc >> mouse_middlebutton_paste;
+                       break;
+
                case RC_LAST:
                        break; // this is just a dummy
                }
@@ -1895,6 +1814,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                    != system_lyxrc.font_sizes[FONT_SIZE_HUGE] ||
                    font_sizes[FONT_SIZE_HUGER]
                    != system_lyxrc.font_sizes[FONT_SIZE_HUGER]) {
+                       streamsize old_prec = os.precision();
                        os.setf(ios::fixed);
                        os.precision(2);
                        os << "\\screen_font_sizes"
@@ -1909,6 +1829,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                           << ' ' << font_sizes[FONT_SIZE_HUGE]
                           << ' ' << font_sizes[FONT_SIZE_HUGER]
                           << '\n';
+                       os.precision(old_prec);
+                       os.unsetf(ios::fixed);
                }
                if (tag != RC_LAST)
                        break;
@@ -1939,6 +1861,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_FULL_SCREEN_STATUSBAR:
+               if (ignore_system_lyxrc ||
+                   full_screen_statusbar != system_lyxrc.full_screen_statusbar) {
+                       os << "\\fullscreen_statusbar "
+                          << convert<string>(full_screen_statusbar)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_FULL_SCREEN_TABBAR:
                if (ignore_system_lyxrc ||
                    full_screen_tabbar != system_lyxrc.full_screen_tabbar) {
@@ -2026,82 +1957,10 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-               os << "\n#\n"
-                  << "# PRINTER SECTION ###################################\n"
-                  << "#\n\n";
+       os << "\n#\n"
+                << "# PRINTER SECTION ###################################\n"
+                << "#\n\n";
 
-       case RC_PRINTER:
-               if (ignore_system_lyxrc ||
-                   printer != system_lyxrc.printer) {
-                       os << "\\printer \"" << printer << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINT_ADAPTOUTPUT:
-               if (ignore_system_lyxrc ||
-                   print_adapt_output != system_lyxrc.print_adapt_output) {
-                       os << "\\print_adapt_output "
-                          << convert<string>(print_adapt_output)
-                          << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINT_COMMAND:
-               if (ignore_system_lyxrc ||
-                   print_command != system_lyxrc.print_command) {
-                       os << "\\print_command \"" << escapeCommand(print_command) << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTEXSTRAOPTIONS:
-               if (ignore_system_lyxrc ||
-                   print_extra_options != system_lyxrc.print_extra_options) {
-                       os << "\\print_extra_options \"" << print_extra_options
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTSPOOL_COMMAND:
-               if (ignore_system_lyxrc ||
-                   print_spool_command != system_lyxrc.print_spool_command) {
-                       os << "\\print_spool_command \"" << escapeCommand(print_spool_command)
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTSPOOL_PRINTERPREFIX:
-               if (ignore_system_lyxrc ||
-                   print_spool_printerprefix
-                   != system_lyxrc.print_spool_printerprefix) {
-                       os << "\\print_spool_printerprefix \""
-                          << print_spool_printerprefix << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTEVENPAGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_evenpage_flag != system_lyxrc.print_evenpage_flag) {
-                       os << "\\print_evenpage_flag \"" << print_evenpage_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTODDPAGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_oddpage_flag != system_lyxrc.print_oddpage_flag) {
-                       os << "\\print_oddpage_flag \"" << print_oddpage_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTREVERSEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_reverse_flag != system_lyxrc.print_reverse_flag) {
-                       os << "\\print_reverse_flag \"" << print_reverse_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
        case RC_PRINTLANDSCAPEFLAG:
                if (ignore_system_lyxrc ||
                    print_landscape_flag != system_lyxrc.print_landscape_flag) {
@@ -2110,32 +1969,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_PRINTPAGERANGEFLAG:
-               if (ignore_system_lyxrc ||
-                   print_pagerange_flag != system_lyxrc.print_pagerange_flag) {
-                       os << "\\print_pagerange_flag \"" << print_pagerange_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTCOPIESFLAG:
-               if (ignore_system_lyxrc ||
-                   print_copies_flag != system_lyxrc.print_copies_flag) {
-                       os << "\\print_copies_flag \"" << print_copies_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTCOLLCOPIESFLAG:
-               if (ignore_system_lyxrc ||
-                   print_collcopies_flag
-                   != system_lyxrc.print_collcopies_flag) {
-                       os << "\\print_collcopies_flag \""
-                          << print_collcopies_flag
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
+
        case RC_PRINTPAPERFLAG:
                if (ignore_system_lyxrc ||
                    print_paper_flag != system_lyxrc.print_paper_flag) {
@@ -2144,6 +1978,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+
        case RC_PRINTPAPERDIMENSIONFLAG:
                if (ignore_system_lyxrc ||
                    print_paper_dimension_flag
@@ -2153,35 +1988,10 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-       case RC_PRINTTOPRINTER:
-               if (ignore_system_lyxrc ||
-                   print_to_printer != system_lyxrc.print_to_printer) {
-                       os << "\\print_to_printer \"" << print_to_printer
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTTOFILE:
-               if (ignore_system_lyxrc ||
-                   print_to_file != system_lyxrc.print_to_file) {
-                       string const path = os::external_path(print_to_file);
-                       os << "\\print_to_file \"" << path << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-       case RC_PRINTFILEEXTENSION:
-               if (ignore_system_lyxrc ||
-                   print_file_extension != system_lyxrc.print_file_extension) {
-                       os << "\\print_file_extension \""
-                          << print_file_extension
-                          << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
 
-               os << "\n#\n"
-                  << "# TEX SECTION #######################################\n"
-                  << "#\n\n";
+       os << "\n#\n"
+                << "# TEX SECTION #######################################\n"
+                << "#\n\n";
 
        case RC_TEXINPUTS_PREFIX:
                if (ignore_system_lyxrc ||
@@ -2199,14 +2009,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-       case RC_FORCE_PAINT_SINGLE_CHAR:
-               if (ignore_system_lyxrc ||
-                   force_paint_single_char != system_lyxrc.force_paint_single_char) {
-                       os << "\\force_paint_single_char \"" << force_paint_single_char << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
                os << "\n#\n"
                   << "# FILE SECTION ######################################\n"
                   << "#\n\n";
@@ -2242,6 +2044,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_MOUSE_MIDDLEBUTTON_PASTE:
+               if (ignore_system_lyxrc ||
+                   mouse_middlebutton_paste != system_lyxrc.mouse_middlebutton_paste) {
+                       os << "\\mouse_middlebutton_paste "
+                          << convert<string>(mouse_middlebutton_paste) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_COMPLETION_INLINE_DELAY:
                if (ignore_system_lyxrc ||
                    completion_inline_delay != system_lyxrc.completion_inline_delay) {
@@ -2329,7 +2139,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
-                       
+
                case RC_NUMLASTFILES:
                if (ignore_system_lyxrc ||
                    num_lastfiles != system_lyxrc.num_lastfiles) {
@@ -2406,6 +2216,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SAVE_ORIGIN:
+               if (ignore_system_lyxrc ||
+                   save_origin != system_lyxrc.save_origin) {
+                       os << "\\save_origin " << convert<string>(save_origin) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_BACKUPDIR_PATH:
                if (ignore_system_lyxrc ||
                    backupdir_path != system_lyxrc.backupdir_path) {
@@ -2486,8 +2303,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                os << "\n#\n"
                   << "# LANGUAGE SUPPORT SECTION ##########################\n"
                   << "#\n\n";
-               if (tag != RC_LAST)
-                       break;
 
        case RC_DEFAULT_DECIMAL_POINT:
                if (ignore_system_lyxrc ||
@@ -2531,13 +2346,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
 
-       case RC_RTL_SUPPORT:
-               if (ignore_system_lyxrc ||
-                   rtl_support != system_lyxrc.rtl_support) {
-                       os << "\\rtl " << convert<string>(rtl_support) << '\n';
-               }
-               if (tag != RC_LAST)
-                       break;
        case RC_VISUAL_CURSOR:
                if (ignore_system_lyxrc ||
                        visual_cursor != system_lyxrc.visual_cursor) {
@@ -2762,7 +2570,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                Alternatives::const_iterator const en = viewer_alternatives.end();
                Alternatives::const_iterator const sysend =
                                system_lyxrc.viewer_alternatives.end();
-               for (; it != en; ++it) {
+               for (; it != en; ++it) {
                        string const & fmt = it->first;
                        CommandSet const & cmd = it->second;
                        CommandSet::const_iterator sit = cmd.begin();
@@ -2807,6 +2615,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        }
+       case RC_DEFAULT_OTF_VIEW_FORMAT:
+               if ((ignore_system_lyxrc ||
+                    default_otf_view_format != system_lyxrc.default_otf_view_format)
+                   && !default_otf_view_format.empty()) {
+                       os << "\\default_otf_view_format " << default_otf_view_format << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_DEFAULT_VIEW_FORMAT:
                if (ignore_system_lyxrc ||
                    default_view_format != system_lyxrc.default_view_format) {
@@ -2828,23 +2644,23 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                for (Converters::const_iterator cit = theConverters().begin();
                     cit != theConverters().end(); ++cit) {
                        Converter const * converter =
-                               theSystemConverters().getConverter(cit->from,
-                                                              cit->to);
+                               theSystemConverters().getConverter(cit->from(),
+                                                                  cit->to());
                        if (!converter ||
-                           converter->command != cit->command ||
-                           converter->flags != cit->flags)
-                               os << "\\converter \"" << cit->from << "\" \""
-                                  << cit->to << "\" \""
-                                  << escapeCommand(cit->command) << "\" \""
-                                  << cit->flags << "\"\n";
+                           converter->command() != cit->command() ||
+                           converter->flags() != cit->flags())
+                               os << "\\converter \"" << cit->from() << "\" \""
+                                  << cit->to() << "\" \""
+                                  << escapeCommand(cit->command()) << "\" \""
+                                  << cit->flags() << "\"\n";
                }
 
                // New/modifed converters
                for (Converters::const_iterator cit = theSystemConverters().begin();
                     cit != theSystemConverters().end(); ++cit)
-                       if (!theConverters().getConverter(cit->from, cit->to))
-                               os << "\\converter \"" << cit->from
-                                  << "\" \"" << cit->to << "\" \"\" \"\"\n";
+                       if (!theConverters().getConverter(cit->from(), cit->to()))
+                               os << "\\converter \"" << cit->from()
+                                  << "\" \"" << cit->to() << "\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
 
@@ -2897,6 +2713,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_ACCEPT_COMPOUND:
                if (lyxrc_orig.spellchecker_accept_compound != lyxrc_new.spellchecker_accept_compound)
                        if (theSpellChecker()) theSpellChecker()->advanceChangeNumber();
+               // fall through
        case LyXRC::RC_ALT_LANG:
        case LyXRC::RC_PLAINTEXT_LINELEN:
        case LyXRC::RC_AUTOCORRECTION_MATH:
@@ -2929,6 +2746,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
        case LyXRC::RC_DATE_INSERT_FORMAT:
        case LyXRC::RC_GUI_LANGUAGE:
+       case LyXRC::RC_DEFAULT_OTF_VIEW_FORMAT:
        case LyXRC::RC_DEFAULT_VIEW_FORMAT:
        case LyXRC::RC_DEFFILE:
        case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
@@ -2939,11 +2757,11 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                        if (path.exists() && path.isDirectory())
                                package().document_dir() = FileName(lyxrc.document_path);
                }
+               // fall through
        case LyXRC::RC_EDITOR_ALTERNATIVES:
        case LyXRC::RC_ESC_CHARS:
        case LyXRC::RC_EXAMPLEPATH:
        case LyXRC::RC_FONT_ENCODING:
-       case LyXRC::RC_FORCE_PAINT_SINGLE_CHAR:
        case LyXRC::RC_FILEFORMAT:
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
@@ -2972,35 +2790,24 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_MAKE_BACKUP:
        case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
        case LyXRC::RC_MOUSE_WHEEL_SPEED:
+       case LyXRC::RC_MOUSE_MIDDLEBUTTON_PASTE:
        case LyXRC::RC_NUMLASTFILES:
        case LyXRC::RC_PARAGRAPH_MARKERS:
        case LyXRC::RC_PATH_PREFIX:
                if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
                        prependEnvPath("PATH", lyxrc_new.path_prefix);
+                       // Resets python path
+                       support::os::python(true);
                }
+               // fall through
        case LyXRC::RC_PREVIEW:
        case LyXRC::RC_PREVIEW_HASHED_LABELS:
        case LyXRC::RC_PREVIEW_SCALE_FACTOR:
-       case LyXRC::RC_PRINTCOLLCOPIESFLAG:
-       case LyXRC::RC_PRINTCOPIESFLAG:
-       case LyXRC::RC_PRINTER:
-       case LyXRC::RC_PRINTEVENPAGEFLAG:
-       case LyXRC::RC_PRINTEXSTRAOPTIONS:
-       case LyXRC::RC_PRINTFILEEXTENSION:
        case LyXRC::RC_PRINTLANDSCAPEFLAG:
-       case LyXRC::RC_PRINTODDPAGEFLAG:
-       case LyXRC::RC_PRINTPAGERANGEFLAG:
        case LyXRC::RC_PRINTPAPERDIMENSIONFLAG:
        case LyXRC::RC_PRINTPAPERFLAG:
-       case LyXRC::RC_PRINTREVERSEFLAG:
-       case LyXRC::RC_PRINTSPOOL_COMMAND:
-       case LyXRC::RC_PRINTSPOOL_PRINTERPREFIX:
-       case LyXRC::RC_PRINTTOFILE:
-       case LyXRC::RC_PRINTTOPRINTER:
-       case LyXRC::RC_PRINT_ADAPTOUTPUT:
-       case LyXRC::RC_PRINT_COMMAND:
-       case LyXRC::RC_RTL_SUPPORT:
        case LyXRC::RC_SAVE_COMPRESSED:
+       case LyXRC::RC_SAVE_ORIGIN:
        case LyXRC::RC_SCREEN_DPI:
        case LyXRC::RC_SCREEN_FONT_ROMAN:
        case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
@@ -3019,6 +2826,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_SPELLCHECKER:
                if (lyxrc_orig.spellchecker != lyxrc_new.spellchecker)
                        setSpellChecker();
+               // fall through
        case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
        case LyXRC::RC_SPELLCHECK_NOTES:
        case LyXRC::RC_SPLITINDEX_COMMAND:
@@ -3029,6 +2837,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
                        os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
                }
+               // fall through
        case LyXRC::RC_TEXINPUTS_PREFIX:
        case LyXRC::RC_THESAURUSDIRPATH:
        case LyXRC::RC_UIFILE:
@@ -3047,6 +2856,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_FULL_SCREEN_LIMIT:
        case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
        case LyXRC::RC_FULL_SCREEN_MENUBAR:
+       case LyXRC::RC_FULL_SCREEN_STATUSBAR:
        case LyXRC::RC_FULL_SCREEN_TABBAR:
        case LyXRC::RC_FULL_SCREEN_TOOLBARS:
        case LyXRC::RC_FULL_SCREEN_WIDTH:
@@ -3162,6 +2972,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_OTF_VIEW_FORMAT:
+               str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE] with non-TeX fonts.");
+               break;
+
        case RC_DEFAULT_VIEW_FORMAT:
                str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE].");
                break;
@@ -3190,10 +3004,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
                break;
 
-       case RC_FORCE_PAINT_SINGLE_CHAR:
-               str = _("Disable any kerning and ligatures for text drawing on screen.");
-               break;
-
        case RC_FILEFORMAT:
                break;
 
@@ -3267,8 +3077,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_MOUSE_WHEEL_SPEED:
-               str = bformat(_("The scrolling speed of the mouse wheel."),
-                     maxlastfiles);
+               str = _("The scrolling speed of the mouse wheel.");
                break;
 
        case RC_COMPLETION_POPUP_DELAY:
@@ -3308,7 +3117,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_AUTOCORRECTION_MATH:
-               str = _("Allow TeXMacs shorthand, like => converting to \Rightarrow.");
+               str = _("Allow TeXMacs shorthand, like => converting to \\Rightarrow.");
                break;
 
        case RC_NUMLASTFILES:
@@ -3334,82 +3143,18 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("Scale the preview size to suit.");
                break;
 
-       case RC_PRINTCOLLCOPIESFLAG:
-               str = _("The option for specifying whether the copies should be collated.");
-               break;
-
-       case RC_PRINTCOPIESFLAG:
-               str = _("The option for specifying the number of copies to print.");
-               break;
-
-       case RC_PRINTER:
-               str = _("The default printer to print on. If none is specified, LyX will use the environment variable PRINTER.");
-               break;
-
-       case RC_PRINTEVENPAGEFLAG:
-               str = _("The option to print only even pages.");
-               break;
-
-       case RC_PRINTEXSTRAOPTIONS:
-               str = _("Extra options to pass to printing program after everything else, but before the filename of the DVI file to be printed.");
-               break;
-
-       case RC_PRINTFILEEXTENSION:
-               str = _("Extension of printer program output file. Usually \".ps\".");
-               break;
-
        case RC_PRINTLANDSCAPEFLAG:
                str = _("The option to print out in landscape.");
                break;
 
-       case RC_PRINTODDPAGEFLAG:
-               str = _("The option to print only odd pages.");
-               break;
-
-       case RC_PRINTPAGERANGEFLAG:
-               str = _("The option for specifying a comma-separated list of pages to print.");
-               break;
-
        case RC_PRINTPAPERDIMENSIONFLAG:
-                                  str = _("Option to specify the dimensions of the print paper.");
+               str = _("Option to specify the dimensions of the print paper.");
                break;
 
        case RC_PRINTPAPERFLAG:
                str = _("The option to specify paper type.");
                break;
 
-       case RC_PRINTREVERSEFLAG:
-               str = _("The option to reverse the order of the pages printed.");
-               break;
-
-       case RC_PRINTSPOOL_COMMAND:
-               str = _("When set, this printer option automatically prints to a file and then calls a separate print spooling program on that file with the given name and arguments.");
-               break;
-
-       case RC_PRINTSPOOL_PRINTERPREFIX:
-               str = _("If you specify a printer name in the print dialog, the following argument is prepended along with the printer name after the spool command.");
-               break;
-
-       case RC_PRINTTOFILE:
-               str = _("Option to pass to the print program to print to a file.");
-               break;
-
-       case RC_PRINTTOPRINTER:
-               str = _("Option to pass to the print program to print on a specific printer.");
-               break;
-
-       case RC_PRINT_ADAPTOUTPUT:
-               str = _("Select for LyX to pass the name of the destination printer to your print command.");
-               break;
-
-       case RC_PRINT_COMMAND:
-               str = _("Your favorite print program, e.g. \"dvips\", \"dvilj4\".");
-               break;
-
-       case RC_RTL_SUPPORT:
-               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;