...
|
...
|
@@ -51,6 +51,8 @@
|
51
|
51
|
|
52
|
52
|
#define COLOR_QUERYBG "\xad\x92\x5e\xff"
|
53
|
53
|
#define COLOR_QUERYFG "\xd0\xef\x4f\xff"
|
|
54
|
+#define COLOR_QUERYBGOLD "\x83\x75\x59\xff"
|
|
55
|
+#define COLOR_QUERYFGOLD "\xb1\xc5\x5e\xff"
|
54
|
56
|
|
55
|
57
|
#define COLOR_WARNINGBG "\xba\x07\x07\xff"
|
56
|
58
|
#define COLOR_WARNINGFG "\xe6\xdc\x5d\xff"
|
...
|
...
|
@@ -84,11 +86,14 @@ typedef struct re_t {
|
84
|
86
|
int selactive;
|
85
|
87
|
int sellinefrom,sellineto;
|
86
|
88
|
int selcolfrom,selcolto;
|
|
89
|
+ int mouseselactive;
|
|
90
|
+ int sellinestart,selcolstart;
|
87
|
91
|
long sizeselectbuf;
|
88
|
92
|
long usedselectbuf;
|
89
|
93
|
char *selectbuf;
|
90
|
94
|
char *command;
|
91
|
95
|
char commandbuf[COMMANDBUFSIZE];
|
|
96
|
+ int is_oldcommandbuf;
|
92
|
97
|
char cachelastsearch[COMMANDBUFSIZE];
|
93
|
98
|
char cachelastreplacewith[COMMANDBUFSIZE];
|
94
|
99
|
question_t *question;
|
...
|
...
|
@@ -135,6 +140,7 @@ int re_sel_lincolisend(re_t *re, int line, int col);
|
135
|
140
|
int re_selectbuf_resize(re_t *re,long size);
|
136
|
141
|
int re_selectbuf_fill(re_t *re,long frompos,long size, int nadditionalspaces);
|
137
|
142
|
int re_selectbuf_replace(re_t *re,char *newdata);
|
|
143
|
+int re_clipget(re_t *re);
|
138
|
144
|
int re_addprint(re_t *re);
|
139
|
145
|
int re_delprint(re_t *re, int nprint);
|
140
|
146
|
int re_rtrim(re_t *re, long curpos, int *trimmed);
|
...
|
...
|
@@ -406,16 +412,29 @@ fprintf(stderr,"Resizing from %ix%i to %ix%i...\n",re->ui->w,re->ui->h,(int)even
|
406
|
412
|
}
|
407
|
413
|
break;
|
408
|
414
|
case SDL_MOUSEBUTTONDOWN:
|
409
|
|
- if(event.button.y>=re->y && event.button.x>=re->x) {
|
410
|
|
- int newposx,newposy;
|
411
|
|
- long tmppos;
|
412
|
|
- newposx=(event.button.x-re->x)/re->ui->fontwidth;
|
413
|
|
- newposy=(event.button.y-re->y)/re->ui->fontheight;
|
414
|
|
- if(redata_linecol2pos(re->data, re->originline+newposy, re->origincol+newposx,&tmppos,NULL)==0) {
|
415
|
|
- re->curline=re->originline+newposy;
|
416
|
|
- re->curcol=re->origincol+newposx;
|
417
|
|
- re->headerdirty=1;
|
418
|
|
- re->contentsdirty=1;
|
|
415
|
+ case SDL_MOUSEBUTTONUP:
|
|
416
|
+ case SDL_MOUSEMOTION:
|
|
417
|
+ {
|
|
418
|
+#warning TODO
|
|
419
|
+ int mx,my;
|
|
420
|
+ mx=(event.type!=SDL_MOUSEMOTION)?event.button.x:event.motion.x;
|
|
421
|
+ my=(event.type!=SDL_MOUSEMOTION)?event.button.y:event.motion.y;
|
|
422
|
+ if(!(event.type==SDL_MOUSEMOTION && (re->mouseselactive==0 || my<re->y || mx<re->x))) {
|
|
423
|
+ int newposx,newposy;
|
|
424
|
+ long tmppos;
|
|
425
|
+ if(event.type==SDL_MOUSEBUTTONDOWN && event.button.button==SDL_BUTTON_LEFT) {
|
|
426
|
+ re->mouseselactive=1;
|
|
427
|
+ } else if( event.type==SDL_MOUSEBUTTONUP && event.button.button==SDL_BUTTON_LEFT) {
|
|
428
|
+ re->mouseselactive=0;
|
|
429
|
+ }
|
|
430
|
+ newposx=(mx-re->x)/re->ui->fontwidth;
|
|
431
|
+ newposy=(my-re->y)/re->ui->fontheight;
|
|
432
|
+ if(redata_linecol2pos(re->data, re->originline+newposy, re->origincol+newposx,&tmppos,NULL)==0) {
|
|
433
|
+ re->curline=re->originline+newposy;
|
|
434
|
+ re->curcol=re->origincol+newposx;
|
|
435
|
+ re->headerdirty=1;
|
|
436
|
+ re->contentsdirty=1;
|
|
437
|
+ }
|
419
|
438
|
}
|
420
|
439
|
}
|
421
|
440
|
break;
|
...
|
...
|
@@ -1029,16 +1048,19 @@ re_processkey_commandwait(re_t *re, SDL_Event *event)
|
1029
|
1048
|
if(re->command_first_key=='q' && event->key.keysym.sym==SDLK_l) {
|
1030
|
1049
|
re->command=COMMAND_GOTOLINE;
|
1031
|
1050
|
re->commandbuf[0]='\0';
|
|
1051
|
+ re->is_oldcommandbuf=0;
|
1032
|
1052
|
re->headerdirty=1;
|
1033
|
1053
|
} else if(re->command_first_key=='q' && event->key.keysym.sym==SDLK_f) {
|
1034
|
1054
|
re->command=COMMAND_SEARCHFORWARD;
|
1035
|
1055
|
strncpy(re->commandbuf,re->cachelastsearch,sizeof(re->commandbuf));
|
1036
|
1056
|
re->commandbuf[sizeof(re->commandbuf)-1]='\0';
|
|
1057
|
+ re->is_oldcommandbuf=1;
|
1037
|
1058
|
re->headerdirty=1;
|
1038
|
1059
|
} else if(re->command_first_key=='q' && event->key.keysym.sym==SDLK_a) {
|
1039
|
1060
|
re->command=COMMAND_REPLACEWHAT;
|
1040
|
1061
|
strncpy(re->commandbuf,re->cachelastsearch,sizeof(re->commandbuf));
|
1041
|
1062
|
re->commandbuf[sizeof(re->commandbuf)-1]='\0';
|
|
1063
|
+ re->is_oldcommandbuf=1;
|
1042
|
1064
|
re->headerdirty=1;
|
1043
|
1065
|
} else if(re->command_first_key=='k' && event->key.keysym.sym==SDLK_q) {
|
1044
|
1066
|
if(redata_needs_saving(re->data)) {
|
...
|
...
|
@@ -1048,6 +1070,7 @@ re_processkey_commandwait(re_t *re, SDL_Event *event)
|
1048
|
1070
|
re->command=COMMAND_EXIT;
|
1049
|
1071
|
re->commandbuf[0]='\0';
|
1050
|
1072
|
}
|
|
1073
|
+ re->is_oldcommandbuf=0;
|
1051
|
1074
|
re->headerdirty=1;
|
1052
|
1075
|
} else if(re->command_first_key=='k' && event->key.keysym.sym==SDLK_h) {
|
1053
|
1076
|
re_sel_toggle(re);
|
...
|
...
|
@@ -1154,6 +1177,10 @@ re_processkey_commanddata(re_t *re, SDL_Event *event)
|
1154
|
1177
|
re->ignorenkeys--;
|
1155
|
1178
|
return(0); /* this is an already processed key, ignore it */
|
1156
|
1179
|
}
|
|
1180
|
+ if(re->is_oldcommandbuf) {
|
|
1181
|
+ re->commandbuf[0]='\0';
|
|
1182
|
+ re->is_oldcommandbuf=0;
|
|
1183
|
+ }
|
1157
|
1184
|
len=strlen(event->text.text);
|
1158
|
1185
|
if((strlen(re->commandbuf)+len+1)>=sizeof(re->commandbuf))
|
1159
|
1186
|
return(-1); /* No space for text */
|
...
|
...
|
@@ -1172,12 +1199,24 @@ re_processkey_commanddata(re_t *re, SDL_Event *event)
|
1172
|
1199
|
} else if(event->key.keysym.sym==SDLK_BACKSPACE && re->commandbuf[0]!='\0') {
|
1173
|
1200
|
int nchar;
|
1174
|
1201
|
char *ptr;
|
|
1202
|
+ if(re->is_oldcommandbuf) {
|
|
1203
|
+ re->commandbuf[0]='\0';
|
|
1204
|
+ re->is_oldcommandbuf=0;
|
|
1205
|
+ re->headerdirty=1;
|
|
1206
|
+ return(0);
|
|
1207
|
+ }
|
1175
|
1208
|
if((nchar=redata_generic_utf8len(re->commandbuf,strlen(re->commandbuf)))<=0)
|
1176
|
1209
|
return(-1); /* error parsing commandbuf */
|
1177
|
1210
|
if((ptr=redata_generic_utf8col(re->commandbuf,strlen(re->commandbuf),nchar-1))==NULL)
|
1178
|
1211
|
return(-1); /* error positioning in commandbuf */
|
1179
|
1212
|
*ptr='\0';
|
1180
|
1213
|
re->headerdirty=1;
|
|
1214
|
+ } else if(event->key.keysym.sym==SDLK_RIGHT || event->key.keysym.sym==SDLK_END) {
|
|
1215
|
+ if(re->is_oldcommandbuf) {
|
|
1216
|
+ re->is_oldcommandbuf=0;
|
|
1217
|
+ re->headerdirty=1;
|
|
1218
|
+ return(0);
|
|
1219
|
+ }
|
1181
|
1220
|
} else if(event->key.keysym.sym==SDLK_RETURN) {
|
1182
|
1221
|
re_processcommand(re);
|
1183
|
1222
|
}
|
...
|
...
|
@@ -1691,6 +1730,14 @@ re_selectbuf_replace(re_t *re,char *newdata)
|
1691
|
1730
|
return(0);
|
1692
|
1731
|
}
|
1693
|
1732
|
|
|
1733
|
+int
|
|
1734
|
+re_clipget(re_t *re)
|
|
1735
|
+{
|
|
1736
|
+#warning TODO
|
|
1737
|
+ return(-1);
|
|
1738
|
+}
|
|
1739
|
+
|
|
1740
|
+
|
1694
|
1741
|
int
|
1695
|
1742
|
re_addprint(re_t *re)
|
1696
|
1743
|
{
|
...
|
...
|
@@ -1908,9 +1955,19 @@ re_drawheader_command(re_t *re)
|
1908
|
1955
|
,(q->nopts>3)?" 4.":"",(q->nopts>4)?(q->optsshort!=NULL)?q->optsshort[3]:q->opts[3]:""
|
1909
|
1956
|
,re->commandbuf);
|
1910
|
1957
|
} else {
|
|
1958
|
+ int commandlen;
|
|
1959
|
+ int commandbuflen;
|
1911
|
1960
|
reui_fill(re->ui,0,0,re->ui->w,re->ui->fontheight,COLOR_QUERYBG);
|
1912
|
1961
|
re->commandbuf[sizeof(re->commandbuf)-1]='\0';
|
1913
|
|
- reui_printf(re->ui,0,0,COLOR_QUERYFG,"%s %s",re->command,re->commandbuf);
|
|
1962
|
+ commandlen=redata_generic_utf8len(re->command,strlen(re->command));
|
|
1963
|
+ reui_printf(re->ui,0,0,COLOR_QUERYFG,"%s",re->command);
|
|
1964
|
+ if(!(re->is_oldcommandbuf) || re->commandbuf[0]=='\0') {
|
|
1965
|
+ reui_printf(re->ui,re->ui->fontwidth*(commandlen+1),0,COLOR_QUERYFG,"%s",re->commandbuf);
|
|
1966
|
+ } else {
|
|
1967
|
+ commandbuflen=redata_generic_utf8len(re->commandbuf,strlen(re->commandbuf));
|
|
1968
|
+ reui_fill(re->ui,re->ui->fontwidth*(commandlen+1)-re->ui->fontwidth/2,0,re->ui->fontwidth*(commandbuflen+1)+1,re->ui->fontheight,COLOR_QUERYBGOLD);
|
|
1969
|
+ reui_printf(re->ui,re->ui->fontwidth*(commandlen+1),0,COLOR_QUERYFGOLD,"%s",re->commandbuf);
|
|
1970
|
+ }
|
1914
|
1971
|
}
|
1915
|
1972
|
re->headerdirty=0;
|
1916
|
1973
|
re->ui->rendererdirty=1;
|