X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=keys.c;h=eb57276cfb31ce49f0bde004d31d1ba12a929a25;hb=f21de6cab13211791317a66e446b0b2c0810892d;hp=bfe77d26a0ced1309d2a7e7e1bfa975a3b9a9a2b;hpb=13a8959e4bc295066dfc2215741f78258382508e;p=xonotic%2Fdarkplaces.git diff --git a/keys.c b/keys.c index bfe77d26..eb57276c 100644 --- a/keys.c +++ b/keys.c @@ -22,6 +22,7 @@ #include "quakedef.h" #include "cl_video.h" +#include "utf8lib.h" cvar_t con_closeontoggleconsole = {CVAR_SAVE, "con_closeontoggleconsole","1", "allows toggleconsole binds to close the console as well"}; @@ -38,10 +39,11 @@ char *keybindings[MAX_BINDMAPS][MAX_KEYS]; int history_line; char history_savedline[MAX_INPUTLINE]; conbuffer_t history; -#define HIST_TEXTSIZE 262144 -#define HIST_MAXLINES 4096 -static void Key_History_Init() +extern cvar_t con_textsize; + + +static void Key_History_Init(void) { qfile_t *historyfile; ConBuffer_Init(&history, HIST_TEXTSIZE, HIST_MAXLINES, zonemempool); @@ -81,7 +83,7 @@ static void Key_History_Init() history_line = -1; } -static void Key_History_Shutdown() +static void Key_History_Shutdown(void) { // TODO write history to a file @@ -97,7 +99,7 @@ static void Key_History_Shutdown() ConBuffer_Shutdown(&history); } -static void Key_History_Push() +static void Key_History_Push(void) { if(key_line[1]) // empty? if(strcmp(key_line, "]quit")) // putting these into the history just sucks @@ -107,7 +109,7 @@ static void Key_History_Push() history_line = -1; } -static void Key_History_Up() +static void Key_History_Up(void) { if(history_line == -1) // editing the "new" line strlcpy(history_savedline, key_line + 1, sizeof(history_savedline)); @@ -129,7 +131,7 @@ static void Key_History_Up() } } -static void Key_History_Down() +static void Key_History_Down(void) { if(history_line == -1) // editing the "new" line return; @@ -231,6 +233,8 @@ static const keyname_t keynames[] = { {"KP_ENTER", K_KP_ENTER}, {"KP_EQUALS", K_KP_EQUALS}, + {"PRINTSCREEN", K_PRINTSCREEN}, + {"MOUSE1", K_MOUSE1}, @@ -318,6 +322,135 @@ static const keyname_t keynames[] = { {"APOSTROPHE", '\''}, {"BACKSLASH", '\\'}, // because a raw backslash is used for special characters + {"MIDINOTE0", K_MIDINOTE0}, + {"MIDINOTE1", K_MIDINOTE1}, + {"MIDINOTE2", K_MIDINOTE2}, + {"MIDINOTE3", K_MIDINOTE3}, + {"MIDINOTE4", K_MIDINOTE4}, + {"MIDINOTE5", K_MIDINOTE5}, + {"MIDINOTE6", K_MIDINOTE6}, + {"MIDINOTE7", K_MIDINOTE7}, + {"MIDINOTE8", K_MIDINOTE8}, + {"MIDINOTE9", K_MIDINOTE9}, + {"MIDINOTE10", K_MIDINOTE10}, + {"MIDINOTE11", K_MIDINOTE11}, + {"MIDINOTE12", K_MIDINOTE12}, + {"MIDINOTE13", K_MIDINOTE13}, + {"MIDINOTE14", K_MIDINOTE14}, + {"MIDINOTE15", K_MIDINOTE15}, + {"MIDINOTE16", K_MIDINOTE16}, + {"MIDINOTE17", K_MIDINOTE17}, + {"MIDINOTE18", K_MIDINOTE18}, + {"MIDINOTE19", K_MIDINOTE19}, + {"MIDINOTE20", K_MIDINOTE20}, + {"MIDINOTE21", K_MIDINOTE21}, + {"MIDINOTE22", K_MIDINOTE22}, + {"MIDINOTE23", K_MIDINOTE23}, + {"MIDINOTE24", K_MIDINOTE24}, + {"MIDINOTE25", K_MIDINOTE25}, + {"MIDINOTE26", K_MIDINOTE26}, + {"MIDINOTE27", K_MIDINOTE27}, + {"MIDINOTE28", K_MIDINOTE28}, + {"MIDINOTE29", K_MIDINOTE29}, + {"MIDINOTE30", K_MIDINOTE30}, + {"MIDINOTE31", K_MIDINOTE31}, + {"MIDINOTE32", K_MIDINOTE32}, + {"MIDINOTE33", K_MIDINOTE33}, + {"MIDINOTE34", K_MIDINOTE34}, + {"MIDINOTE35", K_MIDINOTE35}, + {"MIDINOTE36", K_MIDINOTE36}, + {"MIDINOTE37", K_MIDINOTE37}, + {"MIDINOTE38", K_MIDINOTE38}, + {"MIDINOTE39", K_MIDINOTE39}, + {"MIDINOTE40", K_MIDINOTE40}, + {"MIDINOTE41", K_MIDINOTE41}, + {"MIDINOTE42", K_MIDINOTE42}, + {"MIDINOTE43", K_MIDINOTE43}, + {"MIDINOTE44", K_MIDINOTE44}, + {"MIDINOTE45", K_MIDINOTE45}, + {"MIDINOTE46", K_MIDINOTE46}, + {"MIDINOTE47", K_MIDINOTE47}, + {"MIDINOTE48", K_MIDINOTE48}, + {"MIDINOTE49", K_MIDINOTE49}, + {"MIDINOTE50", K_MIDINOTE50}, + {"MIDINOTE51", K_MIDINOTE51}, + {"MIDINOTE52", K_MIDINOTE52}, + {"MIDINOTE53", K_MIDINOTE53}, + {"MIDINOTE54", K_MIDINOTE54}, + {"MIDINOTE55", K_MIDINOTE55}, + {"MIDINOTE56", K_MIDINOTE56}, + {"MIDINOTE57", K_MIDINOTE57}, + {"MIDINOTE58", K_MIDINOTE58}, + {"MIDINOTE59", K_MIDINOTE59}, + {"MIDINOTE60", K_MIDINOTE60}, + {"MIDINOTE61", K_MIDINOTE61}, + {"MIDINOTE62", K_MIDINOTE62}, + {"MIDINOTE63", K_MIDINOTE63}, + {"MIDINOTE64", K_MIDINOTE64}, + {"MIDINOTE65", K_MIDINOTE65}, + {"MIDINOTE66", K_MIDINOTE66}, + {"MIDINOTE67", K_MIDINOTE67}, + {"MIDINOTE68", K_MIDINOTE68}, + {"MIDINOTE69", K_MIDINOTE69}, + {"MIDINOTE70", K_MIDINOTE70}, + {"MIDINOTE71", K_MIDINOTE71}, + {"MIDINOTE72", K_MIDINOTE72}, + {"MIDINOTE73", K_MIDINOTE73}, + {"MIDINOTE74", K_MIDINOTE74}, + {"MIDINOTE75", K_MIDINOTE75}, + {"MIDINOTE76", K_MIDINOTE76}, + {"MIDINOTE77", K_MIDINOTE77}, + {"MIDINOTE78", K_MIDINOTE78}, + {"MIDINOTE79", K_MIDINOTE79}, + {"MIDINOTE80", K_MIDINOTE80}, + {"MIDINOTE81", K_MIDINOTE81}, + {"MIDINOTE82", K_MIDINOTE82}, + {"MIDINOTE83", K_MIDINOTE83}, + {"MIDINOTE84", K_MIDINOTE84}, + {"MIDINOTE85", K_MIDINOTE85}, + {"MIDINOTE86", K_MIDINOTE86}, + {"MIDINOTE87", K_MIDINOTE87}, + {"MIDINOTE88", K_MIDINOTE88}, + {"MIDINOTE89", K_MIDINOTE89}, + {"MIDINOTE90", K_MIDINOTE90}, + {"MIDINOTE91", K_MIDINOTE91}, + {"MIDINOTE92", K_MIDINOTE92}, + {"MIDINOTE93", K_MIDINOTE93}, + {"MIDINOTE94", K_MIDINOTE94}, + {"MIDINOTE95", K_MIDINOTE95}, + {"MIDINOTE96", K_MIDINOTE96}, + {"MIDINOTE97", K_MIDINOTE97}, + {"MIDINOTE98", K_MIDINOTE98}, + {"MIDINOTE99", K_MIDINOTE99}, + {"MIDINOTE100", K_MIDINOTE100}, + {"MIDINOTE101", K_MIDINOTE101}, + {"MIDINOTE102", K_MIDINOTE102}, + {"MIDINOTE103", K_MIDINOTE103}, + {"MIDINOTE104", K_MIDINOTE104}, + {"MIDINOTE105", K_MIDINOTE105}, + {"MIDINOTE106", K_MIDINOTE106}, + {"MIDINOTE107", K_MIDINOTE107}, + {"MIDINOTE108", K_MIDINOTE108}, + {"MIDINOTE109", K_MIDINOTE109}, + {"MIDINOTE110", K_MIDINOTE110}, + {"MIDINOTE111", K_MIDINOTE111}, + {"MIDINOTE112", K_MIDINOTE112}, + {"MIDINOTE113", K_MIDINOTE113}, + {"MIDINOTE114", K_MIDINOTE114}, + {"MIDINOTE115", K_MIDINOTE115}, + {"MIDINOTE116", K_MIDINOTE116}, + {"MIDINOTE117", K_MIDINOTE117}, + {"MIDINOTE118", K_MIDINOTE118}, + {"MIDINOTE119", K_MIDINOTE119}, + {"MIDINOTE120", K_MIDINOTE120}, + {"MIDINOTE121", K_MIDINOTE121}, + {"MIDINOTE122", K_MIDINOTE122}, + {"MIDINOTE123", K_MIDINOTE123}, + {"MIDINOTE124", K_MIDINOTE124}, + {"MIDINOTE125", K_MIDINOTE125}, + {"MIDINOTE126", K_MIDINOTE126}, + {"MIDINOTE127", K_MIDINOTE127}, + {NULL, 0} }; @@ -343,7 +476,7 @@ Interactive line editing and console scrollback ==================== */ static void -Key_Console (int key, int ascii) +Key_Console (int key, int unicode) { // LordHavoc: copied most of this from Q2 to improve keyboard handling switch (key) @@ -392,7 +525,7 @@ Key_Console (int key, int ascii) break; } - if ((toupper(key) == 'V' && keydown[K_CTRL]) || ((key == K_INS || key == K_KP_INS) && keydown[K_SHIFT])) + if ((key == 'v' && keydown[K_CTRL]) || ((key == K_INS || key == K_KP_INS) && keydown[K_SHIFT])) { char *cbd, *p; if ((cbd = Sys_GetClipboardData()) != 0) @@ -402,11 +535,13 @@ Key_Console (int key, int ascii) p = cbd; while (*p) { - if (*p == '\n' || *p == '\r' || *p == '\b') + if (*p == '\r' && *(p+1) == '\n') { - *p++ = 0; - break; + *p++ = ';'; + *p++ = ' '; } + else if (*p == '\n' || *p == '\r' || *p == '\b') + *p++ = ';'; p++; } #else @@ -418,6 +553,7 @@ Key_Console (int key, int ascii) if (i > 0) { // terencehill: insert the clipboard text between the characters of the line + /* char *temp = (char *) Z_Malloc(MAX_INPUTLINE); cbd[i]=0; temp[0]=0; @@ -429,19 +565,41 @@ Key_Console (int key, int ascii) strlcat(key_line, temp, sizeof(key_line)); Z_Free(temp); key_linepos += i; + */ + // blub: I'm changing this to use memmove() like the rest of the code does. + cbd[i] = 0; + memmove(key_line + key_linepos + i, key_line + key_linepos, sizeof(key_line) - key_linepos - i); + memcpy(key_line + key_linepos, cbd, i); + key_linepos += i; } Z_Free(cbd); } return; } - if (key == 'l') + if (key == 'l' && keydown[K_CTRL]) { - if (keydown[K_CTRL]) - { - Cbuf_AddText ("clear\n"); - return; - } + Cbuf_AddText ("clear\n"); + return; + } + + if (key == 'u' && keydown[K_CTRL]) // like vi/readline ^u: delete currently edited line + { + // clear line + key_line[0] = ']'; + key_line[1] = 0; + key_linepos = 1; + return; + } + + if (key == 'q' && keydown[K_CTRL]) // like zsh ^q: push line to history, don't execute, and clear + { + // clear line + Key_History_Push(); + key_line[0] = ']'; + key_line[1] = 0; + key_linepos = 1; + return; } if (key == K_ENTER || key == K_KP_ENTER) @@ -460,6 +618,57 @@ Key_Console (int key, int ascii) if (key == K_TAB) { + if(keydown[K_CTRL]) // append to the cvar its value + { + int cvar_len, cvar_str_len, chars_to_move; + char k; + char cvar[MAX_INPUTLINE]; + const char *cvar_str; + + // go to the start of the variable + while(--key_linepos) + { + k = key_line[key_linepos]; + if(k == '\"' || k == ';' || k == ' ' || k == '\'') + break; + } + key_linepos++; + + // save the variable name in cvar + for(cvar_len=0; (k = key_line[key_linepos + cvar_len]) != 0; cvar_len++) + { + if(k == '\"' || k == ';' || k == ' ' || k == '\'') + break; + cvar[cvar_len] = k; + } + if (cvar_len==0) + return; + cvar[cvar_len] = 0; + + // go to the end of the cvar + key_linepos += cvar_len; + + // save the content of the variable in cvar_str + cvar_str = Cvar_VariableString(cvar); + cvar_str_len = strlen(cvar_str); + if (cvar_str_len==0) + return; + + // insert space and cvar_str in key_line + chars_to_move = strlen(&key_line[key_linepos]); + if (key_linepos + 1 + cvar_str_len + chars_to_move < MAX_INPUTLINE) + { + if (chars_to_move) + memmove(&key_line[key_linepos + 1 + cvar_str_len], &key_line[key_linepos], chars_to_move); + key_line[key_linepos++] = ' '; + memcpy(&key_line[key_linepos], cvar_str, cvar_str_len); + key_linepos += cvar_str_len; + key_line[key_linepos + chars_to_move] = 0; + } + else + Con_Printf("Couldn't append cvar value, edit line too long.\n"); + return; + } // Enhanced command completion // by EvilTypeGuy eviltypeguy@qeradiant.com // Thanks to Fett, Taniwha @@ -482,6 +691,15 @@ Key_Console (int key, int ascii) int pos; char k; pos = key_linepos-1; + + if(pos) // skip all "; ' after the word + while(--pos) + { + k = key_line[pos]; + if (!(k == '\"' || k == ';' || k == ' ' || k == '\'')) + break; + } + if(pos) while(--pos) { @@ -494,7 +712,8 @@ Key_Console (int key, int ascii) else if(keydown[K_SHIFT]) // move cursor to the previous character ignoring colors { int pos; - pos = key_linepos-1; + size_t inchar = 0; + pos = u8_prevbyte(key_line, key_linepos); while (pos) if(pos-1 > 0 && key_line[pos-1] == STRING_COLOR_TAG && isdigit(key_line[pos])) pos-=2; @@ -503,13 +722,19 @@ Key_Console (int key, int ascii) pos-=5; else { + if(pos-1 > 0 && key_line[pos-1] == STRING_COLOR_TAG && key_line[pos] == STRING_COLOR_TAG) // consider ^^ as a character + pos--; pos--; break; } - key_linepos = pos + 1; + // we need to move to the beginning of the character when in a wide character: + u8_charidx(key_line, pos + 1, &inchar); + key_linepos = pos + 1 - inchar; } else - key_linepos--; + { + key_linepos = u8_prevbyte(key_line, key_linepos); + } return; } @@ -518,8 +743,9 @@ Key_Console (int key, int ascii) { if (key_linepos > 1) { - strlcpy(key_line + key_linepos - 1, key_line + key_linepos, sizeof(key_line) + 1 - key_linepos); - key_linepos--; + int newpos = u8_prevbyte(key_line, key_linepos); + strlcpy(key_line + newpos, key_line + key_linepos, sizeof(key_line) + 1 - key_linepos); + key_linepos = newpos; } return; } @@ -530,7 +756,7 @@ Key_Console (int key, int ascii) size_t linelen; linelen = strlen(key_line); if (key_linepos < (int)linelen) - memmove(key_line + key_linepos, key_line + key_linepos + 1, linelen - key_linepos); + memmove(key_line + key_linepos, key_line + key_linepos + u8_bytelen(key_line + key_linepos, 1), linelen - key_linepos); return; } @@ -546,12 +772,21 @@ Key_Console (int key, int ascii) char k; len = (int)strlen(key_line); pos = key_linepos; + while(++pos < len) { k = key_line[pos]; if(k == '\"' || k == ';' || k == ' ' || k == '\'') break; } + + if (pos < len) // skip all "; ' after the word + while(++pos < len) + { + k = key_line[pos]; + if (!(k == '\"' || k == ';' || k == ' ' || k == '\'')) + break; + } key_linepos = pos; } else if(keydown[K_SHIFT]) // move cursor to the next character ignoring colors @@ -559,15 +794,23 @@ Key_Console (int key, int ascii) int pos, len; len = (int)strlen(key_line); pos = key_linepos; - // check if there is a color tag right after the cursor - if (key_line[pos] == STRING_COLOR_TAG) - { - if(isdigit(key_line[pos+1])) - pos+=1; - else if(key_line[pos+1] == STRING_COLOR_RGB_TAG_CHAR && isxdigit(key_line[pos+2]) && isxdigit(key_line[pos+3]) && isxdigit(key_line[pos+4])) - pos+=4; - } - pos++; + + // go beyond all initial consecutive color tags, if any + if(pos < len) + while (key_line[pos] == STRING_COLOR_TAG) + { + if(isdigit(key_line[pos+1])) + pos+=2; + else if(key_line[pos+1] == STRING_COLOR_RGB_TAG_CHAR && isxdigit(key_line[pos+2]) && isxdigit(key_line[pos+3]) && isxdigit(key_line[pos+4])) + pos+=5; + else + break; + } + + // skip the char + if (key_line[pos] == STRING_COLOR_TAG && key_line[pos+1] == STRING_COLOR_TAG) // consider ^^ as a character + pos++; + pos += u8_bytelen(key_line + pos, 1); // now go beyond all next consecutive color tags, if any if(pos < len) @@ -583,7 +826,7 @@ Key_Console (int key, int ascii) key_linepos = pos; } else - key_linepos++; + key_linepos += u8_bytelen(key_line + key_linepos, 1); return; } @@ -606,33 +849,79 @@ Key_Console (int key, int ascii) Key_History_Down(); return; } - - if (key == K_PGUP || key == K_KP_PGUP || key == K_MWHEELUP) + // ~1.0795 = 82/76 using con_textsize 64 76 is height of the char, 6 is the distance between 2 lines + if (key == K_PGUP || key == K_KP_PGUP) { if(keydown[K_CTRL]) { - con_backscroll += 3; + con_backscroll += ((vid_conheight.integer >> 2) / con_textsize.integer)-1; } else - con_backscroll += ((int) vid_conheight.integer >> 5); + con_backscroll += ((vid_conheight.integer >> 1) / con_textsize.integer)-3; return; } - if (key == K_PGDN || key == K_KP_PGDN || key == K_MWHEELDOWN) + if (key == K_PGDN || key == K_KP_PGDN) { if(keydown[K_CTRL]) { - con_backscroll -= 3; + con_backscroll -= ((vid_conheight.integer >> 2) / con_textsize.integer)-1; } else - con_backscroll -= ((int) vid_conheight.integer >> 5); + con_backscroll -= ((vid_conheight.integer >> 1) / con_textsize.integer)-3; return; } + + if (key == K_MWHEELUP) + { + if(keydown[K_CTRL]) + con_backscroll += 1; + else if(keydown[K_SHIFT]) + con_backscroll += ((vid_conheight.integer >> 2) / con_textsize.integer)-1; + else + con_backscroll += 5; + return; + } + + if (key == K_MWHEELDOWN) + { + if(keydown[K_CTRL]) + con_backscroll -= 1; + else if(keydown[K_SHIFT]) + con_backscroll -= ((vid_conheight.integer >> 2) / con_textsize.integer)-1; + else + con_backscroll -= 5; + return; + } + + if (keydown[K_CTRL]) + { + // text zoom in + if (key == '+' || key == K_KP_PLUS) + { + if (con_textsize.integer < 128) + Cvar_SetValueQuick(&con_textsize, con_textsize.integer + 1); + return; + } + // text zoom out + if (key == '-' || key == K_KP_MINUS) + { + if (con_textsize.integer > 1) + Cvar_SetValueQuick(&con_textsize, con_textsize.integer - 1); + return; + } + // text zoom reset + if (key == '0' || key == K_KP_INS) + { + Cvar_SetValueQuick(&con_textsize, atoi(Cvar_VariableDefString("con_textsize"))); + return; + } + } if (key == K_HOME || key == K_KP_HOME) { if (keydown[K_CTRL]) - con_backscroll = INT_MAX; + con_backscroll = CON_TEXTSIZE; else key_linepos = 1; return; @@ -648,22 +937,31 @@ Key_Console (int key, int ascii) } // non printable - if (ascii < 32) + if (unicode < 32) return; if (key_linepos < MAX_INPUTLINE-1) { + char buf[16]; int len; + int blen; + blen = u8_fromchar(unicode, buf, sizeof(buf)); + if (!blen) + return; len = (int)strlen(&key_line[key_linepos]); // check insert mode, or always insert if at end of line if (key_insert || len == 0) { // can't use strcpy to move string to right len++; - memmove(&key_line[key_linepos + 1], &key_line[key_linepos], len); + //memmove(&key_line[key_linepos + u8_bytelen(key_line + key_linepos, 1)], &key_line[key_linepos], len); + memmove(&key_line[key_linepos + blen], &key_line[key_linepos], len); } - key_line[key_linepos] = ascii; - key_linepos++; + memcpy(key_line + key_linepos, buf, blen); + key_linepos += blen; + //key_linepos += u8_fromchar(unicode, key_line + key_linepos, sizeof(key_line) - key_linepos - 1); + //key_line[key_linepos] = ascii; + //key_linepos++; } } @@ -678,7 +976,6 @@ extern int Nicks_CompleteChatLine(char *buffer, size_t size, unsigned int pos); static void Key_Message (int key, int ascii) { - if (key == K_ENTER || ascii == 10 || ascii == 13) { if(chat_mode < 0) @@ -703,7 +1000,7 @@ Key_Message (int key, int ascii) if (key == K_BACKSPACE) { if (chat_bufferlen) { - chat_bufferlen--; + chat_bufferlen = u8_prevbyte(chat_buffer, chat_bufferlen); chat_buffer[chat_bufferlen] = 0; } return; @@ -720,8 +1017,10 @@ Key_Message (int key, int ascii) if (!ascii) return; // non printable - chat_buffer[chat_bufferlen++] = ascii; - chat_buffer[chat_bufferlen] = 0; + chat_bufferlen += u8_fromchar(ascii, chat_buffer+chat_bufferlen, sizeof(chat_buffer) - chat_bufferlen - 1); + + //chat_buffer[chat_bufferlen++] = ascii; + //chat_buffer[chat_bufferlen] = 0; } //============================================================================ @@ -1043,7 +1342,7 @@ Key_WriteBindings (qfile_t *f) p = keybindings[j][i]; if (p) { - Cmd_QuoteString(bindbuf, sizeof(bindbuf), p, "\"\\"); + Cmd_QuoteString(bindbuf, sizeof(bindbuf), p, "\"\\"); // don't need to escape $ because cvars are not expanded inside bind if (j == 0) FS_Printf(f, "bind %s \"%s\"\n", Key_KeynumToString (i), bindbuf); else @@ -1121,8 +1420,8 @@ Key_Event (int key, int ascii, qboolean down) if (!bind) bind = keybindings[key_bmap2][key]; - if (developer.integer >= 1000) - Con_Printf("Key_Event(%i, '%c', %s) keydown %i bind \"%s\"\n", key, ascii, down ? "down" : "up", keydown[key], bind ? bind : ""); + if (developer_insane.integer) + Con_DPrintf("Key_Event(%i, '%c', %s) keydown %i bind \"%s\"\n", key, ascii ? ascii : '?', down ? "down" : "up", keydown[key], bind ? bind : ""); if(key_consoleactive) keydest = key_console; @@ -1193,7 +1492,7 @@ Key_Event (int key, int ascii, qboolean down) if(key_consoleactive & KEY_CONSOLEACTIVE_FORCED) { key_consoleactive &= ~KEY_CONSOLEACTIVE_USER; - MR_ToggleMenu_f (); + MR_ToggleMenu(1); } else Con_ToggleConsole_f(); @@ -1214,7 +1513,7 @@ Key_Event (int key, int ascii, qboolean down) // csqc has priority over toggle menu if it wants to (e.g. handling escape for UI stuff in-game.. :sick:) q = CL_VM_InputEvent(down, key, ascii); if (!q && down) - MR_ToggleMenu_f (); + MR_ToggleMenu(1); break; default: