Browse code

Implement Control+UP/DOWN: scroll the screen instead of moving the cursor position

Dario Rodriguez authored on 07/01/2021 18:23:45
Showing 1 changed files
... ...
@@ -610,10 +610,23 @@ fprintf(stderr,"SDL_KEYDOWN: sym:%i\n",event->key.keysym.sym);
610 610
                 re->headerdirty=1;
611 611
                 re->contentsdirty=1;
612 612
         } else if(event->key.keysym.sym==SDLK_DOWN || event->key.keysym.sym==SDLK_UP) {
613
+                int move_res;
613 614
                 int oldcol=re->curcol,oldline=re->curline;
614
-                if(re_moveupdown(re,(event->key.keysym.sym==SDLK_UP)?-1:1)==0 && (SDL_GetModState()&KMOD_SHIFT)!=0 && (re->curcol!=oldcol || re->curline!=oldline)) {
615
+                if((SDL_GetModState()&KMOD_CTRL)!=0 && event->key.keysym.sym==SDLK_UP && re->originline==0)
616
+                        return(0); /* nothing to do, already at top */
617
+                move_res=re_moveupdown(re,(event->key.keysym.sym==SDLK_UP)?-1:1);
618
+                if(move_res==0 && (SDL_GetModState()&KMOD_SHIFT)!=0 && (re->curcol!=oldcol || re->curline!=oldline)) {
615 619
                         re_sel_resize(re,oldcol,oldline,(event->key.keysym.sym==SDLK_UP)?-1:1);
616 620
                 }
621
+                if(move_res==0 && (SDL_GetModState()&KMOD_CTRL)!=0) {
622
+                        if(event->key.keysym.sym==SDLK_UP && re->originline>0) {
623
+                                re->originline--;
624
+                                re->contentsdirty=1;
625
+                        } else if(event->key.keysym.sym==SDLK_DOWN && re->originline<re->curline) {
626
+                                re->originline++;
627
+                                re->contentsdirty=1;
628
+                        }
629
+                }
617 630
         } else if(event->key.keysym.sym==SDLK_LEFT || event->key.keysym.sym==SDLK_RIGHT) {
618 631
                 int oldcol=re->curcol,oldline=re->curline;
619 632
                 if(re_moveleftright(re,(event->key.keysym.sym==SDLK_LEFT)?-1:1)==0 && (SDL_GetModState()&KMOD_SHIFT)!=0 && (re->curcol!=oldcol || re->curline!=oldline)) {