emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: recenter-top-bottom


From: Lennart Borgman (gmail)
Subject: Re: recenter-top-bottom
Date: Wed, 07 Nov 2007 22:54:06 +0100
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070728 Thunderbird/2.0.0.6 Mnenhy/0.7.5.666

Lennart Borgman (gmail) wrote:
(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)))


I do not understand why, but this version works better:

(defun put-back-read-key-sequence (keys)
  (when keys
    (when (stringp keys)
      (setq keys (string-to-char keys)))
    (when (vectorp keys)
      (setq keys (append keys nil)))
    (isearch-unread keys)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]