@@ -1027,14 +1027,71 @@ void Key_SetBinding( int keynum, const char *binding ) {
1027
1027
return ;
1028
1028
1029
1029
// free old bindings
1030
- if ( kg.keys [keynames[keynum].upper ].binding ) {
1031
- Z_Free ( kg.keys [keynames[keynum].upper ].binding );
1032
- kg.keys [keynames[keynum].upper ].binding = NULL ;
1030
+ if ( kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_NONE] ) {
1031
+ Z_Free ( kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_NONE] );
1032
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_NONE] = NULL ;
1033
1033
}
1034
1034
1035
1035
// allocate memory for new binding
1036
1036
if ( binding )
1037
- kg.keys [keynames[keynum].upper ].binding = CopyString ( binding );
1037
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_NONE] = CopyString ( binding );
1038
+
1039
+ // consider this like modifying an archived cvar, so the
1040
+ // file write will be triggered at the next oportunity
1041
+ cvar_modifiedFlags |= CVAR_ARCHIVE;
1042
+ }
1043
+
1044
+ void Key_SetBindingAlt (int keynum, const char *binding) {
1045
+ if (keynum < 0 || keynum >= MAX_KEYS || keynum == A_ALT || keynum == A_ALT2)
1046
+ return ;
1047
+
1048
+ // free old bindings
1049
+ if (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_ALT]) {
1050
+ Z_Free (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_ALT]);
1051
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_ALT] = NULL ;
1052
+ }
1053
+
1054
+ // allocate memory for new binding
1055
+ if (binding)
1056
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_ALT] = CopyString (binding);
1057
+
1058
+ // consider this like modifying an archived cvar, so the
1059
+ // file write will be triggered at the next oportunity
1060
+ cvar_modifiedFlags |= CVAR_ARCHIVE;
1061
+ }
1062
+
1063
+ void Key_SetBindingCtrl (int keynum, const char *binding) {
1064
+ if (keynum < 0 || keynum >= MAX_KEYS || keynum == A_CTRL || keynum == A_CTRL2)
1065
+ return ;
1066
+
1067
+ // free old bindings
1068
+ if (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_CTRL]) {
1069
+ Z_Free (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_CTRL]);
1070
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_CTRL] = NULL ;
1071
+ }
1072
+
1073
+ // allocate memory for new binding
1074
+ if (binding)
1075
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_CTRL] = CopyString (binding);
1076
+
1077
+ // consider this like modifying an archived cvar, so the
1078
+ // file write will be triggered at the next oportunity
1079
+ cvar_modifiedFlags |= CVAR_ARCHIVE;
1080
+ }
1081
+
1082
+ void Key_SetBindingShift (int keynum, const char *binding) {
1083
+ if (keynum < 0 || keynum >= MAX_KEYS || keynum == A_SHIFT || keynum == A_SHIFT2)
1084
+ return ;
1085
+
1086
+ // free old bindings
1087
+ if (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_SHIFT]) {
1088
+ Z_Free (kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_SHIFT]);
1089
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_SHIFT] = NULL ;
1090
+ }
1091
+
1092
+ // allocate memory for new binding
1093
+ if (binding)
1094
+ kg.keys [keynames[keynum].upper ].binding [BINDINGMOD_SHIFT] = CopyString (binding);
1038
1095
1039
1096
// consider this like modifying an archived cvar, so the
1040
1097
// file write will be triggered at the next oportunity
@@ -1050,7 +1107,7 @@ char *Key_GetBinding( int keynum ) {
1050
1107
if ( keynum < 0 || keynum >= MAX_KEYS )
1051
1108
return " " ;
1052
1109
1053
- return kg.keys [keynum].binding ;
1110
+ return kg.keys [keynum].binding [BINDINGMOD_NONE] ;
1054
1111
}
1055
1112
1056
1113
/*
@@ -1061,7 +1118,7 @@ Key_GetKey
1061
1118
int Key_GetKey ( const char *binding ) {
1062
1119
if ( binding ) {
1063
1120
for ( int i=0 ; i<MAX_KEYS; i++ ) {
1064
- if ( kg.keys [i].binding && !Q_stricmp ( binding, kg.keys [i].binding ) )
1121
+ if ( kg.keys [i].binding [BINDINGMOD_NONE] && !Q_stricmp ( binding, kg.keys [i].binding [BINDINGMOD_NONE] ) )
1065
1122
return i;
1066
1123
}
1067
1124
}
@@ -1074,19 +1131,47 @@ int Key_GetKey( const char *binding ) {
1074
1131
Key_Unbind_f
1075
1132
===================
1076
1133
*/
1134
+
1077
1135
void Key_Unbind_f ( void ) {
1078
1136
if ( Cmd_Argc () != 2 ) {
1079
- Com_Printf ( " unbind <key> : remove commands from a key\n " );
1137
+ Com_Printf ( " unbind <key> : remove commands from a key\n optionally use ctrl+, shift+, or alt+ key modifier \ n" );
1080
1138
return ;
1081
1139
}
1082
1140
1083
- int b = Key_StringToKeynum ( Cmd_Argv ( 1 ) );
1141
+ char *keyStr = Cmd_Argv (1 );
1142
+ int len = strlen (Cmd_Argv (1 ));
1143
+ bindingModifier_t mod = BINDINGMOD_NONE;
1144
+ if (!Q_stricmpn (Cmd_Argv (1 ), " alt+" , 4 ) && len > 4 ) {
1145
+ keyStr += 4 ;
1146
+ mod = BINDINGMOD_ALT;
1147
+ }
1148
+ if (!Q_stricmpn (Cmd_Argv (1 ), " ctrl+" , 5 ) && len > 5 ) {
1149
+ keyStr += 5 ;
1150
+ mod = BINDINGMOD_CTRL;
1151
+ }
1152
+ else if (!Q_stricmpn (Cmd_Argv (1 ), " shift+" , 6 ) && len > 6 ) {
1153
+ keyStr += 6 ;
1154
+ mod = BINDINGMOD_SHIFT;
1155
+ }
1156
+
1157
+ int b = Key_StringToKeynum ( keyStr );
1084
1158
if ( b == -1 ) {
1085
- Com_Printf ( " \" %s\" isn't a valid key\n " , Cmd_Argv ( 1 ) );
1159
+ Com_Printf ( " \" %s\" isn't a valid key\n " , keyStr );
1160
+ return ;
1161
+ }
1162
+ if (((b == A_ALT || b == A_ALT2) && mod == BINDINGMOD_ALT) ||
1163
+ ((b == A_CTRL || b == A_CTRL2) && mod == BINDINGMOD_CTRL) ||
1164
+ ((b == A_SHIFT || b == A_SHIFT2) && mod == BINDINGMOD_SHIFT)) {
1165
+ Com_Printf (" \" %s\" isn't a valid key combination\n " , Cmd_Argv (1 ));
1086
1166
return ;
1087
1167
}
1088
1168
1089
- Key_SetBinding ( b, " " );
1169
+ switch (mod) {
1170
+ case BINDINGMOD_ALT: Key_SetBindingAlt (b, " " ); break ;
1171
+ case BINDINGMOD_CTRL: Key_SetBindingCtrl (b, " " ); break ;
1172
+ case BINDINGMOD_SHIFT: Key_SetBindingShift (b, " " ); break ;
1173
+ default : Key_SetBinding (b, " " ); break ;
1174
+ }
1090
1175
}
1091
1176
1092
1177
/*
@@ -1096,8 +1181,14 @@ Key_Unbindall_f
1096
1181
*/
1097
1182
void Key_Unbindall_f ( void ) {
1098
1183
for ( int i=0 ; i<MAX_KEYS; i++ ) {
1099
- if ( kg.keys [i].binding )
1184
+ if ( kg.keys [i].binding [BINDINGMOD_NONE] )
1100
1185
Key_SetBinding ( i, " " );
1186
+ if (kg.keys [i].binding [BINDINGMOD_ALT])
1187
+ Key_SetBindingAlt (i, " " );
1188
+ if (kg.keys [i].binding [BINDINGMOD_CTRL])
1189
+ Key_SetBindingCtrl (i, " " );
1190
+ if (kg.keys [i].binding [BINDINGMOD_SHIFT])
1191
+ Key_SetBindingShift (i, " " );
1101
1192
}
1102
1193
}
1103
1194
@@ -1110,25 +1201,73 @@ void Key_Bind_f( void ) {
1110
1201
int c = Cmd_Argc ();
1111
1202
1112
1203
if ( c < 2 ) {
1113
- Com_Printf ( " bind <key> [command] : attach a command to a key\n " );
1204
+ Com_Printf ( " bind <key> [command] : attach a command to a key\n optionally use ctrl+, shift+, or alt+ key modifier " );
1114
1205
return ;
1115
1206
}
1116
1207
1117
- int b = Key_StringToKeynum ( Cmd_Argv ( 1 ) );
1208
+ char *keyStr = Cmd_Argv (1 );
1209
+ int len = strlen (Cmd_Argv (1 ));
1210
+ bindingModifier_t mod = BINDINGMOD_NONE;
1211
+ if (!Q_stricmpn (Cmd_Argv (1 ), " alt+" , 4 ) && len > 4 ) {
1212
+ keyStr += 4 ;
1213
+ mod = BINDINGMOD_ALT;
1214
+ }
1215
+ if (!Q_stricmpn (Cmd_Argv (1 ), " ctrl+" , 5 ) && len > 5 ) {
1216
+ keyStr += 5 ;
1217
+ mod = BINDINGMOD_CTRL;
1218
+ }
1219
+ else if (!Q_stricmpn (Cmd_Argv (1 ), " shift+" , 6 ) && len > 6 ) {
1220
+ keyStr += 6 ;
1221
+ mod = BINDINGMOD_SHIFT;
1222
+ }
1223
+
1224
+ int b = Key_StringToKeynum ( keyStr );
1118
1225
if ( b == -1 ) {
1119
- Com_Printf ( " \" %s\" isn't a valid key\n " , Cmd_Argv ( 1 ) );
1226
+ Com_Printf ( " \" %s\" isn't a valid key\n " , keyStr );
1227
+ return ;
1228
+ }
1229
+ if (((b == A_ALT || b == A_ALT2) && mod == BINDINGMOD_ALT) ||
1230
+ ((b == A_CTRL || b == A_CTRL2) && mod == BINDINGMOD_CTRL) ||
1231
+ ((b == A_SHIFT || b == A_SHIFT2) && mod == BINDINGMOD_SHIFT)) {
1232
+ Com_Printf (" \" %s\" isn't a valid key combination\n " , Cmd_Argv (1 ));
1120
1233
return ;
1121
1234
}
1122
1235
1123
1236
if ( c == 2 ) {
1124
- if ( kg.keys [b].binding && kg.keys [b].binding [0 ] )
1125
- Com_Printf ( S_COLOR_GREY " Bind " S_COLOR_WHITE " %s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString ( b ), kg.keys [b].binding );
1126
- else
1127
- Com_Printf ( " \" %s\" is not bound\n " , Key_KeynumToString ( b ) );
1237
+ if (!mod) {
1238
+ if (VALIDSTRING (kg.keys [b].binding [BINDINGMOD_NONE]))
1239
+ Com_Printf (S_COLOR_GREY " Bind " S_COLOR_WHITE " %s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (b), kg.keys [b].binding [BINDINGMOD_NONE]);
1240
+ else
1241
+ Com_Printf (" \" %s\" is not bound\n " , Key_KeynumToString (b));
1242
+ }
1243
+
1244
+ if ((!mod || mod == BINDINGMOD_ALT)) {
1245
+ if (VALIDSTRING (kg.keys [b].binding [BINDINGMOD_ALT]))
1246
+ Com_Printf (S_COLOR_GREY " Bind " S_COLOR_WHITE " Alt+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (b), kg.keys [b].binding [BINDINGMOD_ALT]);
1247
+ else if (mod) // only explicity tell them it's not bound if they requested this modifier
1248
+ Com_Printf (" \" Alt+%s\" is not bound\n " , Key_KeynumToString (b));
1249
+ }
1250
+ if ((!mod || mod == BINDINGMOD_CTRL)) {
1251
+ if (VALIDSTRING (kg.keys [b].binding [BINDINGMOD_CTRL]))
1252
+ Com_Printf (S_COLOR_GREY " Bind " S_COLOR_WHITE " Ctrl+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (b), kg.keys [b].binding [BINDINGMOD_CTRL]);
1253
+ else if (mod) // only explicity tell them it's not bound if they requested this modifier
1254
+ Com_Printf (" \" Ctrl+%s\" is not bound\n " , Key_KeynumToString (b));
1255
+ }
1256
+ if ((!mod || mod == BINDINGMOD_SHIFT)) {
1257
+ if (VALIDSTRING (kg.keys [b].binding [BINDINGMOD_SHIFT]))
1258
+ Com_Printf (S_COLOR_GREY " Bind " S_COLOR_WHITE " Shift+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (b), kg.keys [b].binding [BINDINGMOD_SHIFT]);
1259
+ else if (mod) // only explicity tell them it's not bound if they requested this modifier
1260
+ Com_Printf (" \" Shift+%s\" is not bound\n " , Key_KeynumToString (b));
1261
+ }
1128
1262
return ;
1129
1263
}
1130
1264
1131
- Key_SetBinding ( b, Cmd_ArgsFrom ( 2 ) );
1265
+ switch (mod) {
1266
+ case BINDINGMOD_ALT: Key_SetBindingAlt (b, Cmd_ArgsFrom (2 )); break ;
1267
+ case BINDINGMOD_CTRL: Key_SetBindingCtrl (b, Cmd_ArgsFrom (2 )); break ;
1268
+ case BINDINGMOD_SHIFT: Key_SetBindingShift (b, Cmd_ArgsFrom (2 )); break ;
1269
+ default : Key_SetBinding (b, Cmd_ArgsFrom (2 )); break ;
1270
+ }
1132
1271
}
1133
1272
1134
1273
/*
@@ -1141,14 +1280,34 @@ Writes lines containing "bind key value"
1141
1280
void Key_WriteBindings ( fileHandle_t f ) {
1142
1281
FS_Printf ( f, " unbindall\n " );
1143
1282
for ( size_t i=0 ; i<MAX_KEYS; i++ ) {
1144
- if ( kg.keys [i].binding && kg.keys [i].binding [0 ] ) {
1145
- const char *name = Key_KeynumToString ( i );
1146
-
1283
+ const char *name = Key_KeynumToString (i);
1284
+ if ( VALIDSTRING (kg.keys [i].binding [BINDINGMOD_NONE]) ) {
1147
1285
// handle the escape character nicely
1148
1286
if ( !strcmp ( name, " \\ " ) )
1149
- FS_Printf ( f, " bind \"\\\" \" %s\"\n " , kg.keys [i].binding );
1287
+ FS_Printf ( f, " bind \"\\\" \" %s\"\n " , kg.keys [i].binding [BINDINGMOD_NONE] );
1288
+ else
1289
+ FS_Printf ( f, " bind \" %s\" \" %s\"\n " , name, kg.keys [i].binding [BINDINGMOD_NONE] );
1290
+ }
1291
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_ALT])) {
1292
+ // handle the escape character nicely
1293
+ if (!strcmp (name, " \\ " ))
1294
+ FS_Printf (f, " bind \" ALT+\\\" \" %s\"\n " , kg.keys [i].binding [BINDINGMOD_ALT]);
1295
+ else
1296
+ FS_Printf (f, " bind \" ALT+%s\" \" %s\"\n " , name, kg.keys [i].binding [BINDINGMOD_ALT]);
1297
+ }
1298
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_CTRL])) {
1299
+ // handle the escape character nicely
1300
+ if (!strcmp (name, " \\ " ))
1301
+ FS_Printf (f, " bind \" CTRL+\\\" \" %s\"\n " , kg.keys [i].binding [BINDINGMOD_CTRL]);
1150
1302
else
1151
- FS_Printf ( f, " bind \" %s\" \" %s\"\n " , name, kg.keys [i].binding );
1303
+ FS_Printf (f, " bind \" CTRL+%s\" \" %s\"\n " , name, kg.keys [i].binding [BINDINGMOD_CTRL]);
1304
+ }
1305
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_SHIFT])) {
1306
+ // handle the escape character nicely
1307
+ if (!strcmp (name, " \\ " ))
1308
+ FS_Printf (f, " bind \" SHIFT+\\\" \" %s\"\n " , kg.keys [i].binding [BINDINGMOD_SHIFT]);
1309
+ else
1310
+ FS_Printf (f, " bind \" SHIFT+%s\" \" %s\"\n " , name, kg.keys [i].binding [BINDINGMOD_SHIFT]);
1152
1311
}
1153
1312
}
1154
1313
}
@@ -1161,8 +1320,14 @@ Key_Bindlist_f
1161
1320
*/
1162
1321
void Key_Bindlist_f ( void ) {
1163
1322
for ( size_t i=0 ; i<MAX_KEYS; i++ ) {
1164
- if ( kg.keys [i].binding && kg.keys [i].binding [0 ] )
1165
- Com_Printf ( S_COLOR_GREY " Key " S_COLOR_WHITE " %s (%s) = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToAscii ( i ), Key_KeynumToString ( i ), kg.keys [i].binding );
1323
+ if ( VALIDSTRING (kg.keys [i].binding [BINDINGMOD_NONE]) )
1324
+ Com_Printf ( S_COLOR_GREY " Key " S_COLOR_WHITE " %s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString ( i ), kg.keys [i].binding [BINDINGMOD_NONE] );
1325
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_ALT]))
1326
+ Com_Printf (S_COLOR_GREY " Key " S_COLOR_WHITE " Alt+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (i), kg.keys [i].binding [BINDINGMOD_ALT]);
1327
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_CTRL]))
1328
+ Com_Printf (S_COLOR_GREY " Key " S_COLOR_WHITE " Ctrl+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (i), kg.keys [i].binding [BINDINGMOD_CTRL]);
1329
+ if (VALIDSTRING (kg.keys [i].binding [BINDINGMOD_SHIFT]))
1330
+ Com_Printf (S_COLOR_GREY " Key " S_COLOR_WHITE " Shift+%s = " S_COLOR_GREY " \" " S_COLOR_WHITE " %s" S_COLOR_GREY " \" " S_COLOR_WHITE " \n " , Key_KeynumToString (i), kg.keys [i].binding [BINDINGMOD_SHIFT]);
1166
1331
}
1167
1332
}
1168
1333
@@ -1267,25 +1432,37 @@ void CL_ParseBinding( int key, qboolean down, unsigned time )
1267
1432
1268
1433
// for rshift/ralt/rctrl, prefer the specific rshift/rctrl/ralt bind if
1269
1434
// it exists; otherwise, fallback to the generic shift/ctrl/alt bind
1270
- const char *binding;
1271
- int genericKey = 0 ;
1435
+ const char *binding = NULL ;
1436
+ qkey_t *keyPtr = &kg.keys [keynames[key].upper ];
1437
+ qkey_t *genericKeyPtr = NULL ;
1272
1438
switch (key) {
1273
- case A_SHIFT2: genericKey = A_SHIFT ; break ;
1274
- case A_CTRL2: genericKey = A_CTRL; break ;
1275
- case A_ALT2: genericKey = A_ALT; break ;
1439
+ case A_ALT2: genericKeyPtr = &kg. keys [keynames[A_ALT]. upper ] ; break ;
1440
+ case A_CTRL2: genericKeyPtr = &kg. keys [keynames[ A_CTRL]. upper ] ; break ;
1441
+ case A_SHIFT2: genericKeyPtr = &kg. keys [keynames[A_SHIFT]. upper ]; break ;
1276
1442
}
1277
- if (genericKey) {
1278
- if (VALIDSTRING (kg.keys [keynames[key].upper ].binding ))
1279
- binding = kg.keys [keynames[key].upper ].binding ;
1443
+
1444
+ if (VALIDSTRING (keyPtr->binding [BINDINGMOD_ALT]) && (kg.keys [A_ALT].down /* || kg.keys[A_ALT2].down*/ ) && key != A_ALT && key != A_ALT2)
1445
+ binding = keyPtr->binding [BINDINGMOD_ALT];
1446
+ else if (VALIDSTRING (keyPtr->binding [BINDINGMOD_CTRL]) && (kg.keys [A_CTRL].down /* || kg.keys[A_CTRL2].down*/ ) && key != A_CTRL && key != A_CTRL2)
1447
+ binding = keyPtr->binding [BINDINGMOD_CTRL];
1448
+ else if (VALIDSTRING (keyPtr->binding [BINDINGMOD_SHIFT]) && (kg.keys [A_SHIFT].down /* || kg.keys[A_SHIFT2].down*/ ) && key != A_SHIFT && key != A_SHIFT2)
1449
+ binding = keyPtr->binding [BINDINGMOD_SHIFT];
1450
+ else
1451
+ binding = keyPtr->binding [BINDINGMOD_NONE];
1452
+
1453
+ if (!VALIDSTRING (binding) && genericKeyPtr) {
1454
+ if (VALIDSTRING (genericKeyPtr->binding [BINDINGMOD_ALT]) && (kg.keys [A_ALT].down /* || kg.keys[A_ALT2].down*/ ) && key != A_ALT && key != A_ALT2)
1455
+ binding = genericKeyPtr->binding [BINDINGMOD_ALT];
1456
+ else if (VALIDSTRING (genericKeyPtr->binding [BINDINGMOD_CTRL]) && (kg.keys [A_CTRL].down /* || kg.keys[A_CTRL2].down*/ ) && key != A_CTRL && key != A_CTRL2)
1457
+ binding = genericKeyPtr->binding [BINDINGMOD_CTRL];
1458
+ else if (VALIDSTRING (genericKeyPtr->binding [BINDINGMOD_SHIFT]) && (kg.keys [A_SHIFT].down /* || kg.keys[A_SHIFT2].down*/ ) && key != A_SHIFT && key != A_SHIFT2)
1459
+ binding = genericKeyPtr->binding [BINDINGMOD_SHIFT];
1280
1460
else
1281
- binding = kg.keys [keynames[genericKey].upper ].binding ;
1282
- }
1283
- else {
1284
- binding = kg.keys [keynames[key].upper ].binding ;
1461
+ binding = genericKeyPtr->binding [BINDINGMOD_NONE];
1285
1462
}
1286
-
1287
1463
if (!VALIDSTRING (binding))
1288
1464
return ;
1465
+
1289
1466
Q_strncpyz (buf, binding, sizeof (buf));
1290
1467
1291
1468
// run all bind commands if console, ui, etc aren't reading keys
0 commit comments