Desplazamiento suave (mouse) para imágenes en línea?

23

Muestro imágenes en línea con los bloques begin_src y result.

Sin embargo, para imágenes grandes, cuando me desplazo más allá de la parte inferior de la imagen, obtengo un 'tirón' y toda la imagen se desplaza hacia afuera. Del mismo modo, si me desplazo hacia arriba y me encuentro con una imagen, me da un tirón y veo la imagen completa en lugar de verla gradualmente poco a poco.

Esto hace que sea difícil trabajar con grandes diagramas plantuml / graphviz en modo org.

Me gustaría una experiencia de desplazamiento suave, para pasar suavemente la imagen como en un navegador web, sin sacudidas.

Yo he tratado:

(setq auto-window-vscroll nil)

y también

(setq scroll-margin 1
scroll-conservatively 0
scroll-up-aggressively 0.01
scroll-down-aggressively 0.01)

Probé el paquete de desplazamiento suave y este fragmento también.

Sin embargo, parece que una imagen en línea solo ocupa 'una línea' y la fijación de emacs para desplazarse solo por 'una línea' no soluciona el problema.

¿Alguna solución a este problema?

[editar] Desplazamiento de teclado vs mouse:

El desplazamiento del mouse está implícito. Pero el desplazamiento del teclado sería una ventaja si el desplazamiento adecuado del mouse funcionara.

[editar]
Una solución alternativa, pero útil para trabajar con imágenes en modo org era abrirlas en una aplicación externa que se recarga automáticamente al cambiar el archivo. Ejemplo sería eog (eye of gnome)o shuttero prievew (on OS X). Se puede configurar mediante la org-file-appsadición de:

extension: \.png\'
Command:   eog "%s"
Leo Ufimtsev
fuente
¿Estás haciendo desplazamiento basado en el teclado o desplazamiento del mouse?
mankoff
desplazamiento del mouse, gracias por la aclaración.
Leo Ufimtsev
Puede requerir un parche para emacs. Conozco algunas de las características / beneficios del puerto específico de Mac: desplazamiento suave: github.com/railwaycat/emacs-mac-port/blob/master/README-mac Pero incluso eso es solo el mouse. Teclados mueven por líneas, y las imágenes son sólo una línea de alta ...
Mankoff
Sería bueno tener un parche así ...
Leo Ufimtsev
¿Qué tal (setq scroll-conservatively 101)y comentar todas sus otras configuraciones de desplazamiento mencionadas en la pregunta anterior y deshabilitar ese paquete y / o fragmento de desplazamiento suave? La cadena de documentación para los scroll-conservativelyestados: " Si el valor es mayor que 100, la visualización nunca volverá a centrar el punto, pero siempre desplazará solo el texto suficiente para mostrar el punto, incluso si se aleja. Un valor de cero significa siempre un punto de centrador si se mueve fuera de la pantalla " .
ley

Respuestas:

7

Desde Emacs 26.1, el búfer se puede desplazar por píxeles individuales en lugar de solo líneas que se pueden usar para desplazarse suavemente sobre las imágenes con la rueda del mouse. Para lograr esto, he usado la siguiente configuración:

;;; Scrolling.
;; Good speed and allow scrolling through large images (pixel-scroll).
;; Note: Scroll lags when point must be moved but increasing the number
;;       of lines that point moves in pixel-scroll.el ruins large image
;;       scrolling. So unfortunately I think we'll just have to live with
;;       this.
(pixel-scroll-mode)
(setq pixel-dead-time 0) ; Never go back to the old scrolling behaviour.
(setq pixel-resolution-fine-flag t) ; Scroll by number of pixels instead of lines (t = frame-char-height pixels).
(setq mouse-wheel-scroll-amount '(1)) ; Distance in pixel-resolution to scroll each mouse wheel event.
(setq mouse-wheel-progressive-speed nil) ; Progressive speed is too fast for me.

Editar:

He descubierto que esta solución tiene algunas advertencias que pueden ser útiles para saber:

  • Desplazarse sobre una imagen más alta que la ventana aún causará el gran salto discordante que verá el desplazamiento de la ventana hasta que la imagen ya no sea visible (la siguiente línea está en la parte superior de la ventana).
  • No puede hacer que el desplazamiento sea instantáneo (menos intensivo) pero aún así desplazarse por píxeles en lugar de líneas.
  • Cuando se emite un nuevo evento de desplazamiento antes de que finalice la animación existente, la ventana salta al inicio de la siguiente animación causando una discontinuidad en el desplazamiento suave.
  • Muchas personas han experimentado una degradación del rendimiento con este método que simplemente no se puede utilizar. Aparentemente, esto es común cuando se utilizan algunas modificaciones de línea de modo.
Matthew Palermo
fuente
No debería necesitar (require 'pixel-scroll)ya que pixel-scroll-modese carga automáticamente.
Tobias
Ah sí, tienes razón. Solo estaba siguiendo las instrucciones en la cadena de documentación en pixel-scroll.el pero supongo que son para un público ligeramente diferente.
Matthew Palermo
1

Qué tal 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 mouse-wheel-follow-mouse 't) ;; scroll window under mouse
(setq scroll-step 1) ;; keyboard scroll one line at a time
C137
fuente
1

El problema, según tengo entendido, es que la imagen es una sola línea. Cambiar el comportamiento del desplazamiento no resolverá el problema.

La única solución que conozco es cortar la imagen para que técnicamente haya muchas imágenes más cortas. Esto se puede hacer usando insert-sliced-image.

Ista
fuente
¿Puedes dar más detalles sobre el uso de insert-sliced-image? ¿Es posible anular la org-toggle-inline-imagesprimera división de estos?
Adam
Puede leer sobre esto insert-sliced-imageevaluando (describe-function 'insert-sliced-image): no tengo ninguna elaboración útil para agregar a la documentación. Miré a través del org-display-inline-imagescódigo pero no puedo entender dónde se insertan realmente las imágenes. Estoy seguro de que es posible volver a escribirlo para usarlo insert-sliced-image, pero no veo cómo hacerlo.
Ista