Jak opravit rámečky v curses?

curses

Jak opravit rámečky v curses?
« kdy: 23. 06. 2015, 22:38:09 »
Zdravím, snažím se vytvořit v curses rámeček, ale místo tohoto

┌────┐
│ text │
└────┘

se v terminálu zobrazí tohle

lqqqqqqqk
x  text   x
mqqqqqqj

všechno mám v utf-8 a python verzi 3.4, nedělá v tom prosím někdo ? že by poradil ? Díky
« Poslední změna: 23. 06. 2015, 22:46:15 od Petr Krčmář »


sdafasdfas

Re:Jak opravit rámečky v curses?
« Odpověď #1 kdy: 23. 06. 2015, 22:55:58 »
spise nez curses bych to videl na problem se fontem, nebo nastavenim curses pro ciste ascii textove terminaly bez utf-8 znaku.
neni tam nekde config, jake znaky se maji pouzivat?!

cleb

Re:Jak opravit rámečky v curses?
« Odpověď #2 kdy: 23. 06. 2015, 23:09:52 »
To jsem na jednom počítači viděl i v MC - třeba problém není vůbec ve vaší aplikaci ale v nastavení systému.

Lol Phirae

Re:Jak opravit rámečky v curses?
« Odpověď #3 kdy: 23. 06. 2015, 23:23:47 »
všechno mám v utf-8

No právě. Akorát terminál zjevně ne.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak opravit rámečky v curses?
« Odpověď #4 kdy: 24. 06. 2015, 09:08:16 »
Jestli se na ten počítač přihlašuješ přes putty, je lepší to nechat jak to je - často vynaložené úsilí to nastavit správně nestojí za to.

Na lokálním počítači si zkus pohrát s nastavením LOCALE proměnných aby byly v utf-8. Jestli to nepomůže, zkusit překompilovat knihovnu a znovu celý program + projít všemožná nastavení, což může být tisíc a jedna věcí.


BruXy

Re:Jak opravit rámečky v curses?
« Odpověď #5 kdy: 24. 06. 2015, 10:48:04 »
1. Zjisti si co mas v $TERM.
2. Vyzkousej i jine terminaly.
3. Uloz stdout do souboru a prozkoumej ho hexdumpem, pred ramecky maji byt ridici znaky, ktere prepinaji do semigrafiky.
4. Ja osobne jsem resil podobnou vec nasledovne:

Kód: [Vybrat]
_OPT_VT_GFX=1

#=== FUNCTION ============================================================
#        Name: _term_gfx
# Description: Reads from stdin and converts ASCII semigraphics to terminal
#              box graphics:
# http://en.wikipedia.org/wiki/Box-drawing_character#Unix.2C_CP.2FM.2C_BBS
#=========================================================================

function _term_gfx() {
    while read line ; do
        if [ $_OPT_VT_GFX -eq 1 ] ; then
             echo -e "$line" | sed -e 's/|/\x1b(0\x78\x1b(B/g' \
              -e "/^+\|^\.\|^'/{s/-/\x71/g}" -e 's/^+/\x1b(0\x74/' \
              -e 's/+$/\x1b(0\x75\x1b(B/' \
              -e 's/^\./\x1b(0\x6c/' -e 's/\.$/\x1b(0\x6b\x1b(B/' \
              -e "s/^'/\x1b(0\x6d/" -e "s/'$/\x1b(0\x6a\x1b(B/"
        else
        echo -e "$line"
        fi
    done
}

(  echo ".----------."
echo "|          |"
echo "+----------+"
echo "|          |"
echo "'----------'" ) | _term_gfx

Vystup prohanim filtrem, kterej nahrazuje urcity znaky na semigrafiku, muzu tam i jinde detekovat jestli je vystup do stdout nebo jinam a podle toho nastavit _OPT_VT_GFX (viz: help test | grep ' -t'). Ma to vyhodu tu, ze to   funguje na vetsine modernich terminalu, i kdyz zrovna u Win PuTTY to mozna delalo bordel. Nevyhoda je ta, ze linux/ansi nekompatibilni terminaly, ktere diky konfiguraci v /etc/termcap umi take zobrazit semigrafiku ovsem nebudou znat ty dane eskape sekvence, protoze jim to curses nepredzvejka. (No a z bashe do pythonu si to musis predelat sam, treba to tam bude i elegantnejsi :)

jenda

Re:Jak opravit rámečky v curses?
« Odpověď #6 kdy: 24. 06. 2015, 23:30:47 »
to vypada hezky :)

v ipythonu funguje treba tohle

svisla = chr(0x1b)+'(0'+chr(0x78)+chr(0x1b)+'(B'
print svisla+'menicko'

ve zdrojaku asi nezapomenout

# -*- coding: utf-8 -*-

v ncurses se to ale mozna dela jinak - ja v tomhle prikladu ramecek okolo vidim :
http://www.andrewnoske.com/wiki/Unix_-_ncurses_ui