Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: curses 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
-
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?!
-
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.
-
všechno mám v utf-8
No právě. Akorát terminál zjevně ne.
-
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í.
-
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:
_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 :)
-
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 (http://www.andrewnoske.com/wiki/Unix_-_ncurses_ui)