I thought it means that seek_whitespace_right and left is what the cursor normally does when you press ctrl and arrows -- skip words and stop at underscores (which is very convenient, btw). But I tried to do the following:

and the cursor actually seeks white spaces in this case (I want it to seek underscores). How is it possible that the same functions in two different situations do different things? Am I misunderstanding something? What are these functions supposed to do?

mapid_global applies everywhere, but for something that is bound for both code AND global or both text files AND global, the more specific map overrides the global map. So you cannot just stick it in global and expect to see it without checking if something else overrides that binding.

There isn't a lot of flexibility in the menus in 4.0.28. You can call set_gui_up_down_keys_doc to change the keybindings for up/down navigation in menus in the current version, but you can't call it from the get_binding_data function, since it's not a binding, it's a part of the custom API. You can instead call it from the start hook which you will find in 4coder_default_hooks.cpp.

In the next upcoming version (4.0.29) I am moving off of the old GUI system and you will be able to fully rebind and recustomize the menus as much as you want.