Well yeah but that's unfortunate because as you said it defeats the purpose, ideally $input should always return the button pressed and if an editbox's was used, $! would return that information.
The help file says that
by default (ie. not when using the 'v' option) it returns the editbox's content so when 'v' is used the button should be returned... the fact that $! also returns the $input value rather than the editbox's content is just another bug (according to the help file).
Now it's probably not going to be fixed because that would break script however, adding a new switch to fix the problem doesn't seem to be the good way around this, especially since the new switch would do what 'v' is
supposed to do.
I think it should be fixed to work as expected even if it can break script because if a script fails with this, it only means it uses a behavior that's not defined in the help file.
Another bugs:
$input(a,ov) return $ok but $input(a,onv) return $yes even if only the ok button is displayed.
similary, $input(a,rnv) returns $retry if you press "yes".
As a note, with 'r', $retry can be returned, which is not documented and isn't even known as an undocumented identifier.
or are you suggesting it should return $no/$cancel and editbox contents when yes/ok is clicked
I guess that would work since you could check for $cancel/$no if you wanted to handle that, and use the value returned otherwise (you can't have a "ok" button and a "yes" button at the same time afaik and the editbox's content is only returned if yes/ok was pressed)