From: Michael F. <fo...@fm...> - 2002-01-07 16:31:28
|
Hi, I am using WinXP, XEmacs native, no Cygwin, SSH 2 (binary from www.ssh.com) and got into the same problems as Pete. Using the following patch Tramp works for me: --- tramp.el 2002/01/06 14:02:38 2.68 +++ tramp.el 2002/01/07 16:23:19 @@ -2272,6 +2272,17 @@ (substring name 2) name)) +(defun tramp-convert-slashes (name) + "Convert backslashes in NAME to forward slashes. The function +`tramp-handle-expand-file-name' calls `expand-file-name' locally on a +remote file name. When the local system is a W32 system but the remote +system is Unix, this converts all forward slashes to backslashes. This +functions corrects this." + (mapconcat (lambda (c) + (list (if (char= c ?\\) ?/ c))) + name "") + ) + (defun tramp-handle-expand-file-name (name &optional dir) "Like `expand-file-name' for tramp files." ;; If DIR is not given, use DEFAULT-DIRECTORY or "/". @@ -2315,8 +2326,9 @@ ;; expand-file-name (this does "/./" and "/../"). (tramp-make-tramp-file-name multi-method method user host - (tramp-drop-volume-letter - (tramp-run-real-handler 'expand-file-name (list path)))))))) + (tramp-convert-slashes + (tramp-drop-volume-letter + (tramp-run-real-handler 'expand-file-name (list path))))))))) ;; Remote commands. Please note, that I do not have any experience with lisp and that this patch is probably more a hack than a solution and not the way how to do is in lisp. Just wanted to make sure that support for XEmacs without cygwin is not abandoned :-). Mike |
From: Pete F. <pet...@we...> - 2002-01-07 16:51:47
|
Michael Forster writes: > I am using WinXP, XEmacs native, no Cygwin, SSH 2 (binary from > www.ssh.com) and got into the same problems as Pete. Using the > following patch Tramp works for me: Does dired (C-x d) work? -- Pete Forman -./\.- Disclaimer: This post is originated WesternGeco -./\.- by myself and does not represent pet...@we... -./\.- opinion of Schlumberger, Baker http://petef.port5.com (new) -./\.- Hughes or their divisions. |
From: Michael F. <fo...@fm...> - 2002-01-07 17:14:48
|
Hi, > Does dired (C-x d) work? I have not tested much, because I do not normally use Dired, but displaying a directory and opening files in it works. Mike |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-01-09 14:10:13
|
"Michael Forster" <fo...@fm...> writes: > I am using WinXP, XEmacs native, no Cygwin, SSH 2 (binary from > www.ssh.com) and got into the same problems as Pete. Using the following > patch Tramp works for me: Hm. Maybe tramp-handle-expand-file-name should do the work itself for the remote file name, rather than calling on the standard expand-file-name. Hm. What does (file-name-absolute-p "/foo/bar") return on your XEmacs? I wonder if I can use it. Also, what does (file-name-as-directory "foo/bar") return on your XEmacs? I'm afraid it might append a backslash rather than a slash :-( And finally, is there a variable like directory-sep-char in Emacs? Does it work to do (let ((directory-sep-char ?/)) (expand-file-name "/foo/bar/./baz")) rather than calling it directly? kai -- Simplification good! Oversimplification bad! (Larry Wall) |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-01-09 14:12:09
|
In principle, I like your patch, but what happens for people using "\" in their filenames on Unix? Could you look at the value of directory-sep-char on your XEmacs? If it is ?\\, then all is proper and we could just replace directory-sep-char with "/" always. Right? kai -- Simplification good! Oversimplification bad! (Larry Wall) |
From: Michael F. <fo...@fm...> - 2002-01-10 08:02:06
|
Hi, Kai wrote: > In principle, I like your patch, but what happens for people > using "\" in their filenames on Unix? I'm well aware of this, but this file names will probably never work with the windows native expand-file-name. > Hm. Maybe tramp-handle-expand-file-name should do the work > itself for the remote file name, rather than calling on the > standard expand-file-name. That is probably the clean way to do this. > Could you look at the value of directory-sep-char on your > XEmacs? ==> ?\\ > If it is ?\\, then all is proper and we could just > replace directory-sep-char with "/" always. Right? Yes. Using this: --- tramp.el 2002/01/06 14:02:38 2.68 +++ tramp.el 2002/01/10 07:51:37 @@ -2315,8 +2315,9 @@ ;; expand-file-name (this does "/./" and "/../"). (tramp-make-tramp-file-name multi-method method user host - (tramp-drop-volume-letter - (tramp-run-real-handler 'expand-file-name (list path)))))))) + (let ((directory-sep-char ?/)) + (tramp-drop-volume-letter + (tramp-run-real-handler 'expand-file-name (list path))))))))) ;; Remote commands. instead of my original patch works. Please note that this does not solve the above problem. > What does (file-name-absolute-p "/foo/bar") return on your > XEmacs? I wonder if I can use it. ==> t > Also, what does (file-name-as-directory "foo/bar") return on > your XEmacs? I'm afraid it might append a backslash rather > than a slash :-( ==> "foo/bar\\" > And finally, is there a variable like directory-sep-char in > Emacs? Does it work to do > > (let ((directory-sep-char ?/)) > (expand-file-name "/foo/bar/./baz")) > > rather than calling it directly? (let ((directory-sep-char ?/)) (expand-file-name "/foo/bar/./baz")) ==> "//dionysos/br.lehre/foo/bar/baz" (expand-file-name "/foo/bar/./baz") ==> "\\\\dionysos\\br.lehre\\foo\\bar\\baz" (\\dionysos\br.lehre is the current directory. In case you do not know the windows UNC path syntax: this does mean: host "dionysos", share "br.lehre", subdirectory foo/bar/baz) Mike |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-01-10 10:22:09
|
"Michael Forster" <fo...@fm...> writes: > Kai wrote: >> In principle, I like your patch, but what happens for people >> using "\" in their filenames on Unix? > > I'm well aware of this, but this file names will probably never work > with the windows native expand-file-name. > >> Hm. Maybe tramp-handle-expand-file-name should do the work >> itself for the remote file name, rather than calling on the >> standard expand-file-name. > > That is probably the clean way to do this. > >> Could you look at the value of directory-sep-char on your >> XEmacs? > > ==> ?\\ > >> If it is ?\\, then all is proper and we could just >> replace directory-sep-char with "/" always. Right? > > Yes. Using this: > > --- tramp.el 2002/01/06 14:02:38 2.68 > +++ tramp.el 2002/01/10 07:51:37 > @@ -2315,8 +2315,9 @@ > ;; expand-file-name (this does "/./" and "/../"). > (tramp-make-tramp-file-name > multi-method method user host > - (tramp-drop-volume-letter > - (tramp-run-real-handler 'expand-file-name (list path)))))))) > + (let ((directory-sep-char ?/)) > + (tramp-drop-volume-letter > + (tramp-run-real-handler 'expand-file-name (list path))))))))) > > ;; Remote commands. > > instead of my original patch works. Please note that this does not solve > the above problem. Ah. This seems to be safe enough, so I'll do that. [time passes] Done. Will commit in a jiffy. >> What does (file-name-absolute-p "/foo/bar") return on your >> XEmacs? I wonder if I can use it. > > ==> t Looks good. >> Also, what does (file-name-as-directory "foo/bar") return on >> your XEmacs? I'm afraid it might append a backslash rather >> than a slash :-( > > ==> "foo/bar\\" Ah. So does (let ((directory-sep-char ?/)) (file-name-as-directory "foo/bar")) do the right thing then? >> And finally, is there a variable like directory-sep-char in >> Emacs? Does it work to do >> >> (let ((directory-sep-char ?/)) >> (expand-file-name "/foo/bar/./baz")) >> >> rather than calling it directly? > > (let ((directory-sep-char ?/)) > (expand-file-name "/foo/bar/./baz")) > > ==> "//dionysos/br.lehre/foo/bar/baz" Ick. So it's interpreting the absolute(!) file name "/foo/bar/./baz" as a relative file name?!?! How can we circumvent that? > (expand-file-name "/foo/bar/./baz") > > ==> "\\\\dionysos\\br.lehre\\foo\\bar\\baz" As above. > (\\dionysos\br.lehre is the current directory. In case you do not know > the windows UNC path syntax: this does mean: host "dionysos", share > "br.lehre", subdirectory foo/bar/baz) Hm. But it's still completely unclear to me why does expand-file-name consider the directory as relative :-( kai -- Simplification good! Oversimplification bad! (Larry Wall) |
From: Michael F. <fo...@fm...> - 2002-01-10 11:41:07
|
Hi, Kai wrote: > >> Also, what does (file-name-as-directory "foo/bar") return on > >> your XEmacs? I'm afraid it might append a backslash rather > >> than a slash :-( > > > > ==> "foo/bar\\" > > Ah. So does (let ((directory-sep-char ?/)) (file-name-as-directory > "foo/bar")) do the right thing then? Yes, it does: (let ((directory-sep-char ?/)) (file-name-as-directory "foo/bar")) ==> "foo/bar/" > >> And finally, is there a variable like directory-sep-char in > >> Emacs? Does it work to do > >> > >> (let ((directory-sep-char ?/)) > >> (expand-file-name "/foo/bar/./baz")) > >> > >> rather than calling it directly? > > > > (let ((directory-sep-char ?/)) > > (expand-file-name "/foo/bar/./baz")) > > > > ==> "//dionysos/br.lehre/foo/bar/baz" > > Ick. So it's interpreting the absolute(!) file name > "/foo/bar/./baz" as a relative file name?!?! How can we > circumvent that? After some investigation I must correct my statement: Xemacs does not prepend the current directory, but the current drive, which is correct. On Windows /foo/bar means an absolute Path _on the current drive_, and "\\dionysos\br.lehre" is considered as a drive (it is a share on a file server, which is roughly equivalent). If I am working on a local file, expand-file-name returns "C:/foo/bar/baz". Mike |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-01-23 17:11:01
|
"Michael Forster" <fo...@fm...> writes: > Hi, > > Kai wrote: >> >> Also, what does (file-name-as-directory "foo/bar") return on >> >> your XEmacs? I'm afraid it might append a backslash rather >> >> than a slash :-( >> > >> > ==> "foo/bar\\" >> >> Ah. So does (let ((directory-sep-char ?/)) (file-name-as-directory >> "foo/bar")) do the right thing then? > > Yes, it does: > > (let ((directory-sep-char ?/)) > (file-name-as-directory "foo/bar")) > > ==> "foo/bar/" I've made that change. Could you please look whether tramp-handle-directory-files needs the same change? >> >> And finally, is there a variable like directory-sep-char in >> >> Emacs? Does it work to do >> >> >> >> (let ((directory-sep-char ?/)) >> >> (expand-file-name "/foo/bar/./baz")) >> >> >> >> rather than calling it directly? >> > >> > (let ((directory-sep-char ?/)) >> > (expand-file-name "/foo/bar/./baz")) >> > >> > ==> "//dionysos/br.lehre/foo/bar/baz" >> >> Ick. So it's interpreting the absolute(!) file name >> "/foo/bar/./baz" as a relative file name?!?! How can we >> circumvent that? > > After some investigation I must correct my statement: Xemacs does not > prepend the current directory, but the current drive, which is correct. > On Windows /foo/bar means an absolute Path _on the current drive_, and > "\\dionysos\br.lehre" is considered as a drive (it is a share on a file > server, which is roughly equivalent). If I am working on a local file, > expand-file-name returns "C:/foo/bar/baz". So, how can we achieve that (expand-file-name "/foo/bar/./baz") produces "/foo/bar/baz" on your system? I'm sure it must be possible, but I don't have XEmacs on Windows to try. kai -- Simplification good! Oversimplification bad! (Larry Wall) |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-01-10 10:23:21
|
"Michael Forster" <fo...@fm...> writes: > Kai wrote: >> In principle, I like your patch, but what happens for people >> using "\" in their filenames on Unix? > > I'm well aware of this, but this file names will probably never work > with the windows native expand-file-name. Please don't forget that Tramp is also used on Unix! Adding your code means it breaks on Unix. At the _very_ least, the execution of the function should conditionalize on system-type or suchlike. Suppose I say (expand-file-name "foo\\bar") on my Unix system with your patch -- wrong result, right? kai -- Simplification good! Oversimplification bad! (Larry Wall) |