C-M-@ is bound to `#'mark-sexp`. This command works incrementally -- that is, calling this once marks the sexp after point; calling it again marks one more sexp (in total, the two sexps after point). It would be convenient to easily be able to mark sexps backwards as well. If you've already marked sexps backwards, mark-sexp extends the region backwards. But if you haven't, the only way to mark backwards is to pass a negative prefix argument. It often is a better experience to iteratively select the sexps you want. Finally, there's no way to mark both directions, e.g., one sexp forward and two backwards. Attached is a patch to add #'mark-sexp-forwards and #'mark-sexp-backwards. These functions extend the region by sexps forward and backward. They are mutually incremental: you can call mark-sexp-fowards, then mark-sexp-backwards twice, then mark-sexp-forwards. After this, the region will consist of the two sexps before point and the two sexps after point. These functions are very similar to #'mark-sexp: - They will extend the region if it already exists. - They can be called from lisp code with a numeric argument. - They can take a prefix argument if called interactively. Thanks, Zachary Kanfer