[IPython-user] IPython Color help on windows cmd shell

Jörgen Stenarson jorgen.stenarson@bostream...
Wed Mar 7 13:01:09 CST 2007


Thomas Heller skrev:
> Jörgen Stenarson schrieb:
>> Thomas Heller skrev:
>>> Robert Kern schrieb:
>>>> Fernando Perez wrote:
>>>>> On 3/2/07, Thomas Heller <theller@ctypes.org> wrote:
>>>>>> In [1]: class X(object):
>>>>>>    ...:     u"the doc string"
>>>>>>    ...:
>>>>>>    ...:
>>>>>>
>>>>>> In [2]: x = X()
>>>>>>
>>>>>> In [3]: x??
>>>>>> T y p eX B a s e   C < c l a s s   ' _ _ mS t r i n g    < _ _ m a i n _ _ . X   o b j e cN a m e s pI n t e r a D o c s
>>>>>>  t r i n g   [ s o u r c e   f        t h e   d o
>>>>> Mmh, very odd.  I don't see that at all under Linux:
>>>>> I know so little about windows that I honestly don't have a clue as to
>>>>> what the problem could be.  Any suggestions?
>>>> Various (GUI terminal, font) combinations, on all platforms, want to render
>>>> "Unicode" characters as double-width.
>>>>
>>> Yes, and pyreadline/console.py should convert unicode to byte strings before
>>> rendering them.  There are two possibilities to fix this with ctypes:
>>> - The first one is to explicitely convert unicode strings.  The attached patch
>>>   does that for the WriteConsoleA function.
>>>
>>> - The second one is to let ctypes do it automatically by setting the .argtypes
>>>   attribute on the functions that need to handle text; in this case ctypes
>>>   automatically convert unicode/byte strings.
>>>
>>> Thomas
> [Patch deleted]
>> I think two issues more must be considered here.
> 
> These are valid points, imo.
>  
>> What should happen if the encoding does not work? Should offending 
>> characters be rendered as ? or should pyreadline raise an exception? 
>> What do you think?
> 
> In interactive mode, rendering them as ? is probably the best that can be done.
> 
>> The second issue is which encoding should be used? I not sure mbcs is 
>> the best, as I understand things it is connected to the filesystem 
>> encoding and not the encoding used by the console. These are in general 
>> not the same. For me (using a swedish windows machine) the default 
>> codepage for a console is cp850, though I usually use 1252.
> 
> Sure.  Probably one should use sys.stdout.encoding:
> 
> c:\printing>py24
> Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import sys
>>>> sys.stdout.encoding
> 'cp850'
>>>> sys.stdin.encoding
> 'cp850'
>>>> sys.stderr.encoding
>>>>
> 
>> /Jörgen
> 
> Hm, I forgot to mention a third possibility, which would hopefully also
> solve all the issues mentioned above:  Why not use WriteConsoleW instead
> of WriteConsoleA when a unicode string has to be printed?  This way no
> conversion at all would be needed.
> 
> Thomas
I guess that is a possibilty, do you know what happens if some character 
is not printable?

I will make a patch for this sometime later this week.

/Jörgen





More information about the IPython-user mailing list