mirror of
https://github.com/rfivet/uemacs.git
synced 2024-10-01 09:45:58 -04:00
Fix point and mark update when inserting in buffer with multiple windows.
This commit is contained in:
parent
041210b228
commit
5b2884b93c
41
line.c
41
line.c
@ -293,7 +293,7 @@ boolean linstr( char *instr) {
|
|||||||
boolean linsert_byte( int n, int c) {
|
boolean linsert_byte( int n, int c) {
|
||||||
char *cp1;
|
char *cp1;
|
||||||
char *cp2;
|
char *cp2;
|
||||||
line_p lp2, lp3 ;
|
line_p lp2 ;
|
||||||
int i ;
|
int i ;
|
||||||
|
|
||||||
assert( (curbp->b_mode & MDVIEW) == 0) ;
|
assert( (curbp->b_mode & MDVIEW) == 0) ;
|
||||||
@ -308,16 +308,34 @@ boolean linsert_byte( int n, int c) {
|
|||||||
if( lp2 == NULL)
|
if( lp2 == NULL)
|
||||||
return FALSE ;
|
return FALSE ;
|
||||||
|
|
||||||
lp3 = lp1->l_bp ; /* Previous line */
|
/* Insert after previous line */
|
||||||
lp3->l_fp = lp2 ; /* Link in */
|
lp1->l_bp->l_fp = lp2 ;
|
||||||
lp2->l_fp = lp1 ;
|
lp2->l_fp = lp1 ;
|
||||||
|
lp2->l_bp = lp1->l_bp ;
|
||||||
lp1->l_bp = lp2 ;
|
lp1->l_bp = lp2 ;
|
||||||
lp2->l_bp = lp3 ;
|
|
||||||
for( i = 0 ; i < n ; ++i)
|
for( i = 0 ; i < n ; ++i)
|
||||||
lp2->l_text[ i] = c ;
|
lp2->l_text[ i] = c ;
|
||||||
|
|
||||||
|
/* update point of current window */
|
||||||
curwp->w_dotp = lp2 ;
|
curwp->w_dotp = lp2 ;
|
||||||
curwp->w_doto = n ;
|
curwp->w_doto = n ;
|
||||||
|
|
||||||
|
/* update all windows displaying current buffer */
|
||||||
|
for( window_p wp = wheadp ; wp != NULL ; wp = wp->w_wndp)
|
||||||
|
if( wp->w_bufp == curbp) {
|
||||||
|
/* update top window line */
|
||||||
|
if( wp->w_linep == lp1)
|
||||||
|
wp->w_linep = lp2 ;
|
||||||
|
|
||||||
|
/* dot at end of buffer is now at beginning of new line */
|
||||||
|
if( wp->w_dotp == lp1)
|
||||||
|
wp->w_dotp = lp2 ;
|
||||||
|
|
||||||
|
/* mark at end of buffer is now at beginning of new line */
|
||||||
|
if( wp->w_markp == lp1)
|
||||||
|
wp->w_markp = lp2 ;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,22 +478,23 @@ boolean lnewline( void) {
|
|||||||
lp2->l_bp = lp1->l_bp ;
|
lp2->l_bp = lp1->l_bp ;
|
||||||
lp1->l_bp = lp2 ;
|
lp1->l_bp = lp2 ;
|
||||||
lp2->l_bp->l_fp = lp2 ;
|
lp2->l_bp->l_fp = lp2 ;
|
||||||
for( window_p wp = wheadp ; wp != NULL ; wp = wp->w_wndp) {
|
for( window_p wp = wheadp ; wp != NULL ; wp = wp->w_wndp)
|
||||||
|
if( wp->w_bufp == curbp) {
|
||||||
if( wp->w_linep == lp1)
|
if( wp->w_linep == lp1)
|
||||||
wp->w_linep = lp2 ;
|
wp->w_linep = lp2 ;
|
||||||
|
|
||||||
if( wp->w_dotp == lp1) {
|
if( wp->w_dotp == lp1) {
|
||||||
if( wp->w_doto < doto)
|
if( wp == curwp || wp->w_doto > doto)
|
||||||
wp->w_dotp = lp2 ;
|
|
||||||
else
|
|
||||||
wp->w_doto -= doto ;
|
wp->w_doto -= doto ;
|
||||||
|
else
|
||||||
|
wp->w_dotp = lp2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( wp->w_markp == lp1) {
|
if( wp->w_markp == lp1) {
|
||||||
if( wp->w_marko < doto)
|
if( wp->w_marko > doto)
|
||||||
wp->w_markp = lp2 ;
|
|
||||||
else
|
|
||||||
wp->w_marko -= doto ;
|
wp->w_marko -= doto ;
|
||||||
|
else
|
||||||
|
wp->w_markp = lp2 ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user