X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=44e6e34088a2d3a1a7003953f5433daa4b8a84b5;hb=bc47054be88467f01fd2f6e437d555743bd8a7c9;hp=706950fe9fa317b09a0d8fbbe503e6c92ff84a0f;hpb=8d6d21c6d9038700418cd8c776a0d29e31847bf6;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index 706950fe9f..44e6e34088 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -50,6 +50,7 @@ #include "frontends/alert.h" #include "frontends/Application.h" +#include "support/ConsoleApplication.h" #include "support/lassert.h" #include "support/debug.h" #include "support/environment.h" @@ -60,8 +61,6 @@ #include "support/Messages.h" #include "support/os.h" #include "support/Package.h" -#include "support/PathChanger.h" -#include "support/Systemcall.h" #include "support/bind.h" #include @@ -127,18 +126,6 @@ void showFileError(string const & error) "Please check your installation."), from_utf8(error))); } - -void reconfigureUserLyXDir() -{ - string const configure_command = package().configure_command(); - - lyxerr << to_utf8(_("LyX: reconfiguring user directory")) << endl; - PathChanger p(package().user_support()); - Systemcall one; - one.startscript(Systemcall::Wait, configure_command); - lyxerr << "LyX: " << to_utf8(_("Done!")) << endl; -} - } // namespace anon /// The main application class private implementation. @@ -188,8 +175,6 @@ struct LyX::Impl { /// Movers system_movers_; - /// has this user started lyx for the first time? - bool first_start; /// the parsed command line batch command if any vector batch_commands; @@ -209,6 +194,27 @@ struct LyX::Impl { }; +/// The main application class for console mode +class LyXConsoleApp : public ConsoleApplication +{ +public: + LyXConsoleApp(LyX * lyx, int & argc, char * argv[]) + : ConsoleApplication(lyx_package, argc, argv), lyx_(lyx), + argc_(argc), argv_(argv) + { + } + void doExec() + { + int const exit_status = lyx_->execWithoutGui(argc_, argv_); + exit(exit_status); + } +private: + LyX * lyx_; + int & argc_; + char ** argv_; +}; + + /// frontend::Application * theApp() { @@ -301,39 +307,13 @@ int LyX::exec(int & argc, char * argv[]) setLocale(); if (!use_gui) { - // FIXME: create a ConsoleApplication - int exit_status = init(argc, argv); - if (exit_status) { - prepareExit(); - return exit_status; - } + LyXConsoleApp app(this, argc, argv); - // this is correct, since return values are inverted. - exit_status = !loadFiles(); + // Reestablish our defaults, as Qt overwrites them + // after creating app + setLocale();//??? - if (pimpl_->batch_commands.empty() || pimpl_->buffer_list_.empty()) { - prepareExit(); - return exit_status; - } - - BufferList::iterator begin = pimpl_->buffer_list_.begin(); - - bool final_success = false; - for (BufferList::iterator I = begin; I != pimpl_->buffer_list_.end(); ++I) { - Buffer * buf = *I; - if (buf != buf->masterBuffer()) - continue; - vector::const_iterator bcit = pimpl_->batch_commands.begin(); - vector::const_iterator bcend = pimpl_->batch_commands.end(); - DispatchResult dr; - for (; bcit != bcend; ++bcit) { - LYXERR(Debug::ACTION, "Buffer::dispatch: cmd: " << *bcit); - buf->dispatch(*bcit, dr); - final_success |= !dr.error(); - } - } - prepareExit(); - return !final_success; + return app.exec(); } // Let the frontend parse and remove all arguments that it knows @@ -486,6 +466,43 @@ int LyX::init(int & argc, char * argv[]) } +int LyX::execWithoutGui(int & argc, char * argv[]) +{ + int exit_status = init(argc, argv); + if (exit_status) { + prepareExit(); + return exit_status; + } + + // this is correct, since return values are inverted. + exit_status = !loadFiles(); + + if (pimpl_->batch_commands.empty() || pimpl_->buffer_list_.empty()) { + prepareExit(); + return exit_status; + } + + BufferList::iterator begin = pimpl_->buffer_list_.begin(); + + bool final_success = false; + for (BufferList::iterator I = begin; I != pimpl_->buffer_list_.end(); ++I) { + Buffer * buf = *I; + if (buf != buf->masterBuffer()) + continue; + vector::const_iterator bcit = pimpl_->batch_commands.begin(); + vector::const_iterator bcend = pimpl_->batch_commands.end(); + DispatchResult dr; + for (; bcit != bcend; ++bcit) { + LYXERR(Debug::ACTION, "Buffer::dispatch: cmd: " << *bcit); + buf->dispatch(*bcit, dr); + final_success |= !dr.error(); + } + } + prepareExit(); + return !final_success; +} + + bool LyX::loadFiles() { LATTEST(!use_gui); @@ -724,7 +741,7 @@ namespace { } } } - + void cleanDuplicateEnvVars() { std::set seen; @@ -744,7 +761,9 @@ void cleanDuplicateEnvVars() } // Loop over the list of duplicated variables - for (std::set::iterator dupe = dupes.begin(); dupe != dupes.end(); dupe++) { + std::set::iterator dupe = dupes.begin(); + std::set::iterator const dend = dupes.end(); + for (; dupe != dend; ++dupe) { const char *name = (*dupe).c_str(); char *val = getenv(name); if (val != NULL) { @@ -825,11 +844,11 @@ bool LyX::init() // Check that user LyX directory is ok. { - string const lock_file = package().user_support().absFileName() + ".lyx_configure_lock"; + string const lock_file = package().getConfigureLockName(); int fd = fileLock(lock_file.c_str()); if (queryUserLyXDir(package().explicit_user_support())) { - reconfigureUserLyXDir(); + package().reconfigureUserLyXDir(""); } fileUnlock(fd, lock_file.c_str()); } @@ -956,27 +975,6 @@ void emergencyCleanup() } -// return true if file does not exist or is older than configure.py. -static bool needsUpdate(string const & file) -{ - // We cannot initialize configure_script directly because the package - // is not initialized yet when static objects are constructed. - static FileName configure_script; - static bool firstrun = true; - if (firstrun) { - configure_script = - FileName(addName(package().system_support().absFileName(), - "configure.py")); - firstrun = false; - } - - FileName absfile = - FileName(addName(package().user_support().absFileName(), file)); - return !absfile.exists() - || configure_script.lastModified() > absfile.lastModified(); -} - - bool LyX::queryUserLyXDir(bool explicit_userdir) { // Does user directory exist? @@ -984,10 +982,10 @@ bool LyX::queryUserLyXDir(bool explicit_userdir) if (sup.exists() && sup.isDirectory()) { first_start = false; - return needsUpdate("lyxrc.defaults") - || needsUpdate("lyxmodules.lst") - || needsUpdate("textclass.lst") - || needsUpdate("packages.lst"); + return configFileNeedsUpdate("lyxrc.defaults") + || configFileNeedsUpdate("lyxmodules.lst") + || configFileNeedsUpdate("textclass.lst") + || configFileNeedsUpdate("packages.lst"); } first_start = !explicit_userdir; @@ -1149,8 +1147,6 @@ int parse_version(string const &, string const &, string &) if (string(lyx_git_commit_hash) != "none") cout << to_utf8(_(" Git commit hash ")) << string(lyx_git_commit_hash).substr(0,8) << endl; - cout << to_utf8(bformat(_("Built on %1$s[[date]], %2$s[[time]]"), - from_ascii(lyx_build_date), from_ascii(lyx_build_time))) << endl; cout << lyx_version_info << endl; exit(0); return 0;