lyx_mirror/src/support/Systemcall.h
Enrico Forestieri 306b136cc0 Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.

The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.

As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 22:02:13 +02:00

61 lines
1.7 KiB
C++

// -*- C++ -*-
/**
* \file Systemcall.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Asger Alstrup
*
* Interface cleaned up by
* \author Angus Leeming
*
* Full author contact details are available in file CREDITS.
*/
#ifndef SYSTEMCALL_H
#define SYSTEMCALL_H
#include <string>
namespace lyx {
namespace support {
/**
* An instance of Class Systemcall represents a single child process.
*
* Class Systemcall uses system() to launch the child process.
* The user can choose to wait or not wait for the process to complete, but no
* callback is invoked upon completion of the child.
*
* The child process is not killed when the Systemcall instance goes out of
* scope.
*/
class Systemcall {
public:
/// whether to wait for completion
enum Starttype {
Wait, //< wait for completion before returning from startscript()
DontWait //< don't wait for completion
};
/** Start child process.
* The string "what" contains a commandline with arguments separated
* by spaces and encoded in the filesystem encoding. "$$s" will be
* replaced accordingly by commandPrep(). The string "path" contains
* the path to be prepended to the TEXINPUTS environment variable
* encoded in utf-8. Similarly for the string "lpath" that, if not
* empty, specifies an additional directory to be added to TEXINPUTS
* but after "path". Unset "process_events" in case UI should be
* blocked while processing the external command.
*/
int startscript(Starttype how, std::string const & what,
std::string const & path = empty_string(),
std::string const & lpath = empty_string(),
bool process_events = false);
};
} // namespace support
} // namespace lyx
#endif // SYSTEMCALL_H