Schrift
[thread]12610[/thread]

Ausgabe auf Bildschirm: Wie Position des Cursors bestimmen (X/Y Koordinaten)

Leser: 2


<< >> 10 Einträge, 1 Seite
bytebrain
 2008-10-09 17:35
#115326 #115326
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

wie kann ich in Perl bestimmen, an welcher Position eine Bildschirm-Ausgabe erfolgt?
Wir sprechen hier von Perl-Scripten, Konsole, unter Linux (/bin/bash).
Also kein CGI oder so. Rein Konsole.

In C ging das, da kann ich mich noch vage dran erinnern...
Wenn jmd. was weiß, bitte melden :-D

Grüße,
bytebrain
MatthiasW
 2008-10-09 18:20
#115328 #115328
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Sieh dir im CPAN einfach mal die Term:: Module an, Term::Screen ist wohl das für dich am interessanteste: CPAN:Term::Screen

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
bytebrain
 2008-10-09 18:24
#115329 #115329
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
MatthiasW+2008-10-09 16:20:12--
Sieh dir im CPAN einfach mal die Term:: Module an, Term::Screen ist wohl das für dich am interessanteste: CPAN:Term::Screen

MfG


Ei Servus,

sieht ja sehr schick aus. Danke für den Hinweis.
Gibts auch eine Selfmade-Lösung ohne externe Module?


Grüße,
bytebrain
nepos
 2008-10-09 18:47
#115335 #115335
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
bytebrain+2008-10-09 16:24:24--
MatthiasW+2008-10-09 16:20:12--
Sieh dir im CPAN einfach mal die Term:: Module an, Term::Screen ist wohl das für dich am interessanteste: CPAN:Term::Screen

MfG


Ei Servus,

sieht ja sehr schick aus. Danke für den Hinweis.
Gibts auch eine Selfmade-Lösung ohne externe Module?


Grüße,
bytebrain


Schau dir halt die Module an, wie die das so machen...
MatthiasW
 2008-10-09 19:10
#115336 #115336
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Wenn es dir nur darum geht Zeichen/Strings an bestimmten Positionen auszugeben, und du keine speziellen Eingaben brauchst, kannst du natürlich auch selbst was mit print bauen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
        my @screen;
        my @pos  = (  0,  0 );
        my @size = ( 80, 24 );

        sub size { @_ ? @size = @_ : @size }
        sub at   { @_ ? @pos  = @_ : @pos  }

        sub set
        {
                my @str = split //, $_[0];

                $screen[ $pos[1] ][ $pos[0] + $_ ] = $str[$_]
                        for 0 .. $#str;
        } # set

        sub clear
        {
                @screen = ();
                $^O =~ /win/i
                        ? system('cls')
                        : system('clear')
        } # clear

        sub show
        {
                for my $y ( 1 .. $size[1] )
                {
                        for my $x ( 1 .. $size[0] )
                        {
                                my $char = $screen[ $y-1 ][ $x-1 ];
                                   $char = ' ' unless defined $char;

                                print $char;
                        } # for
                        print "\n";
                } # for
        } # show
}

Hier hast du den Array @screen, in dem die einzelnen Zeichen für die jeweilige Bildschirmposition gespeichert sind.
Ein set() schreibt Zeichen in @screen ab der aktuellen Position @pos.
@pos kannst du mit at() setzen/erfragen.
show() gibt @screen auf dem Bildschirm aus, alle nicht definierten Werte in Screen werden als ' '(Leerschritt) interpretiert.
Mit clear() löschst du @screen und den Terminalinhalt. Ob es ausreicht auf /win/i zu prüfen für das 'cls' und ansonsten von einem 'clear' auszugehen, weiß ich nicht.
In @size steht die Anzahl der Reihen und die Anzahl der Spalten, mittels size() kannst du sie setzen/erfragen.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
sid burn
 2008-10-09 19:31
#115338 #115338
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Wenn es dir darum geht Texte zu Formatieren ist ein Blick in Perl6::Form ganz gut.

Wenn es dir darum geht TUIs zu bauen würde ich lieber die Bibliothek Ncurses dafür nutzen. Curses::UI
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
FoolAck
 2008-10-09 19:44
#115339 #115339
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Quote
Gibts auch eine Selfmade-Lösung ohne externe Module?

Das Modul sagt doch, dass es Term::Cap verwendet. Was der Sinn dieses Moduls ist, kannst du hier nachlesen. Denn wie man den Cursor hier oder da hin schickt (sprich mit welchen Escapesequencen) ist nicht überall gleich, variiert also von Terminal(emulator) zu Terminal(emulator).
Zumindest hab ich das jetzt so verstanden.

Also auf den Terminalemulator kommts an, nicht auf die verwendete Shell.
NICHTSDESTOWENIGER noch einen Hinweis auf das hier..

Edit: arg, verlesen. Du willst ja die Position abfragen. Oha, was ist mit Scrollback etc.pp.? Ist das überhaupt möglich?
bytebrain
 2008-10-10 09:59
#115357 #115357
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen :)

@MatthiasW:
Danke für den Source-Code. Sieht sehr gut aus, das werde ich mir mal zu Gemüte führen :)

@FoolAck:
Danke für den Link mit den Steuerzeichen. Das sieht ebenfalls sehr gut, auch das werde ich mir mal ansehen :)

@sid burn:
Hm... Das ist alles nicht so das was ich suche. Trotzdem danke für deine Bemühungen.

@nepos:
Hab ich versucht, aber ich hab die Quelltexte nicht finden können. Runterladen wollte ich mir die pm-Dateien nicht mehr so kurz vor Feierabend ^^
sid burn
 2008-10-10 13:56
#115368 #115368
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
bytebrain+2008-10-10 07:59:04--
@sid burn:
Hm... Das ist alles nicht so das was ich suche. Trotzdem danke für deine Bemühungen.

Was versuchst du den zu machen?
Cursorposition nach X/Y bewegen ist ja schon ein Lösungsweg zu einem Problem das du hast.

Evtl. gibt es bessere Möglichkeiten für dein Problem.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
MatthiasW
 2008-10-10 14:02
#115369 #115369
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
bytebrain+2008-10-10 07:59:04--
@nepos:
Hab ich versucht, aber ich hab die Quelltexte nicht finden können. Runterladen wollte ich mir die pm-Dateien nicht mehr so kurz vor Feierabend ^^

Im CPAN steht bei der jeweiligen Doku zum Modul oben links der Link zum Source(Term::Screen). Direkt neben der Versionsnummer.

Außerdem kannst du auf der Paketseite(?) auch auf Browse(Term::Screen) gehen, um online die Dateien einzusehen, welche im Paket enthalten sind.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< >> 10 Einträge, 1 Seite



View all threads created 2008-10-09 17:35.