diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c index a67fbdede6bcd77f0c9d603a301cad6e59b77060..f7be015bbf9aa40d2fc85bede36c473c4feaa7b4 100644 --- a/src/syncterm/menu.c +++ b/src/syncterm/menu.c @@ -2,30 +2,35 @@ #include <ciolib.h> #include <keys.h> +#include "cterm.h" #include "term.h" #include "uifcinit.h" void viewscroll(void) { -#if 0 int top; int key; int i; - char *buf; + char *scrollback; struct text_info txtinfo; + int x,y; + x=wherex(); + y=wherey(); uifcbail(); gettextinfo(&txtinfo); - buf=(char *)malloc(txtinfo.screenheight*txtinfo.screenwidth*2); - gettext(1,1,txtinfo.screenwidth,txtinfo.screenheight,buf); + scrollback=(char *)malloc((term.width*2*backlines)+(txtinfo.screenheight*txtinfo.screenwidth*2)); + memcpy(scrollback,cterm.scrollback,term.width*2*backlines); + gettext(1,1,txtinfo.screenwidth,txtinfo.screenheight,scrollback+(cterm.backpos)*cterm.width*2); drawwin(); - top=term.backpos-term.height; + top=cterm.backpos; + gotoxy(1,1); for(i=0;!i;) { if(top<1) top=1; - if(top>term.backpos-term.height) - top=term.backpos-term.height; - puttext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,term.scrollback+(term.width*2*top)); + if(top>cterm.backpos) + top=cterm.backpos; + puttext(term.x-1,term.y-1,term.x+term.width-2,term.y+term.height-2,scrollback+(term.width*2*top)); key=getch(); switch(key) { case 0: @@ -57,21 +62,29 @@ void viewscroll(void) break; case 'j': case 'J': + top--; + break; case 'k': case 'K': + top++; + break; case 'h': case 'H': + top-=term.height; + break; case 'l': case 'L': + top+=term.height; + break; case ESC: i=1; break; } } - puttext(1,1,txtinfo.screenwidth,txtinfo.screenheight,buf); - free(buf); + puttext(1,1,txtinfo.screenwidth,txtinfo.screenheight,scrollback+(cterm.backpos)*cterm.width*2); + free(scrollback); + gotoxy(x,y); return; -#endif } int syncmenu(void) diff --git a/src/syncterm/term.c b/src/syncterm/term.c index 832ad227ce8484384008a6eb9b3dd142b64f7c54..0d166200b3b0a0bffe54e174feb65ca717c3987a 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -54,7 +54,8 @@ void doterm(void) switch(key) { case 0xff: case 0: - switch(key|(getch()<<8)) { + key|=getch()<<8; + switch(key) { case CIO_KEY_MOUSE: getmouse(&mevent); break; @@ -92,12 +93,9 @@ void doterm(void) case CIO_KEY_F(4): rlogin_send("\033Ox",3,100); break; -#ifdef __unix__ - case 128|'S': /* Under curses, ALT sets the high bit of the char */ - case 128|'s': /* Under curses, ALT sets the high bit of the char */ + case 0x1f00: /* ALT-S */ viewscroll(); break; -#endif } break; case 17: /* CTRL-Q */ diff --git a/src/syncterm/term.h b/src/syncterm/term.h index b8d5e9eeff7640a300f41531aea5fe75750888ba..ce607467c5b3767d37e9a7abd5283bfbedca8b06 100644 --- a/src/syncterm/term.h +++ b/src/syncterm/term.h @@ -9,6 +9,7 @@ struct terminal { }; extern struct terminal term; +extern int backlines; void doterm(void);