diff --git a/plugins/tweak/tweaks/embark-profile-name.h b/plugins/tweak/tweaks/embark-profile-name.h index aa151588e..f9cb45f4b 100644 --- a/plugins/tweak/tweaks/embark-profile-name.h +++ b/plugins/tweak/tweaks/embark-profile-name.h @@ -1,22 +1,21 @@ #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) - ch = Screen::keyToChar(*it); - if (in_save_profile && ch >= 32 && ch <= 126) - { - profile_name.push_back((char)ch); + for( auto it = input->begin(); ch == -1 && it != input->end(); ++it ) { + ch = Screen::keyToChar( *it ); } - else - { - if (input->count(df::interface_key::LEAVESCREEN)) - input->insert(df::interface_key::SETUPGAME_SAVE_PROFILE_ABORT); - INTERPOSE_NEXT(feed)(input); + // 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 { + INTERPOSE_NEXT( feed )( input ); } } }; -IMPLEMENT_VMETHOD_INTERPOSE(embark_profile_name_hook, feed); + +IMPLEMENT_VMETHOD_INTERPOSE( embark_profile_name_hook, feed );