Подтвердить что ты не робот

Исправить, чтобы получить гладкую прокрутку в emacs?

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

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

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

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

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

UPDATE: приведенное выше поведение - это то, что я получаю, когда запускаю emacs на Win7/64. На той же машине, когда я запускаю emacs внутри виртуальной виртуальной виртуальной машины, работающей под Ubuntu 10.04, нет никакой проблемы с получением прокрутки, которая отлично работает даже при удерживании клавиш курсора.

4b9b3361

Ответ 1

У меня была такая же проблема! Пробовал все настройки прокрутки *, не помогал при удерживании стрелки вниз. Но нашел это на 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)

Ответ 2

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

(setq scroll-conservatively 10)
(setq scroll-margin 7)

Ответ 3

Попробуйте следующее:

;; 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)

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

Ответ 4

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

(setq scroll-conservatively 0)

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

Ответ 5

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

Ответ 6

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

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

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


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

(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
 )

Ответ 7

Я могу прокрутить только одну строку с помощью 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)))