2013-04-05 2 views
1

Можно легко нанести несколько клавиш для прокрутки вверх.Прокрутка клавиатуры с ускорением

(defun up1() 
    (interactive) 
    (scroll-up 1)) 
(defun up2() 
    (interactive) 
    (scroll-up 2)) 
(global-set-key "\M-]" 'up2) 

Я ищу вместо этого для следующего поведения. Первая горстка свитков вызовет up1(), а последующие вызовут up2().

ответ

1

Как об этом:

(setq my-scroll-counter 0) 
(setq my-scroll-limit 5) 

(defun up1() 
    (interactive) 
    (if (eq last-command this-command) 
     (incf my-scroll-counter) 
    (setq my-scroll-counter 0)) 
    (if (> my-scroll-counter my-scroll-limit) 
     (scroll-up 2) 
    (scroll-up 1))) 

(global-set-key "\M-]" 'up1) 

Если вы хотите что-то немного любитель, вы рассчитать шаг прокрутки динамически в зависимости от того, сколько раз вы повторите команду:

(setq my-scroll-counter 0) 
(setq my-maximum-scroll 20) 
(setq my-scroll-acceleration 4) 

(defun up1() 
    (interactive) 
    (if (eq last-command this-command) 
     (incf my-scroll-counter) 
    (setq my-scroll-counter 0)) 
    (scroll-up (min 
       (+ 1 (/ my-scroll-counter my-scroll-acceleration)) 
       my-maximum-scroll))) 

(global-set-key "\M-]" 'up1) 
+0

Не совсем .. Я хотелось бы, чтобы «ускорение» включалось только при повторении клавиатуры. Идея заключается в том, что если я остановлю прокрутку, это означает, что я хотел бы более внимательно посмотреть на видимый код. – Calaf

+0

Я не понимаю, что вы имеете в виду. Ускорение срабатывает всякий раз, когда вы вызываете up1 больше, чем 'my-scroll-limit' раз в строке без другой команды между ними. Что означает «в повторении клавиатуры»? – Tyler

+0

Если вы нажмете клавишу клавиатуры, будет введен только один экземпляр, но если вы удерживаете его, клавиша повторится и вы получите несколько экземпляров. Если я держу \ M-], мне бы хотелось, чтобы прокрутка была первоначально медленной, но затем ускорялась. Если я остановлюсь, я бы хотел, чтобы такое же поведение перезапустилось. – Calaf

Смежные вопросы