2011-07-04 19 views
4

n/cursesを使用して端末ウィンドウの右側および/または底面に印刷する標準的な方法は何ですか?(n)cursesを使用して端末の右側または底面に印刷

ここで少しスケッチです:

Terminal window: 
================================================================================ 
                     [ MSG ] 













message number 2             here is more 
================================================================================ 

ソリューションCまたはPythonでは大丈夫です。

ありがとうございます!

答えて

1

私は一緒に行きたい:

mvprintw(COLS-length("msg"),1,"msg"); 
mvprintw(0,LINES-1,"message number 2"); 
mvprintw(COLS-length("here is more"),LINES-1,"here is more"); 

ちょっと私は私の呪いプログラミングのほとんどを行う方法ですカフ、オフだこと。

1

は、私が知っている2つの方法がありますが、一つだけ、私は確信しているの:

ONE:ncursesライブラリから move(int row, int col)。しかし、この文の後にI/Oを実行する場合は、対応する 'mv'関数を使用してメーターをオフにします。例えば、

move(y, x); 
addch(ch); 

mvaddch(y, x, ch); 

NOTEに置き換えることができます:私はこれの唯一の頭をしましたが、自分はそれをテストしていません。

TWO:

printf("\033[%d;%df", y, x); 
fflush(stdout); 
printf("Hello, I will be placed at (x,y)\n"); 

私はこの1つの作品と確信しています。

Good Luck!

+2

2番目のものは_using_ ncursesではありません。それは_bypassing_ncursesです。 – ninjalj

+0

@ninjalj多少微妙かもしれませんが、それが#2に挙げられている理由です。 – Ram

+1

どのようにxとyを計算しますか? –

0

問題を自動的に回避するためにこのコードを書きました。 scr.addstr()の代わりにこれを呼び出すと、正しく動作するように正しいaddstr/insstrコマンドを実行します。

def cwrite(scr, row, col, str, attr=0): 
    max = scr.getmaxyx() 
    if row < max[0] - 1: 
     scr.addstr(row, col, str, attr) 
    elif row == max[0] - 1: 
     if len(str) + col >= max[1]: 
      offset = max[1] - col - 2 
      scr.addstr(row, col, str[:offset]) 
      scr.addstr(row, max[1] - 2, str[offset + 1], attr) 
      scr.insstr(row, max[1] - 1, str[offset], attr) 
     else: 
      scr.addstr(row, col, str, attr) 
関連する問題