Angus Leeming wrote:
> Are you happy for this patch to go in or should we thrash out the
> "location, location, location" stuff first?

Of course, it's always nice to see the patch...

-- 
Angus
Index: src/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v
retrieving revision 1.1021.2.58
diff -u -p -r1.1021.2.58 ChangeLog
--- src/ChangeLog	10 Jan 2005 19:17:22 -0000	1.1021.2.58
+++ src/ChangeLog	13 Jan 2005 00:04:39 -0000
@@ -1,3 +1,8 @@
+2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
+
+	* lyx_main.C (init): set the PATH variable to include the
+	directory containing the LyX binary when running on Mac or Windows.
+
 2005-01-10  Angus Leeming  <[EMAIL PROTECTED]>
 
 	* Makefile.am: remove the lyx_main.C special casing.
Index: src/lyx_main.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_main.C,v
retrieving revision 1.134.2.9
diff -u -p -r1.134.2.9 lyx_main.C
--- src/lyx_main.C	10 Jan 2005 19:17:25 -0000	1.134.2.9
+++ src/lyx_main.C	13 Jan 2005 00:04:39 -0000
@@ -87,6 +87,16 @@ LyX::LyX(int & argc, char * argv[])
 
 	lyx::init_package(argv[0], cl_system_support, cl_user_support);
 
+	// Set the locale_dir.
+	string locale_dir = lyx::package().locale_dir();
+	FileInfo fi(locale_dir);
+	if (fi.isOK() && fi.isDir()) {
+		lyxerr[Debug::INIT]
+			<< "Setting locale directory to "
+			<< locale_dir << endl;
+		gettext_init(locale_dir);
+	}
+
 	// Global bindings (this must be done as early as possible.) (Lgb)
 	toplevel_keymap.reset(new kb_keymap);
 	defaultKeyBindings(toplevel_keymap.get());
@@ -224,39 +234,26 @@ void LyX::init(bool gui)
 	signal(SIGINT, error_handler);
 	signal(SIGTERM, error_handler);
 
-	//
-	// Determine path of binary
-	//
-
 	lyx::Package const & package = lyx::package();
 
+#if !defined (USE_POSIX_PACKAGING)
+	// Add the directory containing the LyX executable to the path
+	// so that LyX can find things like reLyX.
+	if (package.build_support().empty()) {
+		vector<string> path = getEnvPath("PATH");
+		path.insert(path.begin(), package.binary_dir());
+		setEnvPath("PATH", path);
+	}
+#endif
 #if defined (USE_MACOSX_PACKAGING)
-	// Set PATH for LyX/Mac 
-	//
-	// LyX/Mac is a relocatable application bundle; here we add to
-	// the PATH so it can find binaries like reLyX inside its own
-	// application bundle, and also append PATH elements that it
-	// needs to run latex, previewers, etc.
-
-	string oldpath = GetEnv("PATH");
-	string newpath = "PATH=" + oldpath + ":" +
-		lyx::package().binary_dir() + ":";
-	newpath += "/sw/bin:/usr/local/bin:"
-		"/usr/local/teTeX/bin/powerpc-apple-darwin-current";
-	PutEnv(newpath);
-	lyxerr[Debug::INIT] << "Running from LyX/Mac bundle. " 
+	// This hard-coded nastiness should be moved into a LyXRC variable.
+	vector<string> path = getEnvPath("PATH");
+	path.insert(path.begin(), "/usr/local/teTeX/bin/powerpc-apple-darwin-current");
+	path.insert(path.begin(), "/usr/local/bin");
+	path.insert(path.begin(), "/sw/bin");
+	lyxerr[Debug::INIT]  << "Running from LyX/Mac bundle. "
 		"Setting PATH to: " << GetEnv("PATH") << endl;
 #endif
