toolbox pour des tui - retour accueil
git clone git://bebou.netlib.re/tuit
Log | Files | Refs |
commit 57940a242c318d6be4eb31ad2d39747f27a0e4a4 parent 888448eb34d34eba3cbb64562308d22092af4bd5 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 11 Jun 2025 23:17:40 +0200 Déplacement liste avec une recherche en cours Diffstat:
M | choose.c | | | 28 | +++++++++++++++++----------- |
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/choose.c b/choose.c @@ -10,6 +10,7 @@ int min(int a, int b) { return a < b ? a : b; } int main(int argc, char **argv) { int curelem=0; int count=0; int start=0; + int curline=2; char line[ELEM_SIZE]; char search[ELEM_SIZE]; char **list; @@ -27,18 +28,18 @@ int main(int argc, char **argv) { tb_set_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); struct tb_event ev; char buf[7]; buf[0]='\0'; + int ishown[count]; + for (int i=0;i<count;i++) ishown[i]=i; while(1) { tb_clear(); tb_printf(0,0,TB_DEFAULT,TB_DEFAULT,"> %s",buf); int j=1; - for (int i=0;i<min(tb_height(),count);i++) { - if (!strchr(list[i+start],buf[0])) continue; - if (i+start==curelem) - tb_printf(0,j,TB_BLACK,TB_WHITE,"> %s",list[i+start]); + for (int i=0;i<tb_height();i++) { + if (i==curline-2) + tb_printf(0,j++,TB_BLACK,TB_WHITE,"> %s",list[ishown[i+start]]); else - tb_printf(0,j,TB_DEFAULT,TB_DEFAULT," %s",list[i+start]); - j++; + tb_printf(0,j++,TB_DEFAULT,TB_DEFAULT," %s",list[ishown[i+start]]); } tb_present(); tb_poll_event(&ev); @@ -56,14 +57,15 @@ int main(int argc, char **argv) { return 0; /* up */ case 65517: - if(start!=0) start--; - curelem=max(0,curelem-1); + if(curline==2) start=max(0,start-1); + curline=max(2,curline-1); + curelem=ishown[curline+start+-2]; break; /* down */ case 65516: - if(curelem-start+1==tb_height()) - start=min(start+1,count-tb_height()); - curelem=min(count-1,curelem+1); + if(curline==tb_height()) start=start+1; + curline=min(tb_height(),curline+1); + curelem=ishown[curline+start+-2]; break; /* pageup and pagedown */ case 65519: @@ -83,6 +85,10 @@ int main(int argc, char **argv) { break; case 0: buf[tb_utf8_unicode_to_char(buf, ev.ch)] = '\0'; + start=0; int j=0; + for (int i=0;i<count;i++) + if (strchr(list[i],buf[0])) { ishown[j]=i; j++; } + curelem=ishown[0]; default: break; }