emacs scroll elisp

Deja que Emacs mueva el cursor fuera de la pantalla



scroll elisp (3)

A juzgar por el contexto y la descripción de su problema, parece que desea navegar por el búfer mientras conserva su lugar de edición. Hay al menos dos trucos para ese propósito: marcas / registros y división en dos ventanas.

https://stackoverflow.com/a/3777598/308668 describe los registros de Emacs que actúan como las marcas de Vim. Puede verificar su ubicación en el archivo con la clave Cx r SPC a (es una letra de su elección) y siempre puede regresar con Cx rja .

Se logra algún tipo de automatización mediante un script externo ( goto-last-change.el ), que se describe aquí: https://superuser.com/a/184402/49046 .

Alternativamente, dividir la ventana en dos con Cx 2 . Las ventanas recién divididas muestran la misma ubicación y puede utilizar la otra para explorar. Cx 0 cierra una ventana cuando hayas terminado.

¿Es posible permitir que Emacs mueva el cursor fuera de la pantalla, como la mayoría de los editores de texto GUI funcionan? Esta es una de las cosas más importantes que me molesta cuando uso Emacs sobre cualquier editor de GUI. Cuando me desplazo hacia abajo, el cursor se "empuja hacia delante" por la parte superior del búfer.

Anteriormente había pensado que esto era completamente imposible, ya que está integrado en la arquitectura de Emacs, pero luego vi multiple-cursors , lo que hace exactamente esto para los cursores secundarios (suponiendo que impida que las funciones de desplazamiento actúen en el secundario). cursores). ¿Es posible usar múltiples cursores para tener el cursor principal en algún búfer oculto, y el cursor efectivo es con lo que realmente edito? ¿O tal vez algún otro truco inteligente? ¿O tal vez mi googlear me ha fallado y esto es realmente posible sin ninguna magia?


Estrictamente, hablando, no puedes mover el cursor fuera de la pantalla, porque el código C subyacente no te permitirá hacerlo.

Dicho esto, sospecho que su problema puede ser solucionado. Básicamente, hay 2 aspectos:

  • no te gusta cómo se ven las cosas cuando "el cursor se empuja hacia adelante". Se podría evitar eso haciendo (temporalmente) el cursor invisible.
  • desea "saltar hacia atrás" a la posición de desplazamiento previo tan pronto como emita un comando de no desplazamiento. Probablemente haya algún paquete por ahí que lo haga por ti, pero puedes hacerlo tú mismo con un poco pre-command-hook piratería pre-command-hook .

Por cierto, agradecería los parches en Emacs que proporcionan parte de esa funcionalidad. Odio el comportamiento de "salto automático" de otros editores, pero sería bueno registrar la posición de "desplazamiento previo" y luego ofrecer una manera de volver a él.


Hay un nuevo paquete disponible en GNU ELPA llamado scroll-restore que intenta solucionar este problema. Hasta ahora, me he encontrado con algunos errores, pero el paquete parece funcionar como se anuncia en su mayor parte.

Puedes probarlo instalando con

M-x package-install RET scroll-restore RET

Después de instalar el paquete, puede habilitar el modo menor con

M-x scroll-restore-mode

Personalmente, lo estoy vinculando a la tecla de bloqueo de desplazamiento porque me parece increíblemente apropiado. Esto es lo que estoy agregando a mi archivo de inicio:

(require ''scroll-restore) (scroll-restore-mode 1) ;; Allow scroll-restore to modify the cursor face (setq scroll-restore-handle-cursor t) ;; Make the cursor invisible while POINT is off-screen (setq scroll-restore-cursor-type nil) ;; Jump back to the original cursor position after scrolling (setq scroll-restore-jump-back t) ;; Toggle scroll-restore-mode with the Scroll Lock key (global-set-key (kbd "<Scroll_Lock>") ''scroll-restore-mode)

Esta es una copia directa de una respuesta publicada aquí: https://emacs.stackexchange.com/a/2273/93