-
-	// Set the locale_dir.
-	string locale_dir = package.locale_dir();
-	FileInfo fi(locale_dir);
-	if (fi.isOK() && fi.isDir()) {
-		lyxerr[Debug::INIT] 
-			<< "Setting locale directory to "
-			<< locale_dir << endl;
-		gettext_init(locale_dir);
-	}
 
 	// Check that user LyX directory is ok. We don't do that if
 	// running in batch mode.
Index: src/support/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/ChangeLog,v
retrieving revision 1.149.2.26
diff -u -p -r1.149.2.26 ChangeLog
--- src/support/ChangeLog	10 Jan 2005 19:17:31 -0000	1.149.2.26
+++ src/support/ChangeLog	13 Jan 2005 00:04:44 -0000
@@ -1,3 +1,13 @@
+2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
+
+	* filetools.[Ch] (setEnvPath): new function to create a PATH-style
+	string from a vector of paths and to use it to set an environment
+	variable.
+
+	* os.h, os_os2.C, os_unix.C, os_win32.C (path_separator): new
+	function returning the character used to separate paths returned
+	by the PATH environment variable.
+
 2005-01-10  Angus Leeming  <[EMAIL PROTECTED]>
 
 	* os.h:
Index: src/support/filetools.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.C,v
retrieving revision 1.146.2.11
diff -u -p -r1.146.2.11 filetools.C
--- src/support/filetools.C	10 Jan 2005 19:17:31 -0000	1.146.2.11
+++ src/support/filetools.C	13 Jan 2005 00:04:46 -0000
@@ -378,13 +378,8 @@ vector<string> const getEnvPath(string c
 	typedef boost::char_separator<char> Separator;
 	typedef boost::tokenizer<Separator> Tokenizer;
 
-#if defined (__EMX__) || defined (_WIN32)
-	Separator const separator(";");
-#else
-	Separator const separator(":");
-#endif
-
 	string const env_var = GetEnv(name);
+	Separator const separator(string(1, os::path_separator()).c_str());
 	Tokenizer const tokens(env_var, separator);
 	Tokenizer::const_iterator it = tokens.begin();
 	Tokenizer::const_iterator const end = tokens.end();
@@ -397,12 +392,31 @@ vector<string> const getEnvPath(string c
 }
 
 
+void setEnvPath(string const & name, vector<string> const & env)
+{
+	char const separator(os::path_separator());
+	std::ostringstream ss;
+	vector<string>::const_iterator it = env.begin();
+	vector<string>::const_iterator const end = env.end();
+	for (; it != end; ++it) {
+		if (ss.tellp() > 0)
+			ss << separator;
+		ss << os::external_path(*it);
+	}
+	PutEnv(name + "=" + ss.str());
+}
+
+
 bool PutEnv(string const & envstr)
 {
 	// CHECK Look at and fix this.
 	// f.ex. what about error checking?
 
-#if HAVE_PUTENV
+#if defined (HAVE_SETENV)
+	string name;
+	string const value = split(envstr, name, '=');
+	int const retval = ::setenv(name.c_str(), value.c_str(), true);
+#elif defined (HAVE_PUTENV)
 	// this leaks, but what can we do about it?
 	//   Is doing a getenv() and a free() of the older value
 	//   a good idea? (JMarc)
@@ -425,14 +439,8 @@ bool PutEnv(string const & envstr)
 	// I will enable the above.
 	//int retval = lyx::putenv(envstr.c_str());
 #else
-#ifdef HAVE_SETENV
-	string varname;
-	string const str = envstr.split(varname,'=');
-	int const retval = ::setenv(varname.c_str(), str.c_str(), true);
-#else
 	// No environment setting function. Can this happen?
 	int const retval = 1; //return an error condition.
-#endif
 #endif
 	return retval == 0;
 }
Index: src/support/filetools.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.h,v
retrieving revision 1.38.2.2
diff -u -p -r1.38.2.2 filetools.h
--- src/support/filetools.h	10 Jan 2005 19:17:31 -0000	1.38.2.2
+++ src/support/filetools.h	13 Jan 2005 00:04:46 -0000
@@ -113,6 +113,12 @@ string const GetEnv(string const & envna
  */
 std::vector<string> const getEnvPath(string const & name);
 
+/** Set the contents of the environment variable \c name
+ *  using the paths stored in the \c env vector.
+ *  Each element is passed through os::external_path.
+ */
+void setEnvPath(string const & name, std::vector<string> const & env);
+
 ///
 bool PutEnv(string const & envstr);
 
Index: src/support/os.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os.h,v
retrieving revision 1.7.2.6
diff -u -p -r1.7.2.6 os.h
--- src/support/os.h	10 Jan 2005 19:17:31 -0000	1.7.2.6
+++ src/support/os.h	13 Jan 2005 00:04:46 -0000
@@ -30,17 +30,25 @@ public:
 	static string::size_type common_path(string const &p1,
 					     string const &p2);
 
-	// Converts a unix style path to host OS style.
+	/// Converts a unix style path to host OS style.
 	static string external_path(string const &p);
-	// Converts a host OS style path to unix style.
+	/// Converts a host OS style path to unix style.
 	static string internal_path(string const &p);
-	// is path absolute?
+	/// Is the path absolute?
 	static bool is_absolute_path(string const & p);
-	// returns a string suitable to be passed to fopen when
-	// reading a file
+	/** Returns a string suitable to be passed to fopen when
+	 *  reading a file.
+	 */
 	static char const * read_mode();
-	// same for popen().
+	/** Returns a string suitable to be passed to popen when
+	 *  reading a file.
+	 */
 	static char const * popen_read_mode();
+
+	/** The character used to separate paths returned by the
+	 *  PATH environment variable.
+	 */
+	static char path_separator();
 private:
 	static string const nulldev_;
 	static os::shell_type shell_;
Index: src/support/os_os2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_os2.C,v
retrieving revision 1.5.2.5
diff -u -p -r1.5.2.5 os_os2.C
--- src/support/os_os2.C	10 Jan 2005 19:17:31 -0000	1.5.2.5
+++ src/support/os_os2.C	13 Jan 2005 00:04:46 -0000
@@ -166,3 +166,11 @@ char const * os::popen_read_mode()
 {
 	return "r";
 }
+
+
+// The character used to separate paths returned by the
+//  PATH environment variable.
+char os::path_separator()
+{
+	return ';';
+}
Index: src/support/os_unix.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_unix.C,v
retrieving revision 1.6.2.4
diff -u -p -r1.6.2.4 os_unix.C
--- src/support/os_unix.C	10 Jan 2005 19:17:31 -0000	1.6.2.4
+++ src/support/os_unix.C	13 Jan 2005 00:04:47 -0000
@@ -66,3 +66,11 @@ char const * os::popen_read_mode()
 {
 	return "r";
 }
+
+
+// The character used to separate paths returned by the
+//  PATH environment variable.
+char os::path_separator()
+{
+	return ':';
+}
Index: src/support/os_win32.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_win32.C,v
retrieving revision 1.8.2.8
diff -u -p -r1.8.2.8 os_win32.C
--- src/support/os_win32.C	10 Jan 2005 19:17:31 -0000	1.8.2.8
+++ src/support/os_win32.C	13 Jan 2005 00:04:47 -0000
@@ -133,3 +133,15 @@ char const * os::popen_read_mode()
 {
 	return "r";
 }
+
+
+// The character used to separate paths returned by the
+//  PATH environment variable.
+char os::path_separator()
+{
+#if defined (_WIN32)
+	return ';';
+#else // Cygwin
+	return ':';
+#endif
+}
Index: src/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v
retrieving revision 1.2081
diff -u -p -r1.2081 ChangeLog
--- src/ChangeLog	10 Jan 2005 19:17:38 -0000	1.2081
+++ src/ChangeLog	13 Jan 2005 00:05:10 -0000
@@ -1,3 +1,13 @@
+2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
+
+	* lyx_main.C (init): set the PATH variable to include the
+	directory containing the LyX binary when running on Mac or Windows.
+
+2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
+
+	* lyx_main.C (init): remove cruft that purports to set the locale
+	dir. It doesn't and is not needed anyway.
+
 2005-01-10  Angus Leeming  <[EMAIL PROTECTED]>
 
 	* Makefile.am: remove the lyx_main.C special casing.
Index: src/lyx_main.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_main.C,v
retrieving revision 1.192
diff -u -p -r1.192 lyx_main.C
--- src/lyx_main.C	12 Jan 2005 10:30:44 -0000	1.192
+++ src/lyx_main.C	13 Jan 2005 00:05:11 -0000
@@ -343,31 +343,24 @@ void LyX::init(bool gui)
 	signal(SIGTERM, error_handler);
 	// SIGPIPE can be safely ignored.
 
+#if !defined (USE_POSIX_PACKAGING)
+	// Add the directory containing the LyX executable to the path
+	// so that LyX can find things like reLyX.
+	if (package.build_support().empty()) {
+		vector<string> path = getEnvPath("PATH");
+		path.insert(path.begin(), package.binary_dir());
+		setEnvPath("PATH", path);
+	}
+#endif
 #if defined (USE_MACOSX_PACKAGING)
-	// Set PATH for LyX/Mac
- 	//
- 	// LyX/Mac is a relocatable application bundle; here we add to
- 	// the PATH so it can find binaries like reLyX inside its own
- 	// application bundle, and also append PATH elements that it
-	// needs to run latex, previewers, etc.
-	string oldpath = GetEnv("PATH");
-	string newpath = "PATH=" + oldpath + ":" + package().binary_dir() + ":";
-	newpath += "/sw/bin:/usr/local/bin:"
-		"/usr/local/teTeX/bin/powerpc-apple-darwin-current";
-	PutEnv(newpath);
-	lyxerr[Debug::INIT] << "Running from LyX/Mac bundle. "
+	// This hard-coded nastiness should be moved into a LyXRC variable.
+	vector<string> path = getEnvPath("PATH");
+	path.insert(path.begin(), "/usr/local/teTeX/bin/powerpc-apple-darwin-current");
+	path.insert(path.begin(), "/usr/local/bin");
+	path.insert(path.begin(), "/sw/bin");
+	lyxerr[Debug::INIT]  << "Running from LyX/Mac bundle. "
 		"Setting PATH to: " << GetEnv("PATH") << endl;
 #endif
-
-	// Set the locale_dir.
-	string const & locale_dir = package().locale_dir();
-	FileInfo fi(locale_dir);
-	if (fi.isOK() && fi.isDir()) {
-		lyxerr[Debug::INIT]
-			<< "Setting locale directory to "
-			<< locale_dir << endl;
-		//gettext_init(locale_dir);
- 	}
 
 	// Check that user LyX directory is ok. We don't do that if
 	// running in batch mode.
Index: src/support/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/ChangeLog,v
retrieving revision 1.302
diff -u -p -r1.302 ChangeLog
--- src/support/ChangeLog	12 Jan 2005 12:25:30 -0000	1.302
+++ src/support/ChangeLog	13 Jan 2005 00:05:16 -0000
@@ -1,14 +1,21 @@
 2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
 
+	* filetools.[Ch] (setEnvPath): new function to create a PATH-style
+	string from a vector of paths and to use it to set an environment
+	variable.
+	(putEnv): resurrect this from the grave.
+
+	* os.h, os_os2.C, os_unix.C, os_win32.C (path_separator): new
+	function returning the character used to separate paths returned
+	by the PATH environment variable.
+
+	* os_win32.C: add #include "lstring.h" back in.
+
 	* package.C.in (package): comment out the ASSERT for now.
 	(check_env_var_dir): write one of the strings to be translated
 	(any one, doesn't matter) on a single line so that the
 	gettext search mechanism in po/Makefile.in.in will register
 	package.C.in as a file containing strings that need translation.
-
-2005-01-12  Angus Leeming  <[EMAIL PROTECTED]>
-
-	* os_win32.C: add #include "lstring.h" back in.
 
 2005-01-10  Angus Leeming  <[EMAIL PROTECTED]>
 
Index: src/support/filetools.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.C,v
retrieving revision 1.197
diff -u -p -r1.197 filetools.C
--- src/support/filetools.C	10 Jan 2005 19:17:43 -0000	1.197
+++ src/support/filetools.C	13 Jan 2005 00:05:17 -0000
@@ -399,13 +399,8 @@ vector<string> const getEnvPath(string c
 	typedef boost::char_separator<char> Separator;
 	typedef boost::tokenizer<Separator> Tokenizer;
 
-#if defined (__EMX__) || defined (_WIN32)
-	Separator const separator(";");
-#else
-	Separator const separator(":");
-#endif
-
 	string const env_var = GetEnv(name);
+	Separator const separator(string(1, os::path_separator()).c_str());
 	Tokenizer const tokens(env_var, separator);
 	Tokenizer::const_iterator it = tokens.begin();
 	Tokenizer::const_iterator const end = tokens.end();
@@ -418,14 +413,57 @@ vector<string> const getEnvPath(string c
 }
 
 
-string const GetEnvPath(string const & name)
+void setEnvPath(string const & name, vector<string> const & env)
 {
-#ifndef __EMX__
-	string const pathlist = subst(GetEnv(name), ':', ';');
+	char const separator(os::path_separator());
+	std::ostringstream ss;
+	vector<string>::const_iterator it = env.begin();
+	vector<string>::const_iterator const end = env.end();
+	for (; it != end; ++it) {
+		if (ss.tellp() > 0)
+			ss << separator;
+		ss << os::external_path(*it);
+	}
+	putEnv(name + "=" + ss.str());
+}
+
+
+bool putEnv(string const & envstr)
+{
+	// CHECK Look at and fix this.
+	// f.ex. what about error checking?
+
+#if defined (HAVE_SETENV)
+	string name;
+	string const value = split(envstr, name, '=');
+	int const retval = ::setenv(name.c_str(), value.c_str(), true);
+#elif defined (HAVE_PUTENV)
+	// this leaks, but what can we do about it?
+	//   Is doing a getenv() and a free() of the older value
+	//   a good idea? (JMarc)
+	// Actually we don't have to leak...calling putenv like this
+	// should be enough: ... and this is obviously not enough if putenv
+	// does not make a copy of the string. It is also not very wise to
+	// put a string on the free store. If we have to leak we should do it
+	// like this:
+	char * leaker = new char[envstr.length() + 1];
+	envstr.copy(leaker, envstr.length());
+	leaker[envstr.length()] = '\0';
+	int const retval = ::putenv(leaker);
+
+	// If putenv does not make a copy of the char const * this
+	// is very dangerous. OTOH if it does take a copy this is the
+	// best solution.
+	// The  only implementation of putenv that I have seen does not
+	// allocate memory. _And_ after testing the putenv in glibc it
+	// seems that we need to make a copy of the string contents.
+	// I will enable the above.
+	//int retval = lyx::putenv(envstr.c_str());
 #else
-	string const pathlist = os::internal_path(GetEnv(name));
+	// No environment setting function. Can this happen?
+	int const retval = 1; //return an error condition.
 #endif
-	return rtrim(pathlist, ";");
+	return retval == 0;
 }
 
 
Index: src/support/filetools.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.h,v
retrieving revision 1.57
diff -u -p -r1.57 filetools.h
--- src/support/filetools.h	10 Jan 2005 19:17:43 -0000	1.57
+++ src/support/filetools.h	13 Jan 2005 00:05:17 -0000
@@ -123,6 +123,15 @@ std::string const GetEnv(std::string con
  */
 std::vector<std::string> const getEnvPath(std::string const & name);
 
+/** Set the contents of the environment variable \c name
+ *  using the paths stored in the \c env vector.
+ *  Each element is passed through os::external_path.
+ */
+void setEnvPath(std::string const & name, std::vector<std::string> const & env);
+
+/// Set an environment variable using a string of the form "name=FOO".
+bool putEnv(std::string const & envstr);
+
 /// Substitutes active latex characters with underscores in filename
 std::string const MakeLatexName(std::string const & file);
 
Index: src/support/os.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os.h,v
retrieving revision 1.22
diff -u -p -r1.22 os.h
--- src/support/os.h	10 Jan 2005 19:17:43 -0000	1.22
+++ src/support/os.h	13 Jan 2005 00:05:17 -0000
@@ -21,32 +21,44 @@ namespace lyx {
 namespace support {
 namespace os {
 
-//
 enum shell_type {
 	UNIX,	// Do we have to distinguish sh and csh?
 	CMD_EXE
 };
 
-// do some work just once
+/// Do some work just once.
 void init(int argc, char * argv[]);
 
-// Returns the name of the NULL device (/dev/null, null).
+/// Returns the name of the NULL device (/dev/null, null).
 std::string const & nulldev();
-//
+
+/// Returns "/" on *nix, "C:/", etc on Windows.
 std::string current_root();
-//
+
+///
 shell_type shell();
-// DBCS aware!
+
+/// Extract the path common to both @c p1 and @c p2. DBCS aware!
 std::string::size_type common_path(std::string const & p1, std::string const & p2);
-// Converts a unix style path to host OS style.
+
+/// Converts a unix style path to host OS style.
 std::string external_path(std::string const & p);
-// Converts a host OS style path to unix style.
+
+/// Converts a host OS style path to unix style.
 std::string internal_path(std::string const & p);
-// is path absolute?
+
+/// Is the path absolute?
 bool is_absolute_path(std::string const & p);
-// returns a string suitable to be passed to popen when
-// same for popen().
-	char const * popen_read_mode();
+
+/** Returns a string suitable to be passed to popen when
+ *  reading a file.
+ */
+char const * popen_read_mode();
+
+/** The character used to separate paths returned by the
+ *  PATH environment variable.
+ */
+char path_separator();
 
 } // namespace os
 } // namespace support
Index: src/support/os_os2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_os2.C,v
retrieving revision 1.15
diff -u -p -r1.15 os_os2.C
--- src/support/os_os2.C	10 Jan 2005 19:17:43 -0000	1.15
+++ src/support/os_os2.C	13 Jan 2005 00:05:17 -0000
@@ -202,6 +202,12 @@ shell_type shell()
 	return shell_;
 }
 
+
+char path_separator()
+{
+	return ';';
+}
+
 } // namespace os
 } // namespace support
 } // namespace lyx
Index: src/support/os_unix.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_unix.C,v
retrieving revision 1.16
diff -u -p -r1.16 os_unix.C
--- src/support/os_unix.C	10 Jan 2005 19:17:43 -0000	1.16
+++ src/support/os_unix.C	13 Jan 2005 00:05:17 -0000
@@ -87,6 +87,11 @@ shell_type shell()
 	return UNIX;
 }
 
+char path_separator()
+{
+	return ':';
+}
+
 } // namespace os
 } // namespace support
 } // namespace lyx
Index: src/support/os_win32.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_win32.C,v
retrieving revision 1.22
diff -u -p -r1.22 os_win32.C
--- src/support/os_win32.C	12 Jan 2005 08:27:14 -0000	1.22
+++ src/support/os_win32.C	13 Jan 2005 00:05:18 -0000
@@ -163,6 +163,15 @@ shell_type shell()
 #endif
 }
 
+char path_separator()
+{
+#if defined (_WIN32)
+	return ';';
+#else // Cygwin
+	return ':';
+#endif
+}
+
 } // namespace os
 } // namespace support
 } // namespace lyx

Reply via email to