Johan Bockgård pointed out (on the #emacs irc channel) that transient-mark-mode actually _already_ has enough functionality to allow implementing the desired "deactivation" behavior for shift-select (where non-shifted movement keys automatically deactivate any mark which was activated by shifted movement keys), without using post-command-hook at all! Basically his idea is to use the "only mode" feature of transient-mark-mode (setting the transient-mark-mode variable to 'only instead of t). I've attached a proof-of-concept that shows how it works; this code only implements shift-select for the basic cursor movement keys plus forward/backward-word, but it's obviously trivial to extend to any other commands desired. This implementation only works if transient-mark-mode is disabled, because of the way the transient-mark-mode "only mode" works; my guess is that this restriction would probably be pretty easy to remove by simply having a separate variable to enable "only mode" instead of overloading the meaning of the basic transient-mark-mode variable. Anyway, here's the example code, which is very simple and seems to work quite nicely; check it! -Miles