X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=b7848311b85a6a10450572285cab072a7bcf0f94;hb=53f8d6d6d373460bdcfebd20d6f826e3915c84ff;hp=2247f33212fe2a00b6a577490960ab7296438f8b;hpb=0247f726aaf4411d7221254fb81a18771ef448f8;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index 2247f33212..b7848311b8 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -60,7 +60,7 @@ #include "support/Messages.h" #include "support/os.h" #include "support/Package.h" -#include "support/Path.h" +#include "support/PathChanger.h" #include "support/Systemcall.h" #include "support/bind.h" @@ -188,7 +188,7 @@ struct LyX::Impl { bool first_start; /// the parsed command line batch command if any vector batch_commands; - + /// LaTeXFonts * latexfonts_; @@ -261,7 +261,7 @@ Messages & LyX::messages(string const & language) pair::iterator, bool> result = pimpl_->messages_.insert(make_pair(language, Messages(language))); - LASSERT(result.second, /**/); + LATTEST(result.second); return result.first->second; } @@ -272,7 +272,7 @@ int LyX::exec(int & argc, char * argv[]) try { init_package(os::utf8_argv(0), string(), string()); // we do not get to this point when init_package throws an exception - locale_init(); + setLocale(); } catch (ExceptionMessage const & message) { LYXERR(Debug::LOCALE, message.title_ + ", " + message.details_); } @@ -294,7 +294,7 @@ int LyX::exec(int & argc, char * argv[]) // Reinit the messages machinery in case package() knows // something interesting about the locale directory. - Messages::init(); + setLocale(); if (!use_gui) { // FIXME: create a ConsoleApplication @@ -337,7 +337,7 @@ int LyX::exec(int & argc, char * argv[]) // Reestablish our defaults, as Qt overwrites them // after createApplication() - locale_init(); + setLocale();//??? // Parse and remove all known arguments in the LyX singleton // Give an error for all remaining ones. @@ -436,7 +436,7 @@ void LyX::prepareExit() void LyX::earlyExit(int status) { - LASSERT(pimpl_->application_.get(), /**/); + LATTEST(pimpl_->application_.get()); // LyX::pimpl_::application_ is not initialised at this // point so it's safe to just exit after some cleanup. prepareExit(); @@ -468,6 +468,11 @@ int LyX::init(int & argc, char * argv[]) for (int argi = 1; argi < argc; ++argi) pimpl_->files_to_load_.push_back(os::utf8_argv(argi)); + if (!use_gui && pimpl_->files_to_load_.empty()) { + lyxerr << to_utf8(_("Missing filename for this operation.")) << endl; + return EXIT_FAILURE; + } + if (first_start) { pimpl_->files_to_load_.push_back( i18nLibFileSearch("examples", "splash.lyx").absFileName()); @@ -479,7 +484,7 @@ int LyX::init(int & argc, char * argv[]) bool LyX::loadFiles() { - LASSERT(!use_gui, /**/); + LATTEST(!use_gui); bool success = true; vector::const_iterator it = pimpl_->files_to_load_.begin(); vector::const_iterator end = pimpl_->files_to_load_.end(); @@ -502,6 +507,10 @@ bool LyX::loadFiles() } else { pimpl_->buffer_list_.release(buf); + docstring const error_message = + bformat(_("LyX failed to load the following file: %1$s"), + from_utf8(fname.absFileName())); + lyxerr << to_utf8(error_message) << endl; success = false; } } @@ -511,7 +520,7 @@ bool LyX::loadFiles() void execBatchCommands() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); singleton_->execCommands(); } @@ -727,6 +736,18 @@ bool LyX::init() if (!setEnv("LyXDir", lyx_dir)) LYXERR(Debug::INIT, "\t... failed!"); + if (package().explicit_user_support() && getEnv(LYX_USERDIR_VER).empty()) { + // -userdir was given on the command line. + // Make it available to child processes, otherwise tex2lyx + // would not find all layout files, and other converters might + // use it as well. + string const user_dir = package().user_support().absFileName(); + LYXERR(Debug::INIT, "Setting " LYX_USERDIR_VER "... to \"" + << user_dir << '"'); + if (!setEnv(LYX_USERDIR_VER, user_dir)) + LYXERR(Debug::INIT, "\t... failed!"); + } + // // Read configuration files // @@ -746,8 +767,15 @@ bool LyX::init() prependEnvPath("PATH", replaceEnvironmentPath(lyxrc.path_prefix)); // Check that user LyX directory is ok. - if (queryUserLyXDir(package().explicit_user_support())) - reconfigureUserLyXDir(); + { + string const lock_file = package().user_support().absFileName() + ".lyx_configure_lock"; + int fd = fileLock(lock_file.c_str()); + + if (queryUserLyXDir(package().explicit_user_support())) { + reconfigureUserLyXDir(); + } + fileUnlock(fd, lock_file.c_str()); + } if (!use_gui) { // No need for a splash when there is no GUI @@ -785,6 +813,9 @@ bool LyX::init() if (!readRcFile("preferences", true)) return false; + // The language may have been set to someting useful through prefs + setLocale(); + if (!readEncodingsFile("encodings", "unicodesymbols")) return false; if (!readLanguagesFile("languages")) @@ -814,6 +845,7 @@ bool LyX::init() lyxrc.print(); os::windows_style_tex_paths(lyxrc.windows_style_tex_paths); + // Prepend path prefix a second time to take the user preferences into a account if (!lyxrc.path_prefix.empty()) prependEnvPath("PATH", replaceEnvironmentPath(lyxrc.path_prefix)); @@ -1057,7 +1089,8 @@ int parse_version(string const &, string const &, string &) { cout << "LyX " << lyx_version << " (" << lyx_release_date << ")" << endl; - cout << "Built on " << __DATE__ << ", " << __TIME__ << endl; + cout << to_utf8(bformat(_("Built on %1$s[[date]], %2$s[[time]]"), + from_ascii(__DATE__), from_ascii(__TIME__))) << endl; cout << lyx_version_info << endl; exit(0); @@ -1143,7 +1176,6 @@ int parse_import(string const & type, string const & file, string & batch) lyxerr << to_utf8(_("Missing filename for --import")) << endl; exit(1); } - batch = "buffer-import " + type + ' ' + file; return 2; } @@ -1260,35 +1292,35 @@ void LyX::easyParse(int & argc, char * argv[]) FuncStatus getStatus(FuncRequest const & action) { - LASSERT(theApp(), /**/); + LAPPERR(theApp()); return theApp()->getStatus(action); } void dispatch(FuncRequest const & action) { - LASSERT(theApp(), /**/); + LAPPERR(theApp()); return theApp()->dispatch(action); } void dispatch(FuncRequest const & action, DispatchResult & dr) { - LASSERT(theApp(), /**/); + LAPPERR(theApp()); return theApp()->dispatch(action, dr); } vector & theFilesToLoad() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->files_to_load_; } BufferList & theBufferList() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->buffer_list_; } @@ -1296,8 +1328,8 @@ BufferList & theBufferList() Server & theServer() { // FIXME: this should not be use_gui dependent - LASSERT(use_gui, /**/); - LASSERT(singleton_, /**/); + LWARNIF(use_gui); + LAPPERR(singleton_); return *singleton_->pimpl_->lyx_server_.get(); } @@ -1305,97 +1337,85 @@ Server & theServer() ServerSocket & theServerSocket() { // FIXME: this should not be use_gui dependent - LASSERT(use_gui, /**/); - LASSERT(singleton_, /**/); + LWARNIF(use_gui); + LAPPERR(singleton_); return *singleton_->pimpl_->lyx_socket_.get(); } KeyMap & theTopLevelKeymap() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->toplevel_keymap_; } Converters & theConverters() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->converters_; } Converters & theSystemConverters() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->system_converters_; } Movers & theMovers() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->movers_; } Mover const & getMover(string const & fmt) { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->movers_(fmt); } void setMover(string const & fmt, string const & command) { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); singleton_->pimpl_->movers_.set(fmt, command); } Movers & theSystemMovers() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->system_movers_; } Messages const & getMessages(string const & language) { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->messages(language); } Messages const & getGuiMessages() { - LASSERT(singleton_, /**/); - // A cache to translate full language name to language code - static string last_language = "auto"; - static string code; - if (lyxrc.gui_language != last_language) { - if (lyxrc.gui_language == "auto") - code.clear(); - else { - Language const * l = languages.getLanguage(lyxrc.gui_language); - code = l ? l->code() : string(); - } - last_language = lyxrc.gui_language; - } - return singleton_->messages(code); + LAPPERR(singleton_); + return singleton_->messages(Messages::guiLanguage()); } Session & theSession() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return *singleton_->pimpl_->session_.get(); } LaTeXFonts & theLaTeXFonts() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); if (!singleton_->pimpl_->latexfonts_) singleton_->pimpl_->latexfonts_ = new LaTeXFonts; return *singleton_->pimpl_->latexfonts_; @@ -1404,7 +1424,7 @@ LaTeXFonts & theLaTeXFonts() CmdDef & theTopLevelCmdDef() { - LASSERT(singleton_, /**/); + LAPPERR(singleton_); return singleton_->pimpl_->toplevel_cmddef_; }