Re: using gvim as editor on Windows

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

 



Tait <git.git@xxxxxxxx> writes:

> It comes from line 33 of editor.c, in launch_editor().
> if (strcmp(editor, ":")) {

This says "if 'editor' is not exactly the string ':'", then come into this
block.  If you set editor to ":abc", or "c:\path to\my editor.exe", they
are not "exactly the string ':'" and the codepath inside will be executed.

> ... I'm not familiar with the EDITOR=:
> convention. What is that supposed to indicate?

Literally, it means "run ':' command as the editor".  ':' command takes
and ignores arbitrary arguments and returns success without doing
anything.  As such, the codepath pretends that it ran ':' command without
actually running it, and returns as if it ran ':' command that left the
input file given as its argument unmodified.

> Can we narrow the
> detection to that specific case, or does a : anywhere in EDITOR need
> to be handled this way?

No, and the if statement is already narrow enough.  I think the problem is
that you have a broken shell ("sh").

    /* ... */
    if (strcspn(editor, "$ \t'") != len) {
        /* there are specials */
        strbuf_addf(&arg0, "%s \"$@\"", editor);
        args[i++] = "sh";
        args[i++] = "-c";
        args[i++] = arg0.buf;
    }
    args[i++] = editor;
    args[i++] = path;
    args[i] = NULL;
    /* ... */


If you have editor='"c:\some path\editor" -f', strcspn() notices that you have a
funny character in the path, and creates this string in arg0:

    "c:\some path\editor" -f "$@"

and feeds '-c', the above arg0, editor, and finally the name of the file,
to your shell; it is the same as running this from the command line:

    sh -c '"c:\some path\editor" -f "$@"' '"c:\some path\editor" -f' path-to-file

Now shell is supposed to expand "$@" into positional parameters, i.e. $1
(in this case, path-to-file) and run the named editor with it, IOW, your
editor program should see "-f" as its first parameter, and path-to-file as
its second parameter (and argv[] is terminated with NULL after that).

If you end up with a file whose name literally is '$@', that probably
means your "sh" did not expand it correctly.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]