...
|
...
|
@@ -332,6 +332,24 @@ fprintf(stderr,"RENDER\n");
|
332
|
332
|
case SDL_KEYDOWN:
|
333
|
333
|
if(event.key.keysym.sym==SDLK_ESCAPE) {
|
334
|
334
|
re_delprint(re,i);
|
|
335
|
+ } if(event.key.keysym.sym==SDLK_DOWN || event.key.keysym.sym==SDLK_UP || event.key.keysym.sym==SDLK_PAGEDOWN || event.key.keysym.sym==SDLK_PAGEUP) {
|
|
336
|
+ int neworiginline;
|
|
337
|
+ int maxrow;
|
|
338
|
+ int linetotal;
|
|
339
|
+ maxrow=printout->ui->h/printout->ui->fontheight-1;
|
|
340
|
+ neworiginline=printout->originline;
|
|
341
|
+ neworiginline+=(event.key.keysym.sym==SDLK_UP)?-1:
|
|
342
|
+ (event.key.keysym.sym==SDLK_DOWN)?1:
|
|
343
|
+ (event.key.keysym.sym==SDLK_PAGEUP)?-maxrow:
|
|
344
|
+ (event.key.keysym.sym==SDLK_PAGEDOWN)?maxrow:
|
|
345
|
+ 0;
|
|
346
|
+ linetotal=redata_line_total((printout->data!=NULL)?printout->data:re->data);
|
|
347
|
+ neworiginline=(neworiginline<0)?0:neworiginline;
|
|
348
|
+ neworiginline=(neworiginline>linetotal)?linetotal:neworiginline;
|
|
349
|
+ if(neworiginline==printout->originline)
|
|
350
|
+ break; /* nothing to do, at top */
|
|
351
|
+ printout->originline=neworiginline;
|
|
352
|
+ printout->dirty=1;
|
335
|
353
|
} else if(event.key.keysym.sym==SDLK_DOWN || event.key.keysym.sym==SDLK_UP) {
|
336
|
354
|
if(event.key.keysym.sym==SDLK_UP && printout->originline==0)
|
337
|
355
|
break; /* nothing to do, at top */
|
...
|
...
|
@@ -372,11 +390,22 @@ fprintf(stderr,"RENDER\n");
|
372
|
390
|
if(re->viewonly && event.type==SDL_KEYDOWN) {
|
373
|
391
|
if(event.key.keysym.sym==SDLK_ESCAPE) {
|
374
|
392
|
do_exit=1;
|
375
|
|
- } if(event.key.keysym.sym==SDLK_DOWN || event.key.keysym.sym==SDLK_UP) {
|
376
|
|
- if(event.key.keysym.sym==SDLK_UP && re->originline==0)
|
|
393
|
+ } if(event.key.keysym.sym==SDLK_DOWN || event.key.keysym.sym==SDLK_UP || event.key.keysym.sym==SDLK_PAGEDOWN || event.key.keysym.sym==SDLK_PAGEUP) {
|
|
394
|
+ int neworiginline;
|
|
395
|
+ int linetotal;
|
|
396
|
+ neworiginline=re->originline;
|
|
397
|
+ neworiginline+=(event.key.keysym.sym==SDLK_UP)?-1:
|
|
398
|
+ (event.key.keysym.sym==SDLK_DOWN)?1:
|
|
399
|
+ (event.key.keysym.sym==SDLK_PAGEUP)?-re->maxrow:
|
|
400
|
+ (event.key.keysym.sym==SDLK_PAGEDOWN)?re->maxrow:
|
|
401
|
+ 0;
|
|
402
|
+ linetotal=redata_line_total(re->data);
|
|
403
|
+ neworiginline=(neworiginline<0)?0:neworiginline;
|
|
404
|
+ neworiginline=(neworiginline>linetotal)?linetotal:neworiginline;
|
|
405
|
+ if(neworiginline==re->originline)
|
377
|
406
|
break; /* nothing to do, at top */
|
378
|
|
- re->originline+=((event.key.keysym.sym==SDLK_UP)?-1:1);
|
379
|
|
- re->curline+=((event.key.keysym.sym==SDLK_UP)?-1:1);
|
|
407
|
+ re->curline+=(neworiginline-re->originline);
|
|
408
|
+ re->originline=neworiginline;
|
380
|
409
|
re->headerdirty=1;
|
381
|
410
|
re->contentsdirty=1;
|
382
|
411
|
} else if(event.key.keysym.sym==SDLK_LEFT || event.key.keysym.sym==SDLK_RIGHT) {
|
...
|
...
|
@@ -1164,7 +1193,7 @@ fprintf(stderr,"SDL_KEYDOWN: BACKSPACE%s\n",(event==&fakeevent)?" (fake)":"");
|
1164
|
1193
|
if(re->usedselectbuf>0)
|
1165
|
1194
|
re_textinsert(re, re->selectbuf,re->usedselectbuf);
|
1166
|
1195
|
re->ignorenkeys++;
|
1167
|
|
- } else if(re->selactive && event->key.keysym.sym==SDLK_p && (SDL_GetModState()&KMOD_CTRL)!=0) {
|
|
1196
|
+ } else if(/*re->selactive &&*/ event->key.keysym.sym==SDLK_p && (SDL_GetModState()&KMOD_CTRL)!=0) {
|
1168
|
1197
|
re_addprint(re);
|
1169
|
1198
|
}
|
1170
|
1199
|
return(0);
|
...
|
...
|
@@ -1900,7 +1929,7 @@ re_addprint(re_t *re)
|
1900
|
1929
|
int i;
|
1901
|
1930
|
long frompos,topos;
|
1902
|
1931
|
int coldone;
|
1903
|
|
- if(re==NULL || re->selactive==0)
|
|
1932
|
+ if(re==NULL)
|
1904
|
1933
|
return(-1);
|
1905
|
1934
|
/* ensure space for the new printout */
|
1906
|
1935
|
if(re->usedprints==re->sizeprints) {
|
...
|
...
|
@@ -1928,20 +1957,27 @@ re_addprint(re_t *re)
|
1928
|
1957
|
}
|
1929
|
1958
|
re->usedprints++;
|
1930
|
1959
|
/* copy contents (and set clipboard contents and unselect)*/
|
1931
|
|
- if(redata_linecol2pos(re->data,re->sellinefrom,re->selcolfrom,&frompos,NULL)==0
|
1932
|
|
- && redata_linecol2pos(re->data,re->sellineto,re->selcolto,&topos,&coldone)==0) {
|
1933
|
|
- re_selectbuf_fill(re,frompos,topos-frompos,re->selcolto-coldone);
|
|
1960
|
+ if(re->selactive) {
|
|
1961
|
+ if(redata_linecol2pos(re->data,re->sellinefrom,re->selcolfrom,&frompos,NULL)==0
|
|
1962
|
+ && redata_linecol2pos(re->data,re->sellineto,re->selcolto,&topos,&coldone)==0) {
|
|
1963
|
+ re_selectbuf_fill(re,frompos,topos-frompos,re->selcolto-coldone);
|
|
1964
|
+ redata_op_add(re->prints[i].data,0,re->selectbuf,strlen(re->selectbuf),NULL);
|
|
1965
|
+ SDL_SetClipboardText(re->selectbuf);
|
|
1966
|
+ re_sel_toggle(re);
|
|
1967
|
+ re->contentsdirty=1;
|
|
1968
|
+ }
|
|
1969
|
+ } else {
|
|
1970
|
+ re_selectbuf_fill(re,0,redata_getused(re->data),0);
|
1934
|
1971
|
redata_op_add(re->prints[i].data,0,re->selectbuf,strlen(re->selectbuf),NULL);
|
1935
|
1972
|
SDL_SetClipboardText(re->selectbuf);
|
1936
|
|
- re_sel_toggle(re);
|
1937
|
1973
|
re->contentsdirty=1;
|
1938
|
1974
|
}
|
1939
|
1975
|
#else
|
1940
|
1976
|
/* option B: printouts are a window into a fixed place of the file */
|
1941
|
1977
|
re->prints[i].data=NULL;
|
1942
|
|
- re->prints[i].originline=re->sellinefrom;
|
|
1978
|
+ re->prints[i].originline=(re->selactive)?re->sellinefrom:0;
|
1943
|
1979
|
re->prints[i].origincol=0;
|
1944
|
|
- re->prints[i].showonlyn=re->sellineto-re->sellinefrom+1;
|
|
1980
|
+ re->prints[i].showonlyn=0 /* (re->selactive)?re->sellineto-re->sellinefrom+1:0 */ ;
|
1945
|
1981
|
re->usedprints++;
|
1946
|
1982
|
#endif
|
1947
|
1983
|
re->prints[i].dirty=1;
|
...
|
...
|
@@ -2169,6 +2205,9 @@ re_drawcontents(re_t *re, printout_t *printout)
|
2169
|
2205
|
char matchingchar;
|
2170
|
2206
|
int mline,mcol;
|
2171
|
2207
|
int showonlyn;
|
|
2208
|
+ int flaglineno;
|
|
2209
|
+ int linenowidth;
|
|
2210
|
+ int linenosize;
|
2172
|
2211
|
if(re==NULL || (printout!=NULL && printout->ui==NULL))
|
2173
|
2212
|
return(-1);
|
2174
|
2213
|
/* init vars and clear screen */
|
...
|
...
|
@@ -2185,6 +2224,8 @@ re_drawcontents(re_t *re, printout_t *printout)
|
2185
|
2224
|
maxcol=re->maxcol;
|
2186
|
2225
|
maxrow=re->maxrow;
|
2187
|
2226
|
showonlyn=0;
|
|
2227
|
+ flaglineno=0;
|
|
2228
|
+ linenosize=linenowidth=0;
|
2188
|
2229
|
if(printout==NULL && re->viewonly==1) {
|
2189
|
2230
|
memset(&fakeprintout,0,sizeof(printout_t));
|
2190
|
2231
|
fakeprintout.ui=re->ui;
|
...
|
...
|
@@ -2204,10 +2245,14 @@ re_drawcontents(re_t *re, printout_t *printout)
|
2204
|
2245
|
maxcol=w/ui->fontwidth-1;
|
2205
|
2246
|
maxrow=h/ui->fontheight-1;
|
2206
|
2247
|
showonlyn=printout->showonlyn;
|
|
2248
|
+ flaglineno=1;
|
|
2249
|
+ linenosize=6;
|
|
2250
|
+ linenowidth=linenosize*ui->fontwidth+ui->fontwidth*3/2;
|
|
2251
|
+ x0+=linenowidth;
|
2207
|
2252
|
}
|
2208
|
2253
|
if(redata_linecol2pos(data,curline,curcol,&cursorpos,NULL)!=0)
|
2209
|
2254
|
return(0); /* error obtaining position */
|
2210
|
|
- reui_fill(ui,x0,y0,w,h,"\xdf\xdf\xdf\xff");
|
|
2255
|
+ reui_fill(ui,x0-linenowidth,y0,w,h,"\xdf\xdf\xdf\xff");
|
2211
|
2256
|
row=curline-originline;
|
2212
|
2257
|
pos=cursorpos;
|
2213
|
2258
|
/* get position/row/col of character at top left of screen */
|
...
|
...
|
@@ -2220,10 +2265,10 @@ re_drawcontents(re_t *re, printout_t *printout)
|
2220
|
2265
|
}
|
2221
|
2266
|
/* highlight current line (in printouts, highlight alternating lines) */
|
2222
|
2267
|
if(printout==NULL) {
|
2223
|
|
- reui_fill(ui,x0,y0+(curline-originline)*ui->fontheight,w,ui->fontheight+1,"\xef\xef\xef\xff");
|
|
2268
|
+ reui_fill(ui,x0-linenowidth,y0+(curline-originline)*ui->fontheight,w,ui->fontheight+1,"\xef\xef\xef\xff");
|
2224
|
2269
|
} else {
|
2225
|
2270
|
for(y=y0+((printout->data==NULL)?1:(printout->originline%2))*ui->fontheight;y<(y0+h);y+=ui->fontheight*2)
|
2226
|
|
- reui_fill(ui,x0,y,w,ui->fontheight+1,"\xef\xef\xef\xff");
|
|
2271
|
+ reui_fill(ui,x0-linenowidth,y,w,ui->fontheight+1,"\xef\xef\xef\xff");
|
2227
|
2272
|
}
|
2228
|
2273
|
/* highlight the selection */
|
2229
|
2274
|
if(printout==NULL && re->selactive) {
|
...
|
...
|
@@ -2280,6 +2325,14 @@ re_drawcontents(re_t *re, printout_t *printout)
|
2280
|
2325
|
usedlenlinecolor=0;
|
2281
|
2326
|
lastcolor="\x00\x00\x00\xff";
|
2282
|
2327
|
in_error=0;
|
|
2328
|
+ if(flaglineno) {
|
|
2329
|
+ int i,n;
|
|
2330
|
+ char buf[2]={0};
|
|
2331
|
+ for(i=linenosize,n=originline+row+1;i>=0;i--,n/=10) {
|
|
2332
|
+ buf[0]=(n>0 || i==linenosize)?(n%10)+'0':' ';
|
|
2333
|
+ reui_write(ui,x0-linenowidth+(i-1)*ui->fontwidth,y,"\x00\x00\x00\x2f",buf,1);
|
|
2334
|
+ }
|
|
2335
|
+ }
|
2283
|
2336
|
/* draw each part of this line */
|
2284
|
2337
|
for(tmpcol=0,pos=realstart,availcol=0;tmpcol<(origincol+maxcol) && pos<=realend;pos=newpos+len,tmpcol+=availcol) {
|
2285
|
2338
|
int has_nl;
|