Incluso usando la configuración predeterminada ( emacs -Q
) he encontrado que los archivos C grandes pueden ser lentos para desplazarse con Emacs.
Si, por ejemplo, abro un archivo grande y lo sostengo Page-Down. Se desplazará hacia abajo 1-2 páginas, luego se colgará por un segundo o dos, al soltar el documento se desplazará muchas páginas hacia abajo (20 páginas más o menos). * *
Sé que Emacs es capaz de tener un comportamiento menos errático porque si toco rápidamente page down, se las arregla para mantenerse al día y no se cuelga como antes.
¿Es posible que Emacs no intente manejar múltiples eventos a la vez, y en su lugar redibuje entre eventos?
¿O de alguna manera se vuelve más receptivo en lugar de colgar mientras intenta procesar muchos eventos?
* La desaceleración real en este caso es causada por el resaltado de sintaxis, ya que si desplazo todo el documento una vez, después de todo, el desplazamiento es rápido. He examinado diferentes opciones relacionadas con el bloqueo de fuentes y he llegado a la conclusión de que los valores predeterminados de bloqueo de fuentes son razonables y ajustarlos no resuelve el problema, mencioné esto ya que ya lo he investigado y no creo que sea una parte importante de esto. pregunta.
fuente
emacs -Q
para descartarlo), o podría ser que su disco es muy lento. También puede intentar desactivar el resaltado de sintaxis u otro comportamiento útil (coloque el búfer en modo fundamental).Respuestas:
Como notó, esto sucede básicamente cuando la visualización es demasiado lenta por alguna razón. No hay mucho que podamos hacer en el caso general (cuando es "demasiado lento"), pero cuando es "un poco demasiado lento" puede intentar uno de esos (o ambos, aunque probablemente no haga nada más que solo uno de los dos):
Tenga en cuenta que ambos son nuevos en Emacs-25.
fuente
fast-but-imprecise-scrolling
dice " Cuando no sea nulo, acelere las operaciones de desplazamiento " . Quizás el ejemplo debería reflejar un valor no nulo, ya que eso aceleraría el desplazamiento.Una cosa que puede hacer es pasar un argumento de prefijo numérico al comando de desplazamiento, en lugar de simplemente presionar y mantener presionada su tecla para invocarlo repetidamente.
Por ejemplo, si está usando la
<next>
tecla (akaPageDown
), entonces el comando que invoca esscroll-up-command
. YC-h f scroll-up-command
le dice que un prefijo numérico arg dice que se desplace tantas líneas.Por ejemplo: suponga que su búfer tiene 50,000 líneas y el cursor está en la parte superior (en la primera línea). Si lo hace
C-u 25000 <next>
, se desplazará hasta la mitad del búfer (25,000 líneas).Todavía habrá una pausa, pero será algo más corta.
Otra posibilidad es moverse hacia abajo por un cierto número de cosas grandes de Emacs. Si su búfer separa secciones de texto usando caracteres
^L
(Control-L, formulario-alimentación), entonces puede usar los comandos de navegación de página, comoforward-page
, que está vinculadoC-x ]
. Nuevamente, puede pasarle un argumento de prefijo numérico para avanzar tantas páginas a la vez. Si no hay^L
caracteres, puede usarforward-paragraph
(C-<down>
)forward-line
u otro comando de movimiento con un prefijo arg.Del mismo modo, puede usar el comando
goto-line
(M-g M-g
) para ir a un número de línea en particular. (Elija un número grande). El comandowhat-line
le indica cuál es el número de línea actual (también puede mostrarlo en la línea de modo). (loM->
lleva al final del búfer, dondeM-x what-line
le indicará cuántas líneas hay en total).(Agregado después de su comentario sobre desnatado hasta que vea esto o aquello). Utilice la búsqueda incremental para la navegación. Busque algo cerca de donde desea desplazarse, utilizando
C-s
o (para la búsqueda de expresiones regulares)C-M-s
.Si usa la biblioteca Isearch + , también puede incorporar predicados arbitrarios en su búsqueda, sobre la marcha.
Es decir, no necesita buscar utilizando solo la coincidencia de patrones. Podría, por ejemplo, buscar (1) coincidir con un patrón que seleccione un bloque de comentarios completo o una
switch
declaración completa , y (2) requerir que la coincidencia tenga un cierto tamaño (número de caracteres).Isearch + también le permite buscar coincidencias con múltiples patrones o buscar una coincidencia con un patrón dentro de una distancia dada a ("cerca") una coincidencia para otro patrón (donde la distancia se mide en caracteres, palabras, sexps, listas, oraciones. ..)
fuente
Publicar esto ya que es una solución débil pero mejor que nada.
En lugar de cambiar todo el comportamiento de emacs, es posible escribir funciones que obligan a redibujar después de cada operación, lo que evita el bloqueo y hace que el desplazamiento responda mejor a la página arriba / abajo y la rueda del mouse.
fuente