This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problems with remote programs using ncurses (aptitude)


Brian,

Thank you very much for your detailed explaination.
I'm using default cygwin terminal.

I tried adding "codepage:oem" to CYGWIN env var but it didn't solve the problem.
I tried downloading poderosa (and running cygwin with or without utf8)
but again same type of problems.
Unfortunatly "TERM=linux-lat aptitude" command gave me the "error
opening terminal:linux-lat" error

In fact, I've noticed that there is no problem with horizontal and
vertical lines, but with other characteres. I thing these are padding
chars.. I don't have a proper linux terminal in front of me right now
so can't tell exactly what are these.

Anyway, it doesn't kill me to have these buggy characters with
aptitude. I thought these might be a common problem but apparently
there is no silver bullet for it.

Thanks again...

On Mon, Dec 8, 2008 at 8:00 PM, Brian Dessent <brian@dessent.net> wrote:
> SO wrote:
>
>> I have problems opening remote programs using ncurses library.
>> Aptitude for example. Menus and other interface components are just
>> garbage on my term on windows vista. Is there a solution for that?
>
> The answer will depend on what terminal you're using.  But first a
> summary of the problem: The application wants to draw nice looking boxes
> or lines.  So it checks the value of the TERM environment variable and
> then asks its local terminfo database what the appropriate characters
> are for that terminal, and prints them.  Simple, so far.
>
> The problem is that Cygwin terminals are all codepage-based, not
> Unicode.  (There is a rxvt-unicode package, but does not actually
> support Unicode yet.)  A codepage-based program is restricted to only
> being able to output characters in that codepage, which is pretty much
> the whole reason in a nutshell why Unicode was invented and is so
> superior.
>
> But anyway the default Windows codepage for most systems does *not*
> include the line drawing characters.  For example, most western locales
> use Windows-1252:
> <http://www.microsoft.com/globaldev/reference/sbcs/1252.mspx>.  Compare
> this to codepage 437, which is sometimes called the "OEM" codepage
> because it corresponds to the one originally used on the original IBM
> PC: <http://www.microsoft.com/globaldev/reference/oem/437.mspx>.  Hey
> look, line drawing characters!  If you look in slot C4 for example
> you'll a horizontal line, and then look in the same slot in CP-1252 and
> you'll see LATIN CAPITAL LETTER A WITH DIAERESIS, which explains why you
> see Ä where you should see a horizontal line, because the terminfo entry
> was written with CP437 in mind.
>
> So one solution is to switch to that codepage.  If and only if you are
> using the Cygwin terminal, then you can do this by adding "codepage:oem"
> to your CYGWIN environment variable, and everything should work.  Except
> of course if you need to actually view any text with those Latin
> accented characters.
>
> If you are using something other than the built-in Cygwin terminal, then
> you need a different solution.  If you are using rxvt in non-X11 mode,
> you can try using the built-in Windows font 'Terminal':
>
> rxvt -fn Terminal -tn rxvt-cygwin-native -e /bin/bash -li
>
> Another alternative (again, for non-X rxvt) is to use a font that is
> hacked up to pretend to be CP1252 except it's got the line drawing
> glyphs subsituted in those slots.  Google the list archives for
> "luconP.zip" which is a verion of Lucida Console appropriately
> modified.  After installing this font you should invoke rxvt with
> something like:
>
> rxvt -fn "Lucida ConsoleP-14" -tn rxvt-cygwin-native -e /bin/bash -li
>
> You can modify the -14 to select the desired font size.  And again this
> assumes you are using non-X rxvt -- if you're using it in X11 mode you
> could do something similar (find and specify a font with line drawing
> characters) except you would want the terminal name set to rxvt-cygwin
> without "-native".
>
> Another solution would be to use a unicode terminal, with the
> appropriate setting of TERM.  This means using a non-Cygwin application
> which unfortunately usually means pain because they don't play well with
> Cygwin's pty emulation, but I'm fairly sure there are some out there
> that work (poderosa?) or have been specially modified to work
> (cygputty).
>
> Another solution is to instead of changing terminals, just select a
> different value of TERM, i.e. *tell* the remote end you're using a
> different terminal.  The goal here is to select something that is close
> enough to your terminal that it shares a common set of control codes,
> but doesn't try to use the line drawing chars.  This can be hit and
> miss, as you're really lying by saying you're using a different terminal
> than the one you really are, but it can be a quick solution.  For
> example you might try:
>
> $ TERM=linux-lat aptitude
>
> (This linux-lat terminfo entry is described as "linux with latin1 or
> latin2 alternate character set" and it conveniently has all the line
> drawing stuff disabled so you'll just see blanks instead.)
>
> And one more possible workaround: take the terminfo entry for your
> terminal and modify it to use boring Latin ASCII characters (e.g. + | -
> etc) for line drawing.  This is better than the last alternative as you
> can rest assured that all the other capabilities should work correctly
> as you're just copying the existing one and modifying it.  Here is an
> example that does this with the rxvt-cygwin-native terminfo entry:
>
> $ infocmp -1 rxvt-cygwin-native | \
>  perl -pe 's@(rxvt-cygwin-native)@$1-latin@;' \
>  -e 's@acsc=.*$@acsc=!g#w*q+x\\,<-s.v<m>{\\\\`_0a\\:f\\\\h#}f~p|,@;' \
>  >/tmp/term.tmp && \
>  tic -o ~/.terminfo /tmp/term.tmp && \
>  rm /tmp/term.tmp
>
> This creates a new terminal called rxvt-cygwin-native-latin, compiles
> it, and installs it under your home directory in $HOME/.terminfo.  This
> is useful because terminfo applications look there first before the
> system location /usr/share/terminfo.  You can now use this by changing
> your rxvt startup shortcut to specify "-tn rxvt-cygwin-native-latin" or
> as above just for one command as:
>
> $ TERM=rxvt-cygwin-native-latin aptitude
>
> Note, the terminfo database has to be local to the machine that runs the
> command, not the machine that runs the terminal.  Since you are running
> aptitude on a remote system you'll need to transfer your new terminfo
> entry there for this to work, but that's pretty simple:
>
> $ (cd ~ && tar c .terminfo) | ssh hostname tar xv
>
> Brian
>
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Problem reports:       http://cygwin.com/problems.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
>
>

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]