| 483 | } |
| 484 | |
| 485 | void consolekey(int code, bool isdown, SDL_Keymod mod) |
| 486 | { |
| 487 | static char *beforecomplete = NULL; |
| 488 | static bool ignoreescup = false; |
| 489 | if(isdown) |
| 490 | { |
| 491 | switch(code) |
| 492 | { |
| 493 | case SDLK_F1: |
| 494 | toggledoc(); |
| 495 | break; |
| 496 | |
| 497 | case SDLK_F2: |
| 498 | scrolldoc(-4); |
| 499 | break; |
| 500 | |
| 501 | case SDLK_F3: |
| 502 | scrolldoc(4); |
| 503 | break; |
| 504 | |
| 505 | case SDL_AC_BUTTON_WHEELUP: |
| 506 | case SDLK_UP: |
| 507 | if(histpos > history.length()) histpos = history.length(); |
| 508 | if(histpos > 0) history[--histpos]->restore(); |
| 509 | break; |
| 510 | |
| 511 | case SDL_AC_BUTTON_WHEELDOWN: |
| 512 | case SDLK_DOWN: |
| 513 | if(histpos + 1 < history.length()) history[++histpos]->restore(); |
| 514 | break; |
| 515 | |
| 516 | case SDLK_TAB: |
| 517 | if(!cmdaction) |
| 518 | { |
| 519 | if(!beforecomplete) beforecomplete = newstring(cmdline.buf); |
| 520 | complete(cmdline.buf, (mod & KMOD_LSHIFT) ? true : false); |
| 521 | if(cmdline.pos >= 0 && cmdline.pos >= (int)strlen(cmdline.buf)) cmdline.pos = -1; |
| 522 | } |
| 523 | break; |
| 524 | |
| 525 | case SDLK_ESCAPE: |
| 526 | if(mod & KMOD_LSHIFT) // LSHIFT+ESC restores buffer from before complete() |
| 527 | { |
| 528 | if(beforecomplete) copystring(cmdline.buf, beforecomplete); |
| 529 | ignoreescup = true; |
| 530 | } |
| 531 | else ignoreescup = false; |
| 532 | break; |
| 533 | |
| 534 | default: |
| 535 | resetcomplete(); |
| 536 | DELETEA(beforecomplete); |
| 537 | |
| 538 | case SDLK_LSHIFT: |
| 539 | cmdline.key(code); |
| 540 | break; |
| 541 | } |
| 542 | } |
no test coverage detected