(defun recenter-top-bottom (&optional arg)
"Move current line to window center, top, and bottom, alternately.
With prefix ARG, move current line to window-line ARG.
Otherwise if the key sequence that invoked this command is
repeated within `cua-prefix-override-inhibit-delay' then current
line is moved to top, or if repeated again, bottom."
(interactive "P")
(if arg
(recenter arg)
(let* ((cmd-keys (this-command-keys))
(delay 2);cua-prefix-override-inhibit-delay)
(keys (with-timeout (delay nil) (read-key-sequence nil))))
(if (equal cmd-keys keys)
(let ((keys (with-timeout (delay nil) (read-key-sequence nil))))
(if (equal cmd-keys keys)
(recenter -1)
(recenter 0)
(put-back-read-key-sequence keys)))
(recenter)
(put-back-read-key-sequence keys)))))
(defun put-back-read-key-sequence (keys)
(when keys
(when (vectorp keys)
(setq keys (append keys nil)))
(isearch-unread keys)))