2010-09-02 20 views
34

Tengo ganas de usar Emacs, sobre todo por el modo org, pero me cuesta mucho acostumbrarme al comportamiento de desplazamiento brusco. Sé que este es un problema/excentricidad bien conocido de Emacs y que hay varias maneras de minimizar las sacudidas cuando se desplaza. Pero nada de lo que he intentado hasta ahora funciona muy bien.se corrige para obtener un desplazamiento suave en emacs?

Las principales sugerencias que he visto son (setq scroll-conservatively 10000) o para utilizar la solución más completa disponible en smooth-scrolling.el. Creo que ambas cosas pueden funcionar bien para mí, pero ambas fallan miserablemente cuando mantengo presionadas las teclas de flecha hacia arriba y hacia abajo para que las repeticiones se desplacen hacia arriba o hacia abajo. Cuando hago esto, la pantalla se congela y veo que la barra de indicadores de desplazamiento en el margen de desplazamiento se mueve hacia arriba o hacia abajo. La pantalla no se actualiza hasta que dejo de mantener presionada la tecla de flecha hacia arriba o hacia abajo.

Si presiono repetidamente la flecha hacia arriba o hacia abajo, obtengo un comportamiento cercano al que deseo, es decir, la pantalla se desplaza suavemente y la tecla del cursor no se restablece al centro de la pantalla. Pero esto es indeseable porque (1) requiere repetidas pulsaciones de tecla y (2) Supongo que el desplazamiento es a un ritmo más lento de lo que debería ser capaz de obtener en una mejor solución.

Parece que el problema de mantener presionadas las teclas del cursor es que la velocidad de repetición de la flecha hacia arriba o hacia abajo es tan rápida que activa emacs para detener la actualización de la pantalla hasta que se suelte la tecla. Me pregunto si una posible solución para mí sería agregar algo de retraso en la tasa de repetición de tecla o la velocidad a la que se llama a la función de línea siguiente/anterior en emacs.

No he visto esto reportado como un problema por otros y me pregunto si otras personas han experimentado el mismo comportamiento. ¿Cuál es la mejor manera de arreglar las cosas para poder mantener presionadas las teclas de flecha arriba/abajo y tener una velocidad de repetición lo suficientemente lenta para que la pantalla no se congele?

ACTUALIZACIÓN: El comportamiento anterior es el que obtengo cuando ejecuto emacs en Win7/64. En la misma máquina cuando ejecuto emacs dentro de una VirtualBox VM que ejecuta Ubuntu 10.04, no hay problema para obtener el desplazamiento que funciona bien incluso cuando las teclas del cursor se mantienen presionadas.

+0

El gran valor de 'scroll-conservatively' trabajó para resolver esto por mí ... tal vez el equipo es más lento que el teclado? :) –

+0

Trey - Gracias, me preguntaba si ese podría ser el caso. Entonces parece que necesitaré un paso más para obtener un desplazamiento suave. Mi computadora no es una máquina monstruosa, pero no la llamaría lenta; es una computadora portátil con un Pentium SU4100, un chip de 1.3GHz de doble núcleo y 4GB de RAM. –

+0

por favor, ¿podría decirnos si tiene emacs en Windows, Un * x, si está en una ventana de terminal (-nw) dentro de un entorno de escritorio como gnome o fuera de una GUI (pantalla)? –

Respuesta

40

¡Tuve el mismo problema! Intenté todas las configuraciones de scroll- *, no me ayudó cuando mantuve presionada la flecha hacia abajo. Pero encontrado esto en gnu.emacs.help que finalmente funcionó (al menos para mí):

(setq redisplay-dont-pause t)

Esto es lo que tengo en.emacs por ahora:

(setq redisplay-dont-pause t 
    scroll-margin 1 
    scroll-step 1 
    scroll-conservatively 10000 
    scroll-preserve-screen-position 1) 
+2

+1; encontró el mismo problema que OP en una máquina Win7 x64 bastante poderosa; esta solución hace que el desplazamiento sea tolerable (aunque no tan bueno como en otras plataformas con desplazamiento suave habilitado). –

