...
|
...
|
@@ -77,6 +77,7 @@ int re_setuidata(re_t *re);
|
77
|
77
|
|
78
|
78
|
int re_setfilename(re_t *re, char *filename);
|
79
|
79
|
int re_fixorigin(re_t *re);
|
|
80
|
+int re_fixorigin_center(re_t *re);
|
80
|
81
|
int re_processkey_editing(re_t *re, SDL_Event *event);
|
81
|
82
|
int re_processkey_commandwait(re_t *re, SDL_Event *event);
|
82
|
83
|
int re_processkey_commanddata(re_t *re, SDL_Event *event);
|
...
|
...
|
@@ -335,11 +336,7 @@ re_setuidata(re_t *re)
|
335
|
336
|
re->x=0,re->y=re->ui->fontheight,re->w=re->ui->w,re->h=re->ui->h-re->y;
|
336
|
337
|
re->maxrow=re->h/re->ui->fontheight-1;
|
337
|
338
|
re->maxcol=re->w/re->ui->fontwidth-1;
|
338
|
|
- if(re->curline>=(re->originline+re->maxrow)) {
|
339
|
|
- re->originline=re->curline-re->maxrow;
|
340
|
|
- re->originline=(re->originline<0)?0:re->originline;
|
341
|
|
- }
|
342
|
|
- re->origincol=(re->curcol>(re->maxcol-COLFORCESCROLL))?(re->curcol-(re->maxcol-COLFORCESCROLL)):0;
|
|
339
|
+ re_fixorigin(re);
|
343
|
340
|
return(0);
|
344
|
341
|
}
|
345
|
342
|
|
...
|
...
|
@@ -358,6 +355,30 @@ re_setfilename(re_t *re, char *filename)
|
358
|
355
|
|
359
|
356
|
int
|
360
|
357
|
re_fixorigin(re_t *re)
|
|
358
|
+{
|
|
359
|
+ if(re==NULL)
|
|
360
|
+ return(-1);
|
|
361
|
+ if(re->curline<(re->originline+LINEFORCESCROLL)) {
|
|
362
|
+ re->originline=re->curline-LINEFORCESCROLL;
|
|
363
|
+ re->originline=(re->originline<0)?0:re->originline;
|
|
364
|
+ }
|
|
365
|
+ if(re->curline>(re->originline+re->maxrow-LINEFORCESCROLL)) {
|
|
366
|
+ re->originline=re->curline+LINEFORCESCROLL-re->maxrow;
|
|
367
|
+ re->originline=(re->originline<0)?0:(re->originline>re->curline)?re->curline:re->originline;
|
|
368
|
+ }
|
|
369
|
+ if(re->curcol<re->origincol) {
|
|
370
|
+ re->origincol=re->curcol;
|
|
371
|
+ re->origincol=(re->origincol<0)?0:re->origincol;
|
|
372
|
+ }
|
|
373
|
+ if(re->curcol>=(re->origincol+re->maxcol-COLFORCESCROLL)) {
|
|
374
|
+ re->origincol=re->curcol+COLFORCESCROLL-re->maxcol;
|
|
375
|
+ re->origincol=(re->origincol<0)?0:re->origincol;
|
|
376
|
+ }
|
|
377
|
+ return(0);
|
|
378
|
+}
|
|
379
|
+
|
|
380
|
+int
|
|
381
|
+re_fixorigin_center(re_t *re)
|
361
|
382
|
{
|
362
|
383
|
if(re==NULL)
|
363
|
384
|
return(-1);
|
...
|
...
|
@@ -369,6 +390,7 @@ re_fixorigin(re_t *re)
|
369
|
390
|
return(0);
|
370
|
391
|
}
|
371
|
392
|
|
|
393
|
+
|
372
|
394
|
int
|
373
|
395
|
re_processkey_editing(re_t *re, SDL_Event *event)
|
374
|
396
|
{
|
...
|
...
|
@@ -376,8 +398,8 @@ re_processkey_editing(re_t *re, SDL_Event *event)
|
376
|
398
|
if(re==NULL || event==NULL)
|
377
|
399
|
return(-1); /* sanity check failed */
|
378
|
400
|
/* convert RETURN KEYDOWN to TEXTINPUT */
|
379
|
|
-#warning XXX TODO: If the "\n" of end-of-file is deleted using DEL, the editor bugs
|
380
|
401
|
if(event->type==SDL_KEYDOWN && event->key.keysym.sym==SDLK_RETURN) {
|
|
402
|
+#warning file having two \n at the end, delete the second with DEL staying to the right of the first, if we go down then, it does an scroll but it shouldn't
|
381
|
403
|
memset(&fakeevent,0,sizeof(SDL_Event));
|
382
|
404
|
event=&fakeevent;
|
383
|
405
|
event->type=SDL_TEXTINPUT;
|
...
|
...
|
@@ -496,7 +518,7 @@ fprintf(stderr,"SDL_KEYDOWN: sym:%i\n",event->key.keysym.sym);
|
496
|
518
|
re->cursorpos=(event->key.keysym.sym==SDLK_PAGEDOWN)?(redata_getused(re->data)-1):0;
|
497
|
519
|
re->cursorpos=(re->cursorpos<0)?0:re->cursorpos;
|
498
|
520
|
redata_pos2linecol(re->data,re->cursorpos,&(re->curline),&(re->curcol));
|
499
|
|
- re_fixorigin(re);
|
|
521
|
+ re_fixorigin_center(re);
|
500
|
522
|
re->headerdirty=1;
|
501
|
523
|
re->contentsdirty=1;
|
502
|
524
|
} else if(event->key.keysym.sym==SDLK_PAGEDOWN || event->key.keysym.sym==SDLK_PAGEUP) {
|
...
|
...
|
@@ -510,14 +532,7 @@ fprintf(stderr,"SDL_KEYDOWN: sym:%i\n",event->key.keysym.sym);
|
510
|
532
|
re->cursorpos=newpos;
|
511
|
533
|
if(redata_pos2linecol(re->data,re->cursorpos,NULL,&(re->curcol))==-1)
|
512
|
534
|
return(-1); /* couldn't get col of current pos */;
|
513
|
|
- if(re->curcol<re->origincol) {
|
514
|
|
- re->origincol=re->curcol;
|
515
|
|
- re->origincol=(re->origincol<0)?0:re->origincol;
|
516
|
|
- }
|
517
|
|
- if(re->curcol>(re->origincol+re->maxcol-COLFORCESCROLL)) {
|
518
|
|
- re->origincol=re->curcol+COLFORCESCROLL-re->maxcol;
|
519
|
|
- re->origincol=(re->origincol<0)?0:re->origincol;
|
520
|
|
- }
|
|
535
|
+ re_fixorigin(re);
|
521
|
536
|
re->headerdirty=1;
|
522
|
537
|
re->contentsdirty=1;
|
523
|
538
|
} else if(event->key.keysym.sym==SDLK_BACKSPACE && re->cursorpos>0) {
|
...
|
...
|
@@ -733,12 +748,7 @@ fprintf(stderr,"MOVING from cursorpos:%li line:%i col:%i\n",re->cursorpos,re->cu
|
733
|
748
|
}
|
734
|
749
|
re->cursorpos=realstart;
|
735
|
750
|
re->curline+=inc;
|
736
|
|
- if(re->curline<(re->originline+LINEFORCESCROLL)) {
|
737
|
|
- re->originline-=LINEFORCESCROLL;
|
738
|
|
- re->originline=(re->originline<0)?0:re->originline;
|
739
|
|
- }
|
740
|
|
- if(re->curline>(re->originline+re->maxrow-LINEFORCESCROLL))
|
741
|
|
- re->originline+=LINEFORCESCROLL;
|
|
751
|
+ re_fixorigin(re);
|
742
|
752
|
#if 0
|
743
|
753
|
fprintf(stderr,"MOVING to cursorpos:%li line:%i col:%i\n",re->cursorpos,re->curline,re->curcol);
|
744
|
754
|
#endif
|