comparison mcabber/src/screen.c @ 764:4e15322d315e

Allow binding of meta keys
author Mikael Berthe <mikael@lilotux.net>
date Sun, 19 Mar 2006 16:00:40 +0100
parents 6866ee749225
children 72626e9d60bd
comparison
equal deleted inserted replaced
763:6866ee749225 764:4e15322d315e
2018 ungetch(ks[i]); 2018 ungetch(ks[i]);
2019 } 2019 }
2020 return; 2020 return;
2021 } 2021 }
2022 2022
2023 static int bindcommand(keycode kcode) {
2024 gchar asciikey[16];
2025 const gchar *boundcmd;
2026
2027 if (!kcode.mcode || kcode.mcode == MKEY_EQUIV)
2028 g_snprintf(asciikey, 15, "%d", kcode.value);
2029 else if (kcode.mcode == MKEY_META)
2030 g_snprintf(asciikey, 15, "M%d", kcode.value);
2031 else
2032 g_snprintf(asciikey, 15, "MK%d", kcode.mcode);
2033
2034 boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
2035
2036 if (boundcmd) {
2037 gchar *cmd = g_strdup_printf("/%s", boundcmd);
2038 scr_CheckAutoAway(TRUE);
2039 if (process_command(cmd))
2040 return 255; // Quit
2041 g_free(cmd);
2042 return 0;
2043 }
2044
2045 scr_LogPrint(LPRINT_NORMAL, "Unknown key=%s", asciikey);
2046 if (utf8_mode)
2047 scr_LogPrint(LPRINT_NORMAL, "WARNING: UTF-8 not yet supported!");
2048 return -1;
2049 }
2050
2023 // process_key(key) 2051 // process_key(key)
2024 // Handle the pressed key, in the command line (bottom). 2052 // Handle the pressed key, in the command line (bottom).
2025 int process_key(keycode kcode) 2053 int process_key(keycode kcode)
2026 { 2054 {
2027 int key = kcode.value; 2055 int key = kcode.value;
2037 switch (kcode.value) { 2065 switch (kcode.value) {
2038 case 27: 2066 case 27:
2039 key = 27; 2067 key = 27;
2040 break; 2068 break;
2041 default: 2069 default:
2042 scr_LogPrint(LPRINT_NORMAL, "Unknown key=M%d", kcode.value); 2070 if (bindcommand(kcode) == 255)
2071 return 255;
2043 } 2072 }
2044 break; 2073 break;
2045 default: 2074 default:
2046 scr_LogPrint(LPRINT_NORMAL, "Unknown mkeycode! (%d)", kcode.mcode); 2075 if (bindcommand(kcode) == 255)
2047 key = ERR; 2076 return 255;
2077 key = ERR; // Do not process any further
2048 } 2078 }
2049 2079
2050 switch (key) { 2080 switch (key) {
2051 case 0: 2081 case 0:
2052 case ERR: 2082 case ERR:
2209 strcpy(tmpLine, ptr_inputline); 2239 strcpy(tmpLine, ptr_inputline);
2210 *ptr_inputline++ = key; 2240 *ptr_inputline++ = key;
2211 strcpy(ptr_inputline, tmpLine); 2241 strcpy(ptr_inputline, tmpLine);
2212 check_offset(1); 2242 check_offset(1);
2213 } else { 2243 } else {
2214 const gchar *boundcmd = isbound(key); 2244 // Look for a key binding.
2215 if (boundcmd) { 2245 if (bindcommand(kcode) == 255)
2216 gchar *cmd = g_strdup_printf("/%s", boundcmd); 2246 return 255;
2217 scr_CheckAutoAway(TRUE);
2218 if (process_command(cmd))
2219 return 255;
2220 g_free(cmd);
2221 } else {
2222 scr_LogPrint(LPRINT_NORMAL, "Unknown key=%d", key);
2223 if (utf8_mode)
2224 scr_LogPrint(LPRINT_NORMAL,
2225 "WARNING: UTF-8 not yet supported!");
2226 }
2227 } 2247 }
2228 } 2248 }
2229 2249
2230 if (completion_started && key != 9 && key != KEY_RESIZE) 2250 if (completion_started && key != 9 && key != KEY_RESIZE)
2231 scr_end_current_completion(); 2251 scr_end_current_completion();