#include "cursor.h"
#include "debug.h"
#include "gettext.h"
-#include "lastfiles.h"
+#include "session.h"
+#include "LaTeXFeatures.h"
#include "lyx_main.h"
#include "lyxlayout.h"
#include "lyxrc.h"
#include "frontends/LyXView.h"
#include "support/filefilterlist.h"
-#include "support/FileInfo.h"
#include "support/filetools.h"
#include "support/forkedcall.h"
+#include "support/fs_extras.h"
#include "support/lyxlib.h"
-#include "support/os.h"
+#include "support/package.h"
#include "support/path.h"
-#include "support/path_defines.h"
#include "support/systemcall.h"
+#if !defined (HAVE_FORK)
+# define fork() -1
+#endif
+
#include <boost/shared_ptr.hpp>
+#include <boost/filesystem/operations.hpp>
#include <cerrno>
#include <fstream>
-using lyx::support::AddName;
+using lyx::support::addName;
using lyx::support::bformat;
using lyx::support::destroyDir;
using lyx::support::FileFilterList;
-using lyx::support::FileInfo;
using lyx::support::ForkedProcess;
-using lyx::support::IsLyXFilename;
-using lyx::support::LibFileSearch;
-using lyx::support::MakeAbsPath;
-using lyx::support::MakeDisplayPath;
-using lyx::support::OnlyFilename;
-using lyx::support::OnlyPath;
+using lyx::support::isLyXFilename;
+using lyx::support::libFileSearch;
+using lyx::support::makeAbsPath;
+using lyx::support::makeDisplayPath;
+using lyx::support::onlyFilename;
+using lyx::support::onlyPath;
using lyx::support::Path;
-using lyx::support::QuoteName;
+using lyx::support::package;
+using lyx::support::quoteName;
using lyx::support::removeAutosaveFile;
using lyx::support::rename;
using lyx::support::split;
-using lyx::support::system_lyxdir;
using lyx::support::Systemcall;
using lyx::support::tempName;
using lyx::support::unlink;
-using lyx::support::user_lyxdir;
-
-namespace os = lyx::support::os;
using boost::shared_ptr;
+namespace fs = boost::filesystem;
+
using std::back_inserter;
using std::copy;
using std::endl;
// Menu callbacks
//
-bool MenuWrite(Buffer * buffer)
+bool menuWrite(Buffer * buffer)
{
if (buffer->save()) {
- LyX::ref().lastfiles().newFile(buffer->fileName());
+ LyX::ref().session().addLastFile(buffer->fileName());
return true;
}
// FIXME: we don't tell the user *WHY* the save failed !!
- string const file = MakeDisplayPath(buffer->fileName(), 30);
+ string const file = makeDisplayPath(buffer->fileName(), 30);
string text = bformat(_("The document %1$s could not be saved.\n\n"
"Do you want to rename the document and try again?"), file);
text, 0, 1, _("&Rename"), _("&Cancel"));
if (ret == 0)
- return WriteAs(buffer);
+ return writeAs(buffer);
return false;
}
-bool WriteAs(Buffer * buffer, string const & filename)
+bool writeAs(Buffer * buffer, string const & filename)
{
string fname = buffer->fileName();
string const oldname = fname;
make_pair(string(_("Templates|#T#t")),
string(lyxrc.template_path)));
- if (!IsLyXFilename(fname))
+ if (!isLyXFilename(fname))
fname += ".lyx";
FileFilterList const filter (_("LyX Documents (*.lyx)"));
FileDialog::Result result =
- fileDlg.save(OnlyPath(fname),
+ fileDlg.save(onlyPath(fname),
filter,
- OnlyFilename(fname));
+ onlyFilename(fname));
if (result.first == FileDialog::Later)
return false;
return false;
// Make sure the absolute filename ends with appropriate suffix
- fname = MakeAbsPath(fname);
- if (!IsLyXFilename(fname))
+ fname = makeAbsPath(fname);
+ if (!isLyXFilename(fname))
fname += ".lyx";
} else
fname = filename;
- FileInfo const myfile(fname);
- if (myfile.isOK()) {
- string const file = MakeDisplayPath(fname, 30);
+ if (fs::exists(fname)) {
+ string const file = makeDisplayPath(fname, 30);
string text = bformat(_("The document %1$s already exists.\n\n"
"Do you want to over-write that document?"), file);
int const ret = Alert::prompt(_("Over-write document?"),
bool unnamed = buffer->isUnnamed();
buffer->setUnnamed(false);
- if (!MenuWrite(buffer)) {
+ if (!menuWrite(buffer)) {
buffer->setFileName(oldname);
buffer->setUnnamed(unnamed);
return false;
}
-void QuitLyX()
+void quitLyX(bool noask)
{
lyxerr[Debug::INFO] << "Running QuitLyX." << endl;
if (lyx_gui::use_gui) {
- if (!bufferlist.quitWriteAll())
+ if (!noask && !bufferlist.quitWriteAll())
return;
- LyX::cref().lastfiles().writeFile(lyxrc.lastfiles);
+ LyX::cref().session().writeFile();
}
// Set a flag that we do quitting from the program,
bufferlist.closeAll();
// do any other cleanup procedures now
- lyxerr[Debug::INFO] << "Deleting tmp dir " << os::getTmpDir() << endl;
+ lyxerr[Debug::INFO] << "Deleting tmp dir " << package().temp_dir() << endl;
- if (destroyDir(os::getTmpDir()) != 0) {
- string msg = bformat(_("Could not remove the temporary directory %1$s"),
- os::getTmpDir());
- Alert::warning(_("Could not remove temporary directory"), msg);
+ if (!destroyDir(package().temp_dir())) {
+ string const msg =
+ bformat(_("Unable to remove the temporary directory %1$s"),
+ package().temp_dir());
+ Alert::warning(_("Unable to remove temporary directory"), msg);
}
lyx_gui::exit();
} // namespace anon
-void AutoSave(BufferView * bv)
+void autoSave(BufferView * bv)
// should probably be moved into BufferList (Lgb)
// Perfect target for a thread...
{
// create autosave filename
string fname = bv->buffer()->filePath();
fname += '#';
- fname += OnlyFilename(bv->buffer()->fileName());
+ fname += onlyFilename(bv->buffer()->fileName());
fname += '#';
AutoSaveBuffer autosave(*bv, fname);
// create new file with template
// SERVERCMD !
//
-void NewFile(BufferView * bv, string const & filename)
+void newFile(BufferView * bv, string const & filename)
{
// Split argument by :
string name;
// Insert ascii file (if filename is empty, prompt for one)
-void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
+void insertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
{
if (!bv->available())
return;
return string();
}
- FileInfo fi(fname);
-
- if (!fi.readable()) {
+ if (!fs::is_readable(fname)) {
string const error = strerror(errno);
- string const file = MakeDisplayPath(fname, 50);
+ string const file = makeDisplayPath(fname, 50);
string const text = bformat(_("Could not read the specified document\n"
"%1$s\ndue to the error: %2$s"), file, error);
Alert::error(_("Could not read file"), text);
ifstream ifs(fname.c_str());
if (!ifs) {
string const error = strerror(errno);
- string const file = MakeDisplayPath(fname, 50);
+ string const file = makeDisplayPath(fname, 50);
string const text = bformat(_("Could not open the specified document\n"
"%1$s\ndue to the error: %2$s"), file, error);
Alert::error(_("Could not open file"), text);
// This function runs "configure" and then rereads lyx.defaults to
// reconfigure the automatic settings.
-void Reconfigure(BufferView * bv)
+void reconfigure(BufferView * bv)
{
bv->owner()->message(_("Running configure..."));
// Run configure in user lyx directory
- Path p(user_lyxdir());
+ Path p(package().user_support());
+ string const configure_script =
+ addName(package().system_support(), "configure.py");
+ string const configure_command = "python " + quoteName(configure_script);
Systemcall one;
- one.startscript(Systemcall::Wait,
- QuoteName(AddName(system_lyxdir(), "configure")));
+ one.startscript(Systemcall::Wait, configure_command);
p.pop();
bv->owner()->message(_("Reloading configuration..."));
- lyxrc.read(LibFileSearch(string(), "lyxrc.defaults"));
+ lyxrc.read(libFileSearch(string(), "lyxrc.defaults"));
+ // Re-read packages.lst
+ LaTeXFeatures::getAvailable();
Alert::information(_("System reconfigured"),
_("The system has been reconfigured.\n"