M-v following C-v doesn't move the cursor back to the original position. Why is that? Can we make it happen?
You can try setting
(setq scroll-preserve-screen-position 'always)
From the documentation (
C-h v scroll-preserve-screen-position):
Controls if scroll commands move point to keep its screen position unchanged. A value of
nilmeans point does not keep its screen position except at the scroll margin or window boundary respectively. A value of
tmeans point keeps its screen position if the scroll command moved it vertically out of the window, e.g. when scrolling by full screens. Any other value means point always keeps its screen position. Scroll commands should have the
scroll-commandproperty on their symbols to be controlled by this variable.