+1

¡GRACIAS! Acabo de notar su sugerencia en este hilo y de hecho me funciona. –

+1

También necesitaba (setq-default scroll-up-agresivamente 0.01 scroll-down-agresivamente 0.01) para hacer las cosas razonables (ver http://zhangda.wordpress.com/2009/05/21/customize-emacs-automatic- scrolling-and-stop-the-cursor-from-jumping-around-as-i-move-it /) –

6

scroll-conservatively ayuda, pero también me gusta un margen para que pueda ver lo que se viene como un pergamino: mantiene el contexto en la pantalla para mí. Estas configuraciones me han funcionado bien para una gran variedad de computadoras durante algunos años:

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

Gracias, pero he experimentado con diferentes valores de scroll-conservatively y scroll-margin y no solucionan el problema. El desplazamiento es lo suficientemente suave si presiono discretamente la tecla del cursor para cada movimiento hacia arriba o hacia abajo, pero si mantengo presionada la tecla del cursor, la pantalla se congela mientras el indicador de desplazamiento muestra la posición moviéndose a través del archivo. La pantalla no se actualiza hasta que quite el dedo de la tecla. –

+0

Sí, me di cuenta de que dijiste eso en tu publicación ... He utilizado estos ajustes en GNU Emacs en todo, desde un netbook Atom que ejecuta Ubuntu hasta un Core 2 Duo que ejecuta OS X y un escritorio de cuatro núcleos Windows en el trabajo. ¿Qué marca y construcción de Emacs estás usando? –

+0

Estoy ejecutando esto en Windows 7 de 64 bits: GNU Emacs 23.1.50.1 (i386-mingw-nt6.1.7600) de 2009-11-03 en LENNART-69DE564 (parcheado). Tendría que comprobar, pero estoy bastante seguro de que tengo el mismo comportamiento en mis otras computadoras, que incluyen una netbook atómica y varios otros portátiles. –

2

Este comportamiento no se encuentra en todas las plataformas. Para aquellas plataformas que plantean un problema, yo recomendaría usar este ajuste:

(setq scroll-conservatively 0) 

Se coloca el cursor en el centro de la pantalla cada vez que se desplaza a otra página.

+2

Esa es la configuración predeterminada en todas las plataformas, creo. El problema es que ni siquiera se desplaza, la pantalla simplemente salta media página cuando llegas al fondo.Tal vez las personas que han usado emacs durante años aceptan esto como la forma en que funcionan las cosas, pero es diferente de prácticamente cualquier otro editor. Se desplazan otros editores de texto (y otras aplicaciones, como navegadores y procesadores de texto). Hacer que la ventana del búfer se mueva repentinamente media pantalla es inquietante y no es fácil de usar. –

1

Estoy muy contento con Adam Spires 'smooth-scrolling, como sugirió rpdillon. Pensé que merece una respuesta propia.

+0

También he probado smooth-scrolling.el, como dije en la publicación original. No funciona mejor para mí que la solución scroll-conservatively. –

+0

Lo siento, lo he pasado por alto. –

4

Prueba esto:

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

Y el uso de pager.el.

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

Eso es lo que quiero :) ¡Disfrútalo!

0

puedo desplazarse por una sola línea con M-Arriba/Abajo-M mediante la adición de esto a mis .emacs:

(global-set-key (kbd "M-<down>") (lambda() (interactive) (scroll-up 1))) 
(global-set-key (kbd "M-<up>") (lambda() (interactive) (scroll-down 1))) 
1

Tenga en cuenta que esto no se menciona en ninguna parte aquí, pero he encontrado para archivos más grandes Terminé encontrándome con un retraso irritante, donde el desplazamiento se pondría detrás de la actualización de la fuente.

Esto se basa en que el redibujado no es por lo que es lento porque el sistema se queda muy atrás en su actualización.

Ver this question para más detalles.


Estos ajustes funcionado bien para mí:

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