unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with	w32-shell-execute on remote file names.
Date: Mon, 03 Feb 2014 07:55:25 +0200	[thread overview]
Message-ID: <83txcg3fle.fsf@gnu.org> (raw)
In-Reply-To: <jwvzjm9rl0j.fsf-monnier+emacsdiffs@gnu.org>

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: emacs-devel@gnu.org
> Date: Sun, 02 Feb 2014 21:33:18 -0500
> 
> > Btw, find-file-name-handler returns nil for file-exists-p when the
> > file name specifies a compressed file, so I'm not sure what bothered
> > you in the first place.
> 
> Ha!  Indeed, I had never noticed that `operations' property!

I'm not sure this is an accident.  IMO, any file handler that works
with local files should do the same.

> Then I guess the current code is OK (tho it's still kind of a hack).

I prefer "clever engineering solution".

> >> And the reason we do that is because some file names are "normal" and
> >> others refer to non-files according to some w32 feature which can map
> >> them to some other tools.
> > The reason is described in the comment: if the file name is not
> > absolute and its name is not relative to the directory passed to the
> > system API, the API will fail.
> 
> I'm having trouble understanding the above: can you give an example of
> a file which is neither absolute nor relative to the directory passed
> to the system API?

I think it happened to me with shr.el, since it doesn't set the
current directory of the buffer where it renders an HTML document.

> >> I don't know that w32 feature at all, so it's hard for me to figure out
> >> what should be done, but it seems like file-exists-p is not the right
> >> thing to do anyway since the file name might be "normal" but refer to
> >> a file that doesn't exist yet.
> > Yes, that might happen, but then the file will be created in a
> > directory other than what the user expects it to, perhaps.
> 
> So it would be a problem, right?

Yes; see the comments in the code.  But I don't see any good solution
to this problem; do you?

In any case, this is not worse than what happened before the change
that introduced the call to expand-file-name: then, the ShellExecute
API was always called with a file name as passed to w32-shell-execute.

> Maybe instead of Ffile_exists_p a better option is to use a w32 system
> call along the lines of faccess or stat (after all, this presumed file
> name will be passed to the OS rather than to Emacs functions, so it
> shouldn't pay attention to file-name-handlers and things like that,
> right?).

That's exactly what the current code does:

  handler = Ffind_file_name_handler (absdoc, Qfile_exists_p);
  if (NILP (handler))
    {
      Lisp_Object absdoc_encoded = ENCODE_FILE (absdoc);

      if (faccessat (AT_FDCWD, SSDATA (absdoc_encoded), F_OK, AT_EACCESS) == 0)
	document = absdoc_encoded;
      else
	document = ENCODE_FILE (document);
    }
  else
    document = ENCODE_FILE (document);

> And to deal with "not yet created files" we shouldn't check the file
> itself but its directory.

Its directory is just the default-directory of the current buffer, so
I think we are covered:

  Lisp_Object current_dir = BVAR (current_buffer, directory);;

> >> So, how does w32 decide whether a file name is "normal" or not?
> > We cannot know: it's up to the application that is associated with
> > DOCUMENT and OPERATION.
> 
> So we don't actually know if the string we have is really a file name,
> and Ffile_exists_p is used to try and guess whether that's the case
> (because we need to adjust it somehow if that's the case)?

Indeed.



  parent reply	other threads:[~2014-02-03  5:55 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1W9Wnn-0004N6-IY@vcs.savannah.gnu.org>
2014-02-01 19:26 ` [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names Stefan Monnier
2014-02-01 19:58   ` Eli Zaretskii
2014-02-02  0:44     ` Stefan Monnier
2014-02-02  3:43       ` Eli Zaretskii
2014-02-02 15:06         ` Stefan Monnier
2014-02-02 15:54           ` Eli Zaretskii
2014-02-03  2:33             ` Stefan Monnier
2014-02-03  4:12               ` David Kastrup
2014-02-03  5:57                 ` Eli Zaretskii
2014-02-03  5:55               ` Eli Zaretskii [this message]
2014-02-03 14:06                 ` Stefan Monnier
2014-02-03 16:17                   ` Eli Zaretskii
2014-02-04  3:39                     ` Stefan Monnier
2014-02-04 16:31                       ` Eli Zaretskii
2014-02-04 20:35                         ` Stefan Monnier
2014-02-04 21:01                           ` Eli Zaretskii
2014-02-05  2:38                             ` Stefan Monnier
2014-02-05  3:56                               ` Eli Zaretskii
2014-02-05 14:10                                 ` Stefan Monnier
2014-02-05 16:07                                   ` Eli Zaretskii
2014-02-05 19:09                                     ` Stefan Monnier
2014-02-05 19:56                                       ` Eli Zaretskii
2014-02-05 21:53                                         ` Stefan Monnier
2014-02-06 11:47                                           ` Eli Zaretskii
2014-02-02  7:45       ` Stefan-W. Hahn
2014-02-05 17:21 grischka
2014-02-05 17:29 ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83txcg3fle.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).