]> git.lyx.org Git - lyx.git/blobdiff - src/lyxrc.C
Fix bug 2485 and crash on middle mouse paste on math
[lyx.git] / src / lyxrc.C
index 7f1561fac1440b88081c4c1d6305fd6dd4a1f987..d1276ba94cb1eb95687333c089ddf0f8ddbff4e6 100644 (file)
@@ -25,7 +25,7 @@
 #include "converter.h"
 #include "format.h"
 #include "gettext.h"
-#include "lastfiles.h"
+#include "session.h"
 #include "LColor.h"
 #include "lyxlex.h"
 #include "lyxfont.h"
@@ -44,9 +44,9 @@ namespace os = lyx::support::os;
 
 using lyx::support::ascii_lowercase;
 using lyx::support::bformat;
-using lyx::support::ExpandPath;
+using lyx::support::expandPath;
 using lyx::support::getEnv;
-using lyx::support::LibFileSearch;
+using lyx::support::libFileSearch;
 using lyx::support::token;
 
 using std::cout;
@@ -104,7 +104,7 @@ keyword_item lyxrcTags[] = {
        { "\\language_global_options", LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS },
        { "\\language_package", LyXRC::RC_LANGUAGE_PACKAGE },
        { "\\language_use_babel", LyXRC::RC_LANGUAGE_USE_BABEL },
-       { "\\lastfiles", LyXRC::RC_LASTFILES },
+       { "\\load_session", LyXRC::RC_LOADSESSION },
        { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
        { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
        { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
@@ -151,6 +151,9 @@ keyword_item lyxrcTags[] = {
        { "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES },
        { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
        { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
+       { "\\screen_geometry_height", LyXRC::RC_SCREEN_GEOMETRY_HEIGHT },
+       { "\\screen_geometry_width", LyXRC::RC_SCREEN_GEOMETRY_WIDTH },
+       { "\\screen_geometry_xysaved", LyXRC::RC_SCREEN_GEOMETRY_XYSAVED },
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
        { "\\serverpipe", LyXRC::RC_SERVERPIPE },
        { "\\set_color", LyXRC::RC_SET_COLOR },
@@ -163,6 +166,7 @@ keyword_item lyxrcTags[] = {
        { "\\use_alt_language", LyXRC::RC_USE_ALT_LANG },
        { "\\use_escape_chars", LyXRC::RC_USE_ESC_CHARS },
        { "\\use_input_encoding", LyXRC::RC_USE_INP_ENC },
+       { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
        { "\\use_personal_dictionary", LyXRC::RC_USE_PERS_DICT },
        // compatibility with versions older than 1.4.0 only
        { "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
@@ -209,9 +213,8 @@ void LyXRC::setDefaults() {
        print_paper_flag = "-t";
        print_paper_dimension_flag = "-T";
        document_path.erase();
-       tempdir_path = "/tmp";
        view_dvi_paper_option.erase();
-       default_papersize = PAPER_USLETTER;
+       default_papersize = PAPER_DEFAULT;
        custom_export_format = "ps";
        chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
        bibtex_command = "bibtex";
@@ -220,6 +223,9 @@ void LyXRC::setDefaults() {
        dpi = 75;
        // Because a screen typically is wider than a piece of paper:
        zoom = 150;
+       geometry_width = 0;
+       geometry_height = 0;
+       geometry_xysaved = true;
        wheel_jump = 5;
        // Default LaTeX font size:
        font_sizes[LyXFont::SIZE_TINY] = "5.0";
@@ -247,6 +253,8 @@ void LyXRC::setDefaults() {
        ascii_linelen = 65;
        num_lastfiles = maxlastfiles;
        check_lastfiles = true;
+       use_lastfilepos = true;
+       load_session = true;
        make_backup = true;
        backupdir_path.erase();
        display_graphics = lyx::graphics::ColorDisplay;
@@ -357,7 +365,7 @@ int LyXRC::read(LyXLex & lexrc)
                case RC_INPUT: // Include file
                        if (lexrc.next()) {
                                string const tmp =
-                                       LibFileSearch(string(),
+                                       libFileSearch(string(),
                                                      lexrc.getString());
                                if (read(tmp)) {
                                        lexrc.printError("Error reading "
@@ -392,14 +400,14 @@ int LyXRC::read(LyXLex & lexrc)
                case RC_CYGWIN_PATH_FIX:
                        if (lexrc.next()) {
                                cygwin_path_fix = lexrc.getBool();
-                       }
-                       break;
+                       }
+                       break;
 
                case RC_TEX_ALLOWS_SPACES:
                        if (lexrc.next()) {
                                tex_allows_spaces = lexrc.getBool();
-                       }
-                       break;
+                       }
+                       break;
 
                case RC_KBMAP:
                        if (lexrc.next()) {
@@ -412,7 +420,7 @@ int LyXRC::read(LyXLex & lexrc)
                                string const kmap(os::internal_path(lexrc.getString()));
                                if (kmap.empty()) {
                                        // nothing
-                               } else if (!LibFileSearch("kbd", kmap,
+                               } else if (!libFileSearch("kbd", kmap,
                                                          "kmap").empty()) {
                                        primary_kbmap = kmap;
                                } else {
@@ -426,7 +434,7 @@ int LyXRC::read(LyXLex & lexrc)
                                string const kmap(os::internal_path(lexrc.getString()));
                                if (kmap.empty()) {
                                        // nothing
-                               } else if (!LibFileSearch("kbd", kmap,
+                               } else if (!libFileSearch("kbd", kmap,
                                                          "kmap").empty()) {
                                        secondary_kbmap = kmap;
                                } else {
@@ -570,22 +578,25 @@ int LyXRC::read(LyXLex & lexrc)
                                                PAPER_USLETTER;
                                else if (size == "legal")
                                        default_papersize =
-                                               PAPER_LEGALPAPER;
+                                               PAPER_USLEGAL;
                                else if (size == "executive")
                                        default_papersize =
-                                               PAPER_EXECUTIVEPAPER;
+                                               PAPER_USEXECUTIVE;
                                else if (size == "a3")
                                        default_papersize =
-                                               PAPER_A3PAPER;
+                                               PAPER_A3;
                                else if (size == "a4")
                                        default_papersize =
-                                               PAPER_A4PAPER;
+                                               PAPER_A4;
                                else if (size == "a5")
                                        default_papersize =
-                                               PAPER_A5PAPER;
+                                               PAPER_A5;
                                else if (size == "b5")
                                        default_papersize =
-                                               PAPER_B5PAPER;
+                                               PAPER_B5;
+                               else if (size == "default")
+                                       default_papersize =
+                                               PAPER_DEFAULT;
                        }
                        break;
 
@@ -627,6 +638,24 @@ int LyXRC::read(LyXLex & lexrc)
                        }
                        break;
 
+               case RC_SCREEN_GEOMETRY_HEIGHT:
+                       if (lexrc.next()) {
+                               geometry_height = lexrc.getInteger();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_WIDTH:
+                       if (lexrc.next()) {
+                               geometry_width = lexrc.getInteger();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_XYSAVED:
+                       if (lexrc.next()) {
+                               geometry_xysaved = lexrc.getBool();
+                       }
+                       break;
+
                case RC_WHEEL_JUMP:
                        if (lexrc.next()) {
                                wheel_jump = lexrc.getInteger();
@@ -691,21 +720,21 @@ int LyXRC::read(LyXLex & lexrc)
                case RC_DOCUMENTPATH:
                        if (lexrc.next()) {
                                document_path = os::internal_path(lexrc.getString());
-                               document_path = ExpandPath(document_path);
+                               document_path = expandPath(document_path);
                        }
                        break;
 
                case RC_TEMPLATEPATH:
                        if (lexrc.next()) {
                                template_path = os::internal_path(lexrc.getString());
-                               template_path = ExpandPath(template_path);
+                               template_path = expandPath(template_path);
                        }
                        break;
 
                case RC_TEMPDIRPATH:
                        if (lexrc.next()) {
                                tempdir_path = os::internal_path(lexrc.getString());
-                               tempdir_path = ExpandPath(tempdir_path);
+                               tempdir_path = expandPath(tempdir_path);
                        }
                        break;
 
@@ -715,9 +744,15 @@ int LyXRC::read(LyXLex & lexrc)
                        }
                        break;
 
-               case RC_LASTFILES:
+               case RC_USELASTFILEPOS:
+                       if (lexrc.next()) {
+                               use_lastfilepos = lexrc.getBool();
+                       }
+                       break;
+
+               case RC_LOADSESSION:
                        if (lexrc.next()) {
-                               lastfiles = ExpandPath(os::internal_path(lexrc.getString()));
+                               load_session = lexrc.getBool();
                        }
                        break;
 
@@ -841,7 +876,7 @@ int LyXRC::read(LyXLex & lexrc)
                case RC_SERVERPIPE:
                        if (lexrc.next()) {
                                lyxpipes = os::internal_path(lexrc.getString());
-                               lyxpipes = ExpandPath(lyxpipes);
+                               lyxpipes = expandPath(lyxpipes);
                        }
                        break;
 
@@ -926,7 +961,7 @@ int LyXRC::read(LyXLex & lexrc)
                case RC_BACKUPDIR_PATH:
                        if (lexrc.next()) {
                                backupdir_path = os::internal_path(lexrc.getString());
-                               backupdir_path = ExpandPath(backupdir_path);
+                               backupdir_path = expandPath(backupdir_path);
                        }
                        break;
                case RC_DATE_INSERT_FORMAT:
@@ -1297,21 +1332,25 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc) const
                        os << "# The default papersize to use.\n"
                           << "\\default_papersize \"";
                        switch (default_papersize) {
+                       case PAPER_DEFAULT:
+                               os << "default"; break;
                        case PAPER_USLETTER:
                                os << "usletter"; break;
-                       case PAPER_LEGALPAPER:
+                       case PAPER_USLEGAL:
                                os << "legal"; break;
-                       case PAPER_EXECUTIVEPAPER:
+                       case PAPER_USEXECUTIVE:
                                os << "executive"; break;
-                       case PAPER_A3PAPER:
+                       case PAPER_A3:
                                os << "a3"; break;
-                       case PAPER_A4PAPER:
+                       case PAPER_A4:
                                os << "a4"; break;
-                       case PAPER_A5PAPER:
+                       case PAPER_A5:
                                os << "a5"; break;
-                       case PAPER_B5PAPER:
+                       case PAPER_B5:
                                os << "b5"; break;
-                       case PAPER_DEFAULT: break;
+                       case PAPER_CUSTOM:
+                       case PAPER_B3:
+                       case PAPER_B4: break;
                        }
                        os << "\"\n";
                }
@@ -1340,7 +1379,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc) const
                if (tex_allows_spaces != system_lyxrc.tex_allows_spaces) {
                        os << "\\tex_allows_spaces "
                           << convert<string>(tex_allows_spaces) << '\n';
-               }
+               }
        case RC_KBMAP:
                if (ignore_system_lyxrc ||
                    use_kbmap != system_lyxrc.use_kbmap) {
@@ -1454,6 +1493,24 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc) const
                    zoom != system_lyxrc.zoom) {
                        os << "\\screen_zoom " << zoom << '\n';
                }
+       case RC_SCREEN_GEOMETRY_HEIGHT:
+               if (ignore_system_lyxrc ||
+                   geometry_height != system_lyxrc.geometry_height) {
+                       os << "\\screen_geometry_height " << geometry_height
+                          << '\n';
+               }
+       case RC_SCREEN_GEOMETRY_WIDTH:
+               if (ignore_system_lyxrc ||
+                   geometry_width != system_lyxrc.geometry_width) {
+                       os << "\\screen_geometry_width " << geometry_width
+                          << '\n';
+               }
+       case RC_SCREEN_GEOMETRY_XYSAVED:
+               if (ignore_system_lyxrc ||
+                   geometry_xysaved != system_lyxrc.geometry_xysaved) {
+                       os << "\\screen_geometry_xysaved " << convert<string>(geometry_xysaved)
+                          << '\n';
+               }
        case RC_WHEEL_JUMP:
                if (ignore_system_lyxrc ||
                    wheel_jump != system_lyxrc.wheel_jump) {
@@ -1735,11 +1792,17 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc) const
                        string const path = os::external_path(document_path);
                        os << "\\document_path \"" << path << "\"\n";
                }
-       case RC_LASTFILES:
+       case RC_USELASTFILEPOS:
                if (ignore_system_lyxrc ||
-                   lastfiles != system_lyxrc.lastfiles) {
-                       string const path = os::external_path(lastfiles);
-                       os << "\\lastfiles \"" << path << "\"\n";
+                   use_lastfilepos != system_lyxrc.use_lastfilepos) {
+                       os << "\\use_session " << convert<string>(use_lastfilepos)
+                          << '\n';
+               }
+       case RC_LOADSESSION:
+               if (ignore_system_lyxrc ||
+                   load_session != system_lyxrc.load_session) {
+                       os << "\\load_session " << convert<string>(load_session)
+                          << "\n";
                }
        case RC_NUMLASTFILES:
                if (ignore_system_lyxrc ||
@@ -2219,8 +2282,12 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("De-select if you don't want babel to be used when the language of the document is the default language.");
                break;
 
-       case RC_LASTFILES:
-               str = _("The file where the last-files information should be stored.");
+       case RC_USELASTFILEPOS:
+               str = _("De-select if you do not want LyX to scroll to saved position.");
+               break;
+
+       case RC_LOADSESSION:
+               str = _("De-select to prevent loading files opened from the last lyx session.");
                break;
 
        case RC_MAKE_BACKUP:
@@ -2378,6 +2445,15 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("The zoom percentage for screen fonts. A setting of 100% will make the fonts roughly the same size as on paper.");
                break;
 
+       case RC_SCREEN_GEOMETRY_HEIGHT:
+       case RC_SCREEN_GEOMETRY_WIDTH:
+               str = _("Specify geometry of the main view in width x height (values from last session will not be used if non-zero values are specified).");
+               break;
+
+       case RC_SCREEN_GEOMETRY_XYSAVED:
+               str = _("Allow session manager to save and restore windows position.");
+               break;
+
        case RC_SERVERPIPE:
                str = _("This starts the lyxserver. The pipes get an additional extension \".in\" and \".out\". Only for advanced users.");
                break;
@@ -2390,7 +2466,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_SPELL_COMMAND:
-               str = _("What command runs the spell checker?");
+               str = _("What command runs the spellchecker?");
                break;
 
        case RC_TEMPDIRPATH:
@@ -2418,7 +2494,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
                break;
 
        case RC_USE_INP_ENC:
-               str = _("Specify whether to pass the -T input encoding option to ispell. Enable this if you can't spellcheck words with international letters in them. This may not work with all dictionaries.");
+               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_SPELL_LIB: