| 753 | } |
| 754 | |
| 755 | static bool C_HandleKey (event_t *ev, FCommandBuffer &buffer) |
| 756 | { |
| 757 | int data1 = ev->data1; |
| 758 | bool keepappending = false; |
| 759 | |
| 760 | switch (ev->subtype) |
| 761 | { |
| 762 | default: |
| 763 | return false; |
| 764 | |
| 765 | case EV_GUI_Char: |
| 766 | if (ev->data2) |
| 767 | { |
| 768 | // Bash-style shortcuts |
| 769 | if (data1 == 'b') |
| 770 | { |
| 771 | buffer.CursorWordLeft(); |
| 772 | break; |
| 773 | } |
| 774 | else if (data1 == 'f') |
| 775 | { |
| 776 | buffer.CursorWordRight(); |
| 777 | break; |
| 778 | } |
| 779 | } |
| 780 | // Add keypress to command line |
| 781 | buffer.AddChar(data1); |
| 782 | HistPos = NULL; |
| 783 | TabbedLast = false; |
| 784 | TabbedList = false; |
| 785 | break; |
| 786 | |
| 787 | case EV_GUI_WheelUp: |
| 788 | case EV_GUI_WheelDown: |
| 789 | if (!(ev->data3 & GKM_SHIFT)) |
| 790 | { |
| 791 | data1 = GK_PGDN + EV_GUI_WheelDown - ev->subtype; |
| 792 | } |
| 793 | else |
| 794 | { |
| 795 | data1 = GK_DOWN + EV_GUI_WheelDown - ev->subtype; |
| 796 | } |
| 797 | // Intentional fallthrough |
| 798 | |
| 799 | case EV_GUI_KeyDown: |
| 800 | case EV_GUI_KeyRepeat: |
| 801 | switch (data1) |
| 802 | { |
| 803 | case '\t': |
| 804 | // Try to do tab-completion |
| 805 | C_TabComplete ((ev->data3 & GKM_SHIFT) ? false : true); |
| 806 | break; |
| 807 | |
| 808 | case GK_PGUP: |
| 809 | if (ev->data3 & (GKM_SHIFT|GKM_CTRL)) |
| 810 | { // Scroll console buffer up one page |
| 811 | RowAdjust += (twod->GetHeight()-4)/active_con_scale(twod) / |
| 812 | ((gamestate == GS_FULLCONSOLE || gamestate == GS_STARTUP) ? CurrentConsoleFont->GetHeight() : CurrentConsoleFont->GetHeight()*2) - 3; |
no test coverage detected