emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: A few Windows build fixes


From: Vijay Lakshminarayanan
Subject: Re: A few Windows build fixes
Date: Thu, 01 Sep 2011 23:25:54 +0530
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (windows-nt)

Stefan Monnier <address@hidden> writes:

>>> > There's a general need for Emacs to understand/accept /cygdrive/foo
>>> > names passed on the command-line, so that could be fixed in
>>> > lisp/startup.el and lisp/w32*.el.
>>> There's cygwin-mount.el available as an elpa package in one of
>>> http://tromey.com/elpa or http://marmalade-repo.org/packages/ which
>>> works in most cases.
>
> cygwin-mount.el is a good package, but it has at least the following
> problems:
> - it affects all file-name operations within Emacs.  That's good if you
>   (the user) want to pretend that Emacs understands cygwin names and
>   want to be able to type them in, perform completion and stuff.  But it
>   is too intrusive otherwise.
> - it can bump into ambiguities ("/home" can mean the "home" subdir in
>   cygwin's root directory, or it can mean C:/home).  This is not
>   cygwin-mount's fault, but because of how it works, it doesn't try to
>   solve those ambiguities too carefully.
>
> So what I proposed above is to use something that also understands
> cygwin file names, but only at those places in the code where it's
> likely to appear (i.e. for file names that come from outside Emacs), at
> which point we can more easily try and resolve ambiguities and we're less
> likely to introduce problems.

Going through w32-fns.el, I see there's `w32-convert-standard-filename'
which actually replaces /cygdrive/ paths correctly.  Indeed, 

(convert-standard-filename
 "/cygdrive/c/programs/emacs-24.0.50/lisp/w32-fns.el")

; => "c:\\programs\\emacs-24.0.50\\lisp\\w32-fns.el"

does the right thing.

I briefly went thru `find-file' and it doesn't use
`convert-standard-filename' but that's probably the wrong place to
change anyway.

I made the following change to `server-visit-files'

$ diff -u server.el~ server.el
--- server.el~  2011-06-20 12:26:32.000000000 +0530
+++ server.el   2011-09-01 22:31:53.195000000 +0530
@@ -1182,6 +1182,7 @@
        (let* ((minibuffer-auto-raise (or server-raise-frame
                                          minibuffer-auto-raise))
               (filen (car file))
+              (filen (convert-standard-filename filen))
               (obuf (get-file-buffer filen)))
          (add-to-history 'file-name-history filen)
          (if (null obuf)

and then tried

$ emacsclient -n /cygdrive/c/autoexec.bat

but it didn't work because emacsclient provides emacs with the path
"c:/cygdrive/c/autoexec.bat".  The code should be a little better and
check if the file exists (if yes, open immediately) else check if it's a
cygwin provided path (have defvars that check if (1) we're on windows
and (2) is it a cygwin path...).  (Checking if cygwin is in PATH won't
work because it's possible that emacs is in cygwin's path but not vice
versa.)

Is this the right way to go about things?

>         Stefan

-- 
Cheers
~vijay

Gnus should be more complicated.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]