Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Im Terminal Cursor positionieren

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pcAlko



Anmeldungsdatum: 14.05.2007
Beiträge: 70

BeitragVerfasst am: 04. Dez 2008 19:14   Titel: Im Terminal Cursor positionieren

Hallo Leute!

Ich würde gerne im Terminal (mit C) einen Mehrzeiligen Text ausgeben
und diesen immer wieder aktualisieren.
So wie top oder htop

Also nicht dass ich immer Zeile für Zeile ausgebe
dann rauscht der text immer nach oben und wird unübersichtlich.

Also sagen wir mal ganz einfach die Cursorposition bestimmen
wo das ganze ausgegeben werden soll.

Hat da irgendjemand eine Idee?

Danke
Cool pcAlko
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 04. Dez 2008 21:59   Titel:

Dafür kannst du z.B. ncurses benutzen.

Quick&Dirty geht aber auch:
Code:

$ infocmp
#       Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
        am, bce, km, mc5i, mir, msgr, npc, xenl,
        colors#8, cols#80, it#8, lines#24, pairs#64,
        acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
        clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
        dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
        flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
        ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
        ind=^J, indn=\E[%p1%dS, invis=\E[8m,
        is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~, kEND=\E[1;2F,
        kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~,
        kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=\177, kcbt=\E[Z,
        kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf13=\E[2P, kf14=\E[2Q,
        kf15=\E[2R, kf16=\E[2S, kf17=\E[15;2~, kf18=\E[17;2~,
        kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
        kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[5P,
        kf26=\E[5Q, kf27=\E[5R, kf28=\E[5S, kf29=\E[15;5~,
        kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~,
        kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~,
        kf36=\E[24;5~, kf37=\E[6P, kf38=\E[6Q, kf39=\E[6R,
        kf4=\EOS, kf40=\E[6S, kf41=\E[15;6~, kf42=\E[17;6~,
        kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
        kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[3P,
        kf5=\E[15~, kf50=\E[3Q, kf51=\E[3R, kf52=\E[3S,
        kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~,
        kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~,
        kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[4P,
        kf62=\E[4Q, kf63=\E[4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
        kfnd=\E[1~, khome=\EOH, kich1=\E[2~, kind=\E[1;2B,
        kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~,
        mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El, memu=\Em,
        op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT,
        rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?1049l, rmir=\E[4l,
        rmkx=\E[?1l\E>, rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m,
        rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
        setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
        setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
        setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
        sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
        sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h,
        smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
        smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
        u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,

Das sind die Codes für xterm. Jedes Terminal hat andere Codes zum Bewegen des Cursors etc.

Schreib dir die Codes für "cuu1" (Cursor hoch) und "cub1" (Cursor links) raus, z.B. mit
Code:

$tput cuu1 | od -tx1
0000000 1b 5b 41
0000003
$ tput cub1 | od -tx1
0000000 08
0000001

und benutz diese in Strings in deinem C-Programm. Das funktioniert aber nur mit dem Terminal, das du bei "infocmp" angegeben hast. Wenn du ordentlich programmieren willst, nimm ncurses, das benutzt automatisch die terminfo-Datei, die zu dem jeweiligen Terminal passt und ist auch komfortabler und oft viel schneller, besonders auf "echten" seriell angeschlossenen Terminals.

$ man ncurses
$ man infocmp
$ man terminfo

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

pcAlko



Anmeldungsdatum: 14.05.2007
Beiträge: 70

BeitragVerfasst am: 05. Dez 2008 18:16   Titel:

Danke,
dann werd ich mich mal mit dem ncurses beschäftigen.

Cool pcAlko
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy