mutt_ldap.py: Add an output-encoding option v0.1
authorW. Trevor King <wking@tremily.us>
Thu, 24 Jan 2013 19:01:52 +0000 (14:01 -0500)
committerW. Trevor King <wking@tremily.us>
Thu, 24 Jan 2013 19:44:09 +0000 (14:44 -0500)
commitabcdc67e7bcdd3e0ac7cdc252d6d34c1e80c3f8f
treed8c12c6a25000b907095c97339b09a218234e9c0
parent44135524f7879a103ac412d09d77f75f3e409ebd
mutt_ldap.py: Add an output-encoding option

This avoids crashing with:

  UnicodeEncodeError: 'ascii' codec can't encode characters

when mutt_ldap.py's stdout is not connected to a terminal (and
therefore doesn't have sys.stdout.encodign set up).

  $ python2.7 -c "print(u'α')" | cat
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
  UnicodeEncodeError: 'ascii' codec can't encode characters in
    position 0-1: ordinal not in range(128)
  $ python2.7 -c 'import sys; print(sys.stdout.encoding)'
  UTF-8
  $ python2.7 -c 'import sys; print(sys.stdout.encoding)' | cat
  None
  $ python3.2 -c "print('α')" | cat
  α
  $ python3.2 -c 'import sys; print(sys.stdout.encoding)'
  UTF-8
  $ python3.2 -c 'import sys; print(sys.stdout.encoding)' | cat
  UTF-8

Both settings should match the value of the Mutt configuration
variable $charset [1,2]:

On Thu, Jan 24, 2013 at 06:25:24PM +0000, Michael Elkins wrote:
> On Thu, Jan 24, 2013 at 12:36:02PM -0500, W. Trevor King wrote:
> > I have a script that queries for address completion using the
> > query_command setting, but the docs are silent on the encoding for
> > the arguments and expected output [1]. ...
>
> It expects the output to be in the same encoding as $charset.
> Mutt performs the RFC2047 encoding automatically.

On Thu, Jan 24, 2013 at 07:00:53PM +0000, Michael Elkins wrote:
> On Thu, Jan 24, 2013 at 01:42:34PM -0500, W. Trevor King wrote:
> > ...Is it also $charset for the argv input?
>
> Yes.

If you don't specify a $charset in your Mutt config, you can probably
get away with not specifying charsets for these config options,
because Mutt's default charset detection will likely match up with
Python's locale.getpreferredencoding().

[1]: http://marc.info/?l=mutt-dev&m=135905197022081&w=2
[2]: http://marc.info/?l=mutt-dev&m=135905407723082&w=2
mutt_ldap.py