X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=d2484d152e1f25195eeca966702258200a77744d;hb=7c3fd636469b0a7f50f3515d100d9e957cda16b9;hp=a1fdac914007501829a8820767cf3bc781c59d30;hpb=bdc997726438fb63a671e5f2569e0f57d5ae0c1e;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index a1fdac9140..d2484d152e 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -404,10 +404,8 @@ void LyX::prepareExit() LYXERR(Debug::INFO, "Deleting tmp dir " << package().temp_dir().absFileName()); if (!package().temp_dir().destroyDirectory()) { - docstring const msg = - bformat(_("Unable to remove the temporary directory %1$s"), - from_utf8(package().temp_dir().absFileName())); - Alert::warning(_("Unable to remove temporary directory"), msg); + LYXERR0(bformat(_("Unable to remove the temporary directory %1$s"), + from_utf8(package().temp_dir().absFileName()))); } } } @@ -474,68 +472,62 @@ int LyX::execWithoutGui(int & argc, char * argv[]) return exit_status; } - // this is correct, since return values are inverted. - exit_status = !loadFiles(); + // Used to keep track of which buffers were explicitly loaded by user request. + // This is necessary because master and child document buffers are loaded, even + // if they were not named on the command line. We do not want to dispatch to + // those. + vector command_line_buffers; - 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); - bool success = true; + // Load the files specified on the command line vector::const_iterator it = pimpl_->files_to_load_.begin(); vector::const_iterator end = pimpl_->files_to_load_.end(); - for (; it != end; ++it) { - // get absolute path of file and add ".lyx" to - // the filename if necessary + // get absolute path of file and add ".lyx" to the filename if necessary FileName fname = fileSearch(string(), os::internal_path(*it), "lyx", - may_not_exist); + may_not_exist); if (fname.empty()) continue; Buffer * buf = pimpl_->buffer_list_.newBuffer(fname.absFileName()); + LYXERR(Debug::FILES, "Loading " << fname); if (buf->loadLyXFile() == Buffer::ReadSuccess) { ErrorList const & el = buf->errorList("Parse"); if (!el.empty()) - for_each(el.begin(), el.end(), - bind(&LyX::printError, this, _1)); - } - else { + for_each(el.begin(), el.end(), + bind(&LyX::printError, this, _1)); + command_line_buffers.push_back(buf); + } else { pimpl_->buffer_list_.release(buf); docstring const error_message = - bformat(_("LyX failed to load the following file: %1$s"), - from_utf8(fname.absFileName())); + bformat(_("LyX failed to load the following file: %1$s"), + from_utf8(fname.absFileName())); lyxerr << to_utf8(error_message) << endl; - success = false; + exit_status = 1; // failed } } - return success; + + if (exit_status || pimpl_->batch_commands.empty() || pimpl_->buffer_list_.empty()) { + prepareExit(); + return exit_status; + } + + // Iterate through the buffers that were specified on the command line + bool final_success = false; + vector::iterator buf_it = command_line_buffers.begin(); + for (; buf_it != command_line_buffers.end(); ++buf_it) { + Buffer * buf = *buf_it; + 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; }