#include "frontends/LyXView.h"
#include "support/environment.h"
-#include "support/filename.h"
#include "support/filetools.h"
#include "support/fontutils.h"
#include "support/lyxlib.h"
// we need to parse for "-dbg" and "-help"
easyParse(argc, argv);
- support::init_package(argv[0], cl_system_support, cl_user_support,
- support::top_build_dir_is_one_level_up);
+ support::init_package(to_utf8(from_local8bit(argv[0])),
+ cl_system_support, cl_user_support,
+ support::top_build_dir_is_one_level_up);
if (!use_gui) {
// FIXME: create a ConsoleApplication
initGuiFont();
- // FIXME
- /* Create a CoreApplication class that will provide the main event loop
- * and the socket callback registering. With Qt4, only QtCore
- * library would be needed.
- * When this is done, a server_mode could be created and the following two
- * line would be moved out from here.
- */
- pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
- pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_,
- support::os::internal_path(package().temp_dir() + "/lyxsocket")));
-
// Parse and remove all known arguments in the LyX singleton
// Give an error for all remaining ones.
int exit_status = init(argc, argv);
return exit_status;
}
+ // FIXME
+ /* Create a CoreApplication class that will provide the main event loop
+ * and the socket callback registering. With Qt4, only QtCore
+ * library would be needed.
+ * When this is done, a server_mode could be created and the following two
+ * line would be moved out from here.
+ */
+ // Note: socket callback must be registered after init(argc, argv)
+ // such that package().temp_dir() is properly initialized.
+ pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
+ pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_,
+ support::os::internal_path(package().temp_dir() + "/lyxsocket")));
+
// Start the real execution loop.
exit_status = pimpl_->application_->exec();
pimpl_->buffer_list_.closeAll();
// do any other cleanup procedures now
- lyxerr[Debug::INFO] << "Deleting tmp dir " << package().temp_dir() << endl;
-
- // Prevent the deletion of /tmp if LyX was called with invalid
- // arguments. Does not work on windows.
- // FIXME: Fix the real bug instead.
- if (package().temp_dir() == "/tmp") {
- lyxerr << "Not deleting /tmp." << endl;
- return;
- }
-
- if (!destroyDir(package().temp_dir())) {
- docstring const msg =
- bformat(_("Unable to remove the temporary directory %1$s"),
- from_utf8(package().temp_dir()));
- Alert::warning(_("Unable to remove temporary directory"), msg);
+ if (package().temp_dir() != package().system_temp_dir()) {
+ lyxerr[Debug::INFO] << "Deleting tmp dir "
+ << package().temp_dir() << endl;
+
+ if (!destroyDir(FileName(package().temp_dir()))) {
+ docstring const msg =
+ bformat(_("Unable to remove the temporary directory %1$s"),
+ from_utf8(package().temp_dir()));
+ Alert::warning(_("Unable to remove temporary directory"), msg);
+ }
}
if (use_gui) {
return EXIT_FAILURE;
for (int argi = argc - 1; argi >= 1; --argi) {
- // check for any remaining extra arguments other than
- // document file names. These will be passed out to the
- // frontend.
- if (argv[argi][0] == '-')
- continue;
// get absolute path of file and add ".lyx" to
// the filename if necessary
- pimpl_->files_to_load_.push_back(fileSearch(string(), os::internal_path(argv[argi]), "lyx"));
+ pimpl_->files_to_load_.push_back(fileSearch(string(),
+ os::internal_path(to_utf8(from_local8bit(argv[argi]))),
+ "lyx", support::allow_unreadable));
}
if (first_start)
if (it->empty())
continue;
- Buffer * const b = newFile(it->absFilename(), string(), true);
Buffer * buf = pimpl_->buffer_list_.newBuffer(it->absFilename(), false);
if (loadLyXFile(buf, *it)) {
ErrorList const & el = buf->errorList("Parse");
if (!lyxrc.path_prefix.empty())
prependEnvPath("PATH", lyxrc.path_prefix);
- if (fs::exists(lyxrc.document_path) &&
- fs::is_directory(lyxrc.document_path))
+ FileName const document_path(lyxrc.document_path);
+ if (fs::exists(document_path.toFilesystemEncoding()) &&
+ fs::is_directory(document_path.toFilesystemEncoding()))
package().document_dir() = lyxrc.document_path;
package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path)).absFilename();
// return true if file does not exist or is older than configure.py.
bool needsUpdate(string const & file)
{
- static string const configure_script =
- addName(package().system_support(), "configure.py");
- string const absfile =
- addName(package().user_support(), file);
+ // We cannot initialize configure_script directly because the package
+ // is not initialized yet when static objects are constructed.
+ static string configure_script;
+ static bool firstrun = true;
+ if (firstrun) {
+ configure_script = FileName(addName(
+ package().system_support(),
+ "configure.py")).toFilesystemEncoding();
+ firstrun = false;
+ }
+ string const absfile = FileName(addName(
+ package().user_support(), file)).toFilesystemEncoding();
return (! fs::exists(absfile))
|| (fs::last_write_time(configure_script)
> fs::last_write_time(absfile));
bool LyX::queryUserLyXDir(bool explicit_userdir)
{
// Does user directory exist?
- if (fs::exists(package().user_support()) &&
- fs::is_directory(package().user_support())) {
+ string const user_support =
+ FileName(package().user_support()).toFilesystemEncoding();
+ if (fs::exists(user_support) && fs::is_directory(user_support)) {
first_start = false;
return needsUpdate("lyxrc.defaults")
if (it == cmdmap.end())
continue;
- string arg((i + 1 < argc) ? argv[i + 1] : "");
- string arg2((i + 2 < argc) ? argv[i + 2] : "");
+ string const arg((i + 1 < argc) ? to_utf8(from_local8bit(argv[i + 1])) : string());
+ string const arg2((i + 2 < argc) ? to_utf8(from_local8bit(argv[i + 2])) : string());
int const remove = 1 + it->second(arg, arg2);