diff --git a/field.c b/field.c index db0c9c7..cfd3886 100644 --- a/field.c +++ b/field.c @@ -54,7 +54,7 @@ void field_fput(Field* f, FILE* stream) { Glyph* row_p = f_buffer + f_width * iy; for (Usz ix = 0; ix < f_width; ++ix) { char c = row_p[ix]; - out_buffer[ix] = glyph_char_is_valid(c) ? c : '!'; + out_buffer[ix] = glyph_char_is_valid(c) ? c : '?'; } out_buffer[f_width] = '\n'; out_buffer[f_width + 1] = '\0'; diff --git a/tui_main.c b/tui_main.c index 937989a..c0f7c9b 100644 --- a/tui_main.c +++ b/tui_main.c @@ -1459,6 +1459,16 @@ void app_input_cmd(App_state* a, App_input_cmd ev) { } } +bool app_hacky_try_save(App_state* a) { + if (!a->filename) return false; + if (a->field.height == 0 || a->field.width == 0) return false; + FILE* f = fopen(a->filename, "w"); + if (!f) return false; + field_fput(&a->field, f); + fclose(f); + return true; +} + enum { Argopt_margins = UCHAR_MAX + 1, Argopt_osc_server, @@ -1839,6 +1849,10 @@ int main(int argc, char** argv) { app_input_character(&app_state, '.'); break; + case KEY_F(2): + app_hacky_try_save(&app_state); + break; + default: if (key >= CHAR_MIN && key <= CHAR_MAX && is_valid_glyph((Glyph)key)) { app_input_character(&app_state, (char)key);