исправить, чтобы получить плавную прокрутку в Emacs? - PullRequest
38 голосов
/ 03 сентября 2010

Я обнаружил, что хочу использовать Emacs, в основном из-за режима org, но у меня много проблем с привыканием к прерывистому режиму прокрутки. Я знаю, что это хорошо известная проблема / эксцентричность Emacs, и что существуют различные способы минимизировать рывки при прокрутке. Но ничто из того, что я пробовал, пока не работает очень хорошо.

Основные предложения, которые я видел, это (setq scroll-консервативно 10000) или использование более полного исправления, доступного в smooth-scrolling.el. Я думаю, что оба из них могут работать хорошо для меня, но оба с треском проваливаются, когда я нажимаю клавиши со стрелками вверх и вниз, чтобы получить повторную прокрутку вверх или вниз. Когда я делаю это, экран останавливается, и я вижу полосу индикатора прокрутки на полях прокрутки вверх или вниз. Экран не обновляется до тех пор, пока я не перестану удерживать клавишу со стрелкой вверх или вниз.

Если я многократно нажимаю стрелку вверх или стрелку вниз, то поведение получается близким к желаемому, то есть экран плавно прокручивается и клавиша курсора не сбрасывается в середину экрана. Но это нежелательно, потому что (1) это требует повторных нажатий клавиш и (2) я предполагаю, что прокрутка происходит медленнее, чем то, что я мог бы получить в лучшем решении.

Мне кажется, что проблема с удерживанием клавиш управления курсором заключается в том, что частота повторения стрелок вверх или вниз настолько высока, что запускает emacs, чтобы остановить обновление экрана до отпускания клавиши. Интересно, возможно ли для меня исправить это добавлением некоторого лага к частоте повторения клавиш или скорости, с которой вызывается функция следующей / предыдущей строки в emacs.

Я не видел, чтобы другие сообщали об этом как о проблеме, и мне интересно, испытывали ли другие люди такое же поведение. Какой лучший способ исправить ситуацию, чтобы я мог удерживать клавиши со стрелками вверх / вниз и иметь частоту повторения, достаточно медленную, чтобы экран не зависал?

ОБНОВЛЕНИЕ: вышеописанное поведение - то, что я получаю, когда запускаю emacs на Win7 / 64. На той же машине, когда я запускаю emacs внутри виртуальной машины VirtualBox с Ubuntu 10.04, нет проблем с прокруткой, которая прекрасно работает, даже когда клавиши курсора удерживаются.

Ответы [ 7 ]

45 голосов
/ 12 ноября 2010

У меня была такая же проблема! Перепробовал все настройки scroll- *, не помогло при удерживании стрелки вниз. Но нашел это на gnu.emacs.help , что в итоге сработало (по крайней мере для меня):

(setq redisplay-dont-pause t)

Это то, что у меня есть в .emacs сейчас:

(setq redisplay-dont-pause t
  scroll-margin 1
  scroll-step 1
  scroll-conservatively 10000
  scroll-preserve-screen-position 1)
6 голосов
/ 03 сентября 2010

scroll-conservatively помогает, но мне также нравится поле, чтобы я мог видеть то, что выглядит как свиток - он сохраняет контекст на экране для меня.Эти настройки работали для меня на самых разных компьютерах в течение нескольких лет:

(setq scroll-conservatively 10)
(setq scroll-margin 7)
5 голосов
/ 24 ноября 2014

Попробуйте это:

;; scroll one line at a time (less "jumpy" than defaults)
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ; one line at a time
(setq mouse-wheel-progressive-speed nil)            ; don't accelerate scrolling
(setq-default smooth-scroll-margin 0)
(setq scroll-step 1
      scroll-margin 1
      scroll-conservatively 100000)

И используйте pager.el.

;; Pager
(require 'pager-default-keybindings)

Вот чего я хочу :) Наслаждайтесь!

2 голосов
/ 18 марта 2017

Обратите внимание, что здесь это нигде не упоминается, но я обнаружил, что для больших файлов я столкнулся с некоторой раздражающей задержкой, из-за которой прокрутка могла бы привести к обновлению шрифта.

Это зависит от перерисовки, не являющейся настолько медленно, что система слишком сильно отстает в своем обновлении.

Подробнее см. этот вопрос .


Эти настройки хорошо сработали для меня:

(setq
 scroll-conservatively 1000                     ;; only 'jump' when moving this far
 scroll-margin 4                                ;; scroll N lines to screen edge
 scroll-step 1                                  ;; keyboard scroll one line at a time
 mouse-wheel-scroll-amount '(6 ((shift) . 1))   ;; mouse scroll N lines
 mouse-wheel-progressive-speed nil              ;; don't accelerate scrolling

 redisplay-dont-pause t                         ;; don't pause display on input

 ;; Always redraw immediately when scrolling,
 ;; more responsive and doesn't hang!
 fast-but-imprecise-scrolling nil
 jit-lock-defer-time 0
 )
2 голосов
/ 03 сентября 2010

Такое поведение встречается не на всех платформах. Для тех платформ, которые создают проблемы, я бы рекомендовал использовать этот параметр:

(setq scroll-conservatively 0)

Он помещает курсор в середину экрана при каждом переходе на другую страницу.

1 голос
/ 03 сентября 2010

Я очень доволен плавной прокруткой Адама Спирса , как предложил rpdillon. Я думал, что это заслуживает отдельного ответа.

0 голосов
/ 11 августа 2016

Я могу прокрутить только одну строку с помощью M-Up / M-Down, добавив это в мой .emacs:

(global-set-key (kbd "M-<down>") (lambda () (interactive) (scroll-up   1)))
(global-set-key (kbd "M-<up>")   (lambda () (interactive) (scroll-down 1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...