From 8a70d0ff9a09c5cdb180650935aefb4b9f8841df Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Thu, 12 Feb 2015 21:22:21 +0100 Subject: [PATCH] Fix viewer file paths on windows (bug #8892) Some applications do not accept forward slashes, so call external viewers and editors with backward slashes which is the usual convention under windows. --- src/Format.cpp | 12 ++++++++---- src/support/filetools.cpp | 2 ++ src/support/filetools.h | 3 +++ status.21x | 2 ++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Format.cpp b/src/Format.cpp index 9e221be352..b76ad99ab0 100644 --- a/src/Format.cpp +++ b/src/Format.cpp @@ -694,8 +694,10 @@ bool Formats::view(Buffer const & buffer, FileName const & filename, if (!contains(command, token_from_format)) command += ' ' + token_from_format; - command = subst(command, token_from_format, quoteName(onlyFileName(filename.toFilesystemEncoding()))); - command = subst(command, token_path_format, quoteName(onlyPath(filename.toFilesystemEncoding()))); + command = subst(command, token_from_format, + quoteName(onlyFileName(filename.toFilesystemEncoding()), quote_shell_filename)); + command = subst(command, token_path_format, + quoteName(onlyPath(filename.toFilesystemEncoding()), quote_shell_filename)); command = subst(command, token_socket_format, quoteName(theServerSocket().address())); LYXERR(Debug::FILES, "Executing command: " << command); // FIXME UNICODE utf8 can be wrong for files @@ -762,8 +764,10 @@ bool Formats::edit(Buffer const & buffer, FileName const & filename, if (!contains(command, token_from_format)) command += ' ' + token_from_format; - command = subst(command, token_from_format, quoteName(filename.toFilesystemEncoding())); - command = subst(command, token_path_format, quoteName(onlyPath(filename.toFilesystemEncoding()))); + command = subst(command, token_from_format, + quoteName(filename.toFilesystemEncoding(), quote_shell_filename)); + command = subst(command, token_path_format, + quoteName(onlyPath(filename.toFilesystemEncoding()), quote_shell_filename)); command = subst(command, token_socket_format, quoteName(theServerSocket().address())); LYXERR(Debug::FILES, "Executing command: " << command); // FIXME UNICODE utf8 can be wrong for files diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index 131e177767..8f409d7cae 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -178,6 +178,8 @@ string const quoteName(string const & name, quote_style style) // simple parser in Systemcall.cpp do the substitution. return '"' + subst(name, "\"", "\\\"") + '"'; #endif + case quote_shell_filename: + return quoteName(os::external_path(name), quote_shell); case quote_python: return "\"" + subst(subst(name, "\\", "\\\\"), "\"", "\\\"") + "\""; diff --git a/src/support/filetools.h b/src/support/filetools.h index 58d11542d4..bc1561cca4 100644 --- a/src/support/filetools.h +++ b/src/support/filetools.h @@ -110,6 +110,9 @@ enum quote_style { /** Quote for the (OS dependant) shell. This is needed for command line arguments of subprocesses. */ quote_shell, + /** Quote a file name for the (OS dependant) shell. This is needed + for file names as command line arguments of subprocesses. */ + quote_shell_filename, /** Quote for python. Use this if you want to store a filename in a python script. Example: \code os << "infile = " << quoteName(filename) << '\\n'; diff --git a/status.21x b/status.21x index 388bd6510c..eaa85e4c13 100644 --- a/status.21x +++ b/status.21x @@ -69,6 +69,8 @@ What's new - Fix output encoding information for non-TeX fonts XeTeX/LuaTeX on preview pane (bug 8919). +- Work around limitations of external image viewers on windows (bug 8892). + * INTERNALS -- 2.39.5