Fix command-line-normalize-file-name for DOS/Windows file names.

lisp/startup.el (command-line-normalize-file-name): Fix handling of
 backslashes in DOS and Windows file names.  Reported by Xue Fuqiao
 <xfq.free@gmail.com> in
 http://lists.gnu.org/archive/html/help-gnu-emacs/2013-03/msg00245.html.
This commit is contained in:
Eli Zaretskii 2013-03-16 10:20:36 +02:00
parent cded56c19b
commit 98e775e640
2 changed files with 17 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2013-03-16 Eli Zaretskii <eliz@gnu.org>
* startup.el (command-line-normalize-file-name): Fix handling of
backslashes in DOS and Windows file names. Reported by Xue Fuqiao
<xfq.free@gmail.com> in
http://lists.gnu.org/archive/html/help-gnu-emacs/2013-03/msg00245.html.
2013-03-15 Michael Albinus <michael.albinus@gmx.de>
Sync with Tramp 2.2.7.

View file

@ -2399,13 +2399,17 @@ A fancy display is used on graphic displays, normal otherwise."
;; Use arg 1 so that we don't collapse // at the start of the file name.
;; That is significant on some systems.
;; However, /// at the beginning is supposed to mean just /, not //.
(if (string-match "^///+" file)
(if (string-match
(if (memq system-type '(ms-dos windows-nt))
"^\\([\\/][\\/][\\/]\\)+"
"^///+")
file)
(setq file (replace-match "/" t t file)))
(and (memq system-type '(ms-dos windows-nt))
(string-match "^[A-Za-z]:\\(\\\\[\\\\/]\\)" file) ; C:\/ or C:\\
(setq file (replace-match "/" t t file 1)))
(while (string-match "//+" file 1)
(setq file (replace-match "/" t t file)))
(if (memq system-type '(ms-dos windows-nt))
(while (string-match "\\([\\/][\\/]\\)+" file 1)
(setq file (replace-match "/" t t file)))
(while (string-match "//+" file 1)
(setq file (replace-match "/" t t file))))
file))
;;; startup.el ends here