all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: help-gnu-emacs@gnu.org
Subject: Re: on eshell's encoding
Date: Tue, 26 Jul 2016 20:17:06 +0300	[thread overview]
Message-ID: <83twfcs4j1.fsf@gnu.org> (raw)
In-Reply-To: <864m7c5oqc.fsf@toledo.com> (message from Daniel Bastos on Tue, 26 Jul 2016 13:49:15 -0300)

> From: Daniel Bastos <dbastos@toledo.com>
> Date: Tue, 26 Jul 2016 13:49:15 -0300
> 
> > Is this on MS-Windows?  If so, you cannot invoke programs from Emacs
> > with command-line arguments encoded in anything but the system
> > codepage.  And UTF-8 cannot be a system codepage on Windows.
> 
> You're right.  This is MS-Windows.  But I thought MS-Windows would not
> interfere here.  Why does it interfere?  I thought the messages would go
> straight into git's ARGV.

How can it go "straight"?  Eshell is not a real shell, it's a Lisp
program that pretends to be a shell.  When you type RET at the end of
a command line, Eshell takes the command and calls a Windows API that
invokes programs, passing it the command you typed.  But the API that
Emacs calls accepts strings encoded in the system codepage.  So the
UTF-8 string you typed is interpreted as encoded in that codepage, and
that's why you get it back garbled.

If the characters you typed can be encoded by your system codepage,
then what you do should still work, if you tell Git that log messages
are encoded in that codepage.  Read about the i18n.commitEncoding
configuration parameter in the Git documentation.  However, I don't
recommend doing that, because you (and whoever else participates in
that project) will have then confine yourself to that encoding.

There's no way of safely passing UTF-8 encoded command-line arguments
to a Windows program.  The only way to break the limitations of the
system codepage is to use the Unicode (a.k.a. "wide") APIs, which
expect strings in UTF-16 encoding.  But that is not currently
supported in Emacs, due to boring technical problems.

> > I suggest to put the commit message in a file and use the -F switch to
> > "git commit".  Or use the built-in VC commands, they will do this
> > automatically for you (if you have Emacs 25).
> 
> If I put the commit message in a file, even without using -F switch, it
> works as expected.  

It will always work from a file, because file I/O doesn't have this
limitation.



  reply	other threads:[~2016-07-26 17:17 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-26 14:25 on eshell's encoding Daniel Bastos
2016-07-26 15:05 ` Eli Zaretskii
     [not found] ` <mailman.2058.1469545530.26859.help-gnu-emacs@gnu.org>
2016-07-26 16:49   ` Daniel Bastos
2016-07-26 17:17     ` Eli Zaretskii [this message]
2016-07-26 18:26       ` Yuri Khan
2016-07-26 18:35         ` Eli Zaretskii
     [not found]     ` <mailman.2074.1469553449.26859.help-gnu-emacs@gnu.org>
2016-07-27 11:56       ` Daniel Bastos
2016-07-27 13:15         ` Yuri Khan
2016-07-27 16:22           ` Eli Zaretskii
2016-07-27 16:47             ` Yuri Khan
2016-07-27 17:12               ` Eli Zaretskii
2016-07-27 16:14         ` Eli Zaretskii
     [not found]         ` <mailman.2119.1469636078.26859.help-gnu-emacs@gnu.org>
2016-08-02 13:24           ` Daniel Bastos
2016-08-02 15:12             ` 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

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

  git send-email \
    --in-reply-to=83twfcs4j1.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.