2008-12-27 6 views
4

Cela peut être un problème avec ma compréhension avec Curses plus qu'avec Perl, mais s'il vous plaît aidez-moi. J'utilise Curses.pm qui fonctionne assez bien sauf quand j'essaye de créer une "fenêtre" curses. Exemple de code:Pourquoi ma fenêtre de malédictions Perl ne fonctionne-t-elle pas?

use Curses; 
initscr; 
$w=newwin(1,1,40,40); 
$w->addstr(20,20,"Hello"); 
$w->refresh; 
refresh; 
endwin; 

ne génère rien. Ne pas utiliser une fenêtre fonctionne très bien:

use Curses; 
initscr; 
$w=newwin(1,1,40,40); 
addstr(20,20,"Hello"); 
refresh; 
endwin; 
+0

Vous avez également demandé ceci sur PerlMonks: http://www.perlmonks.org/index.pl?node_id=732771 Il est poli de dire aux gens que vous avez posté à plus d'un endroit afin qu'ils ne » t passer du temps à répondre à une question à laquelle on a déjà répondu. –

Répondre

8

Vous devez obtenir vos arguments au bon endroit, et il est difficile de se rappeler ce numéro est quoi. Je dois toujours chercher après avoir essayé toutes les mauvaises permutations d'abord. Je regarde juste les pages de manuel pour l'interface C et ensuite je la change en syntaxe Perl.

La fonction newwin, documentée dans la page de manuel curs_window, prend:

newwin(height, width, starty, startx) 

Vous définissez une fenêtre qui était une ligne haute et une colonne large, en commençant à la ligne 40 colonne 40. Cependant, alors vous dire addstr pour mettre du texte à la ligne 20 colonne 20 dans cette fenêtre. C'est en dehors du cadre 1x1 que vous avez configuré, donc vous ne voyez rien.

Essayez ceci pour voir si cela fonctionne pour vous. Si cela fonctionne, essayez d'ajuster les valeurs de la fenêtre pour obtenir le cadre que vous voulez.

use Curses; 
initscr; 

$w = newwin(
    1,  # height (y) 
    COLS(), # width (x) 
    0,  # start y 
    1  # start x 
    ); 

$w->addstr( 
    0,  # relative y to window 
    0,  # relative x to window 
    "Hello" 
    ); 

$w->refresh(); 

sleep 10; 
endwin; 
Questions connexes