Stefan Monnier wrote:
Calling the function just means "I'm a movement command and would like
to follow the new select-on-shift behavior".
  

It's a red herring to think in terms of movement commands.

For example, if C-t invokes transpose-chars then,
by default, S-C-t should also invoke transpose-chars
but override the default and make the new default to
preserve the transient mark.   S-C-f S-C-f S-C-t S-C-f
makes one modification to the buffer and leaves a
transient region of three characters.   (Hopefully
transpose-chars is already coded so as to make
its buffer changes under save-excursion.)



Then the function can decide on what actually happens when.

  

The default behavior is to remove the transient region.

The default treatment of a shift sequence with no other binding
is to run the unshifted sequence, but keep the transient region
(by default).

A tiny minority of commands need to behave differently
from that but that minority isn't identical to "motion commands"
and that minority isn't treated homogenously (e.g., yank and
replace-string are both exceptions but they are different kinds of
exceptions).






  
  "Extend the temporary region highlighting for the next command"
    

  
is a neater and more self-contained task for a function than
    

  
  "Extend the temporary region highlighting for the next command, but
   only if this-single-command-shift-translated is non-nil; otherwise,
   do nothing"
    

  

That's true but it can be even simpler than that by
setting the defaults properly, with regard to the
right model of select-shift state.


The docstring of the function would be more like

  "Handle the mark selection for movement commands."

  

"Movement commands" isn't the right concept.   The decision
to extend or not extend the transient region is more a matter of
how a command is invoked than what it does, usually.   (Again,
commands like yank are exceptions).

-t