diff --git a/plugins/tweak/tweaks/embark-profile-name.h b/plugins/tweak/tweaks/embark-profile-name.h index aa151588e..28ca73ded 100644 --- a/plugins/tweak/tweaks/embark-profile-name.h +++ b/plugins/tweak/tweaks/embark-profile-name.h @@ -1,22 +1,24 @@ #include "df/viewscreen_setupdwarfgamest.h" -using namespace DFHack; + struct embark_profile_name_hook : df::viewscreen_setupdwarfgamest { typedef df::viewscreen_setupdwarfgamest interpose_base; - DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set *input)) - { + + DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set *input)) { int ch = -1; - for (auto it = input->begin(); ch == -1 && it != input->end(); ++it) + for (auto it = input->begin(); ch == -1 && it != input->end(); ++it) { ch = Screen::keyToChar(*it); - if (in_save_profile && ch >= 32 && ch <= 126) - { - profile_name.push_back((char)ch); } - else - { - if (input->count(df::interface_key::LEAVESCREEN)) + // Intercept all printable characters except space. + // If space is intercepted the shift-space abort key will not work. + if (in_save_profile && ch >= 33 && ch <= 126) { + profile_name.push_back((char)ch); + } else { + if (input->count(df::interface_key::LEAVESCREEN)) { input->insert(df::interface_key::SETUPGAME_SAVE_PROFILE_ABORT); + } INTERPOSE_NEXT(feed)(input); } } }; + IMPLEMENT_VMETHOD_INTERPOSE(embark_profile_name_hook, feed);