From: Araki K. <j00...@ip...> - 2001-12-27 20:47:31
|
荒木です:-) Subject: Re: [Mlterm-dev-ja] Re: excess linefeed with curses? From: Araki Ken <j00...@ip...> Message-ID: <200...@pd...> Date: 28 Dec 2001 05:10:46 +0900 多分、原因分かったと思います。 > quoted from <200...@ch...> > > flushing chars(1)...==> <=== > > DEBUG: [insert_chars_intern()] inserting 1 chars at char index 58 row 29(30/30 len 60) -> -> char index 59 row 28(29/30 len 60) > > これがあきらかにおかしいのですよね。 > > row 29(30/30 len 60) -> -> row 28(29/30 len 60) > > になっているということは、insert_chars_intern() の間でスクロール処理が行 > われてしまっているという気がするのですが、get_pos() 関数の、 ... > ml_imgscrl_scroll_upward( image , 1) が実行されてしまっているのではない > か、と疑いました。 ml_imgscrl_scroll_upward() が実行されてしまうというのは正しかったと思いま すが、これが実行されるのは、render_chars() 関数の中でだと思います。 添付のパッチで解決しますでしょうか? では -- kiken j00...@ip... Index: ml_image.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_image.c,v retrieving revision 1.197 diff -u -r1.197 ml_image.c --- ml_image.c 2001/12/24 17:24:50 1.197 +++ ml_image.c 2001/12/27 20:37:48 @@ -189,7 +189,8 @@ ml_image_t * image , int start_row , ml_char_t * chars , - u_int num_of_chars + u_int num_of_chars , + int do_scroll ) { int bol ; /* index of the beginning of line */ @@ -275,7 +276,7 @@ } } - if( scroll_size) + if( do_scroll && scroll_size) { ml_imgscrl_scroll_upward( image , scroll_size) ; } @@ -290,7 +291,8 @@ ml_image_t * image , ml_char_t * chars , u_int num_of_chars , - u_int max_lines + u_int max_lines , + int do_scroll ) { int counter ; @@ -298,7 +300,7 @@ int beg_char_index ; u_int num_of_lines ; - if( ! render_chars( image , image->cursor.row , chars , num_of_chars)) + if( ! render_chars( image , image->cursor.row , chars , num_of_chars , do_scroll)) { return 0 ; } @@ -636,8 +641,11 @@ /* * overwriting. */ + + overwrite_lines( image , buffer , filled_len , 1 , 0) ; - overwrite_lines( image , buffer , filled_len , 1) ; + /* this is necessary before get_pos() since insert_chars_intern() should affect only this line */ + reset_wraparound_checker( image) ; /* wraparound_ready_line member is set in this function */ get_pos( image , &new_row , &new_char_index , image->cursor.row , 0 , @@ -1192,7 +1200,7 @@ * overwriting */ - overwrite_lines( image , buffer , filled_len , image->num_of_rows) ; + overwrite_lines( image , buffer , filled_len , image->num_of_rows , 1) ; /* wraparound_ready_line member is set in this function */ get_pos( image , &new_row , &new_char_index , image->cursor.row , 0 , |