]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_main.C
Partial fix bug 2092: branches not propagated to child documents
[lyx.git] / src / lyx_main.C
index fea5a59702d04b453e6817e0235d23293c655edf..4729678c0cbf294510b722f2ad761c2aa5ed9648 100644 (file)
@@ -45,6 +45,7 @@
 #include "frontends/lyx_gui.h"
 #include "frontends/LyXView.h"
 
+#include "support/environment.h"
 #include "support/filetools.h"
 #include "support/lyxlib.h"
 #include "support/os.h"
@@ -63,7 +64,7 @@ using lyx::support::bformat;
 using lyx::support::createDirectory;
 using lyx::support::createLyXTmpDir;
 using lyx::support::FileSearch;
-using lyx::support::GetEnv;
+using lyx::support::getEnv;
 using lyx::support::i18nLibFileSearch;
 using lyx::support::LibFileSearch;
 using lyx::support::package;
@@ -86,7 +87,7 @@ using std::system;
 #endif
 
 
-extern void QuitLyX();
+extern void QuitLyX(bool);
 
 extern LyXServer * lyxserver;
 
@@ -234,7 +235,7 @@ void LyX::priv_exec(int & argc, char * argv[])
        vector<string> files;
 
        for (int argi = argc - 1; argi >= 1; --argi)
-               files.push_back(argv[argi]);
+               files.push_back(os::internal_path(argv[argi]));
 
        if (first_start)
                files.push_back(i18nLibFileSearch("examples", "splash.lyx"));
@@ -270,14 +271,20 @@ void LyX::priv_exec(int & argc, char * argv[])
                if (last_loaded) {
                        bool success = false;
                        if (last_loaded->dispatch(batch_command, &success)) {
-                               QuitLyX();
+                               QuitLyX(false);
                                exit(!success);
                        }
                }
                files.clear(); // the files are already loaded
        }
 
-       lyx_gui::start(batch_command, files);
+       if (want_gui)
+               lyx_gui::start(batch_command, files);
+       else {
+               // Something went wrong above
+               QuitLyX(false);
+               exit(EXIT_FAILURE);
+       }
 }
 
 
@@ -369,9 +376,9 @@ static void error_handler(int err_sig)
 
 #ifdef SIGHUP
        if (err_sig == SIGSEGV ||
-           (err_sig != SIGHUP && !GetEnv("LYXDEBUG").empty()))
+           (err_sig != SIGHUP && !getEnv("LYXDEBUG").empty()))
 #else
-       if (err_sig == SIGSEGV || !GetEnv("LYXDEBUG").empty())
+       if (err_sig == SIGSEGV || !getEnv("LYXDEBUG").empty())
 #endif
                lyx::support::abort();
        exit(0);
@@ -399,13 +406,6 @@ void LyX::init(bool gui)
        signal(SIGTERM, error_handler);
        // SIGPIPE can be safely ignored.
 
-#if !defined (USE_POSIX_PACKAGING)
-       // Add the directory containing the LyX executable to the path
-       // so that LyX can find things like reLyX.
-       if (package().build_support().empty())
-               prependEnvPath("PATH", package().binary_dir());
-#endif
-
        // Check that user LyX directory is ok. We don't do that if
        // running in batch mode.
        bool reconfigure = false;
@@ -477,14 +477,23 @@ void LyX::init(bool gui)
                lyxrc.print();
 
        os::cygwin_path_fix(lyxrc.cygwin_path_fix);
-       prependEnvPath("PATH", lyxrc.path_prefix);
+       if (!lyxrc.path_prefix.empty())
+               prependEnvPath("PATH", lyxrc.path_prefix);
+
+#if !defined (USE_POSIX_PACKAGING)
+       // Add the directory containing the LyX executable to the path
+       // so that LyX can find things like tex2lyx.
+       if (package().build_support().empty())
+               prependEnvPath("PATH", package().binary_dir());
+#endif
 
        // Having reset the PATH we're now in a position to run configure
        // if necessary.
        if (reconfigure)
                reconfigureUserLyXDir();
 
-       if (fs::is_directory(lyxrc.document_path))
+       if (fs::exists(lyxrc.document_path) &&
+           fs::is_directory(lyxrc.document_path))
                package().document_dir() = lyxrc.document_path;
 
        package().temp_dir() = createLyXTmpDir(lyxrc.tempdir_path);
@@ -522,7 +531,9 @@ void LyX::defaultKeyBindings(kb_keymap  * kbmap)
        kbmap->bind("Down", FuncRequest(LFUN_DOWN));
 
        kbmap->bind("Tab", FuncRequest(LFUN_CELL_FORWARD));
-       kbmap->bind("ISO_Left_Tab", FuncRequest(LFUN_CELL_FORWARD));
+       kbmap->bind("C-Tab", FuncRequest(LFUN_CELL_SPLIT));
+       kbmap->bind("~S-ISO_Left_Tab", FuncRequest(LFUN_CELL_BACKWARD));
+       kbmap->bind("~S-BackTab", FuncRequest(LFUN_CELL_BACKWARD));
 
        kbmap->bind("Home", FuncRequest(LFUN_HOME));
        kbmap->bind("End", FuncRequest(LFUN_END));
@@ -561,10 +572,6 @@ void LyX::defaultKeyBindings(kb_keymap  * kbmap)
        kbmap->bind("KP_End", FuncRequest(LFUN_END));
        kbmap->bind("KP_Prior", FuncRequest(LFUN_PRIOR));
        kbmap->bind("KP_Next", FuncRequest(LFUN_NEXT));
-
-       kbmap->bind("C-Tab", FuncRequest(LFUN_CELL_SPLIT));
-       kbmap->bind("S-Tab", FuncRequest(LFUN_CELL_BACKWARD));
-       kbmap->bind("S-ISO_Left_Tab", FuncRequest(LFUN_CELL_BACKWARD));
 }
 
 
@@ -612,7 +619,8 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
        bool reconfigure = false;
 
        // Does user directory exist?
-       if (fs::is_directory(package().user_support())) {
+       if (fs::exists(package().user_support()) &&
+           fs::is_directory(package().user_support())) {
                first_start = false;
                string const configure_script =
                        AddName(package().system_support(), "configure");
@@ -621,7 +629,7 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
                if (fs::exists(configure_script) &&
                    fs::exists(userDefaults) &&
                    fs::last_write_time(configure_script)
-                   < fs::last_write_time(userDefaults)) {
+                   > fs::last_write_time(userDefaults)) {
                        reconfigure = true;
                }
                return reconfigure;
@@ -632,8 +640,8 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
        // If the user specified explicitly a directory, ask whether
        // to create it. If the user says "no", then exit.
        if (explicit_userdir &&
-           !Alert::prompt(
-                   _("Missing LyX support directory"),
+           Alert::prompt(
+                   _("Missing user LyX directory"),
                    bformat(_("You have specified a non-existent user "
                              "LyX directory, %1$s.\n"
                              "It is needed to keep your own configuration."),
@@ -877,9 +885,6 @@ int parse_execute(string const & arg, string const &)
                exit(1);
        }
        batch = arg;
-       // Argh. Setting gui to false segfaults..
-       // FIXME: when ? how ?
-       // is_gui = false;
        return 1;
 }