* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author João Luis M. Assirati
- * \author Lars Gullik Bjønnes
+ * \author João Luis M. Assirati
+ * \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
*/
#include "support/FileName.h"
#include "support/FileNameList.h"
#include "support/lstrings.h"
+#include "support/Messages.h"
#include "support/unicode.h"
#include <boost/scoped_ptr.hpp>
// fcntl()
#include <fcntl.h>
+// strerror()
+#include <string.h>
+
#include <cerrno>
+#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>
namespace lyx {
+// Dummy LyXRC support
+struct LyXRC {
+ string icon_set;
+} lyxrc;
+
+// Keep the linker happy on Windows
+void lyx_exit(int)
+{}
+
+// Dummy language support
+Messages const & getGuiMessages()
+{
+ static Messages lyx_messages;
+
+ return lyx_messages;
+}
+
+
+Messages const & getMessages(string const &)
+{
+ return getGuiMessages();
+}
+
+
namespace support {
string itoa(unsigned int i)
for (; it != end; ++it) {
if (!it->isDirectory())
continue;
- string const tmpdir = it->absFilename();
+ string const tmpdir = it->absFileName();
if (!contains(tmpdir, "lyx_tmpdir" + pid))
continue;
if (::connect(fd,
reinterpret_cast<struct sockaddr *>(&addr),
sizeof(addr)) == -1) {
- cerr << "lyxclient: Could not connect to socket " << name.absFilename()
+ cerr << "lyxclient: Could not connect to socket " << name.absFileName()
<< ": " << strerror(errno) << endl;
::close(fd);
return -1;
// Returns true if there was a complete line to input
// A line is of the form <key>:<value>
// A line not of this form will not be passed
-// The line read is splitted and stored in 'key' and 'value'
+// The line read is split and stored in 'key' and 'value'
bool LyXDataSocket::readln(string & line)
{
int const charbuf_size = 100;
namespace cmdline {
+ docstring mainTmp(from_ascii("/tmp"));
+
+
void usage()
{
cerr <<
"Usage: lyxclient [options]\n"
"Options are:\n"
" -a address set address of the lyx socket\n"
- " -t directory set system temporary directory\n"
+ " -t directory set system temporary directory (for detecting sockets)\n"
" -p pid select a running lyx by pidi\n"
- " -c command send a single command and quit\n"
+ " -c command send a single command and quit (LYXCMD prefix needed)\n"
" -g file row send a command to go to file and row\n"
" -n name set client name\n"
" -h name display this help end exit\n"
"If -a is not used, lyxclient will use the arguments of -t and -p to look for\n"
- "a running lyx. If -t is not set, 'directory' defaults to /tmp. If -p is set,\n"
+ "a running lyx. If -t is not set, 'directory' defaults to the system directory. If -p is set,\n"
"lyxclient will connect only to a lyx with the specified pid. Options -c and -g\n"
"cannot be set simultaneoulsly. If no -c or -g options are given, lyxclient\n"
- "will read commands from standard input and disconnect when command read is BYE:"
+ "will read commands from standard input and disconnect when command read is BYE:\n"
+ "\n"
+ "System directory is: " << to_utf8(cmdline::mainTmp)
<< endl;
}
int n(vector<docstring> const & arg)
{
- if (arg.size() < 1) {
+ if (arg.empty()) {
cerr << "lyxclient: The option -n requires 1 argument."
<< endl;
return -1;
int c(vector<docstring> const & arg)
{
- if (arg.size() < 1) {
+ if (arg.empty()) {
cerr << "lyxclient: The option -c requires 1 argument."
<< endl;
return -1;
int a(vector<docstring> const & arg)
{
- if (arg.size() < 1) {
+ if (arg.empty()) {
cerr << "lyxclient: The option -a requires 1 argument."
<< endl;
return -1;
}
-docstring mainTmp(from_ascii("/tmp"));
int t(vector<docstring> const & arg)
{
- if (arg.size() < 1) {
+ if (arg.empty()) {
cerr << "lyxclient: The option -t requires 1 argument."
<< endl;
return -1;
int p(vector<docstring> const & arg)
{
- if (arg.size() < 1) {
+ if (arg.empty()) {
cerr << "lyxclient: The option -p requires 1 argument."
<< endl;
return -1;
using namespace lyx;
lyxerr.setStream(cerr);
+
+ // Set defaults
char const * const lyxsocket = getenv("LYXSOCKET");
if (lyxsocket)
cmdline::serverAddress = from_local8bit(lyxsocket);
+ // Default temporary
+ cmdline::mainTmp = FileName::tempPath().absoluteFilePath();
+
+ // Command line builder
CmdLineParser args;
args.helper["-h"] = cmdline::h;
args.helper["-c"] = cmdline::c;
if (server->connected())
break;
lyxerr << "lyxclient: " << "Could not connect to "
- << addr->absFilename() << endl;
+ << addr->absFileName() << endl;
}
if (addr == end) {
lyxerr << "lyxclient: No suitable server found."
<< endl;
return EXIT_FAILURE;
}
- cerr << "lyxclient: " << "Connected to " << addr->absFilename() << endl;
+ cerr << "lyxclient: " << "Connected to " << addr->absFileName() << endl;
}
int const serverfd = server->fd();
if (iowatch.isset(0)) {
string command;
getline(cin, command);
+ if (command.empty())
+ continue;
if (command == "BYE:") {
server->writeln("BYE:");
saidbye = true;