summaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorcflip <cflip@cflip.net>2023-01-12 12:19:08 -0700
committercflip <cflip@cflip.net>2023-01-12 12:21:03 -0700
commit4c150aab138f5733d29ad4548d66764fe19ffc44 (patch)
tree6559f4cfafb7abb9a10b4a12be0ec79ee5b93df7 /window.c
parentab00e1e288743496e75c5e54c0e6abdecf439642 (diff)
Make the editor modal and refactor keyboard events
This makes the editor behave more like vi, with a seperate insert mode. This also refactors the keyboard input code to pass the SDL_Keysym structure to input.c and to use the SDL_TEXTINPUT event for editing text. SDL's text input event already fixes typing capital letters with shift, and should make it possible to enter text using an IME, however most unicode characters aren't properly rendered.
Diffstat (limited to 'window.c')
-rw-r--r--window.c41
1 files changed, 5 insertions, 36 deletions
diff --git a/window.c b/window.c
index b87188d..9d10f85 100644
--- a/window.c
+++ b/window.c
@@ -44,43 +44,12 @@ int window_handle_event(struct editor_state *editor)
case SDL_QUIT:
return 0;
case SDL_KEYDOWN:
- int keycode = e.key.keysym.sym;
- switch (e.key.keysym.sym) {
- case SDLK_BACKSPACE:
- keycode = BACKSPACE;
- break;
- case SDLK_LEFT:
- keycode = ARROW_LEFT;
- break;
- case SDLK_RIGHT:
- keycode = ARROW_RIGHT;
- break;
- case SDLK_UP:
- keycode = ARROW_UP;
- break;
- case SDLK_DOWN:
- keycode = ARROW_DOWN;
- break;
- case SDLK_DELETE:
- keycode = DELETE_KEY;
- break;
- case SDLK_HOME:
- keycode = HOME_KEY;
- break;
- case SDLK_END:
- keycode = END_KEY;
- break;
- case SDLK_PAGEUP:
- keycode = PAGE_UP;
- break;
- case SDLK_PAGEDOWN:
- keycode = PAGE_DOWN;
+ editor_process_keypress(editor, &e.key.keysym);
+ break;
+ case SDL_TEXTINPUT:
+ if (editor->mode == EDITOR_MODE_NORMAL)
break;
- }
- if (e.key.keysym.mod & KMOD_CTRL) {
- keycode = CTRL_KEY(keycode);
- }
- editor_process_keypress(editor, keycode);
+ editor_insert_char(editor, *e.text.text);
break;
}
return 1;