Défilement lisse (souris) pour les images en ligne?

23

J'affiche des images en ligne avec begin_src et les blocs de résultats.

Cependant, pour les images de grande taille, lorsque je défile au- dessous du bas de l'image, j'obtiens une «secousse» et l'image entière est défilée. De même, si je fais défiler vers le haut et que je tombe sur une image, j'obtiens une secousse et je vois l'image entière au lieu de la voir progressivement, petit à petit.

Il est donc difficile de travailler avec de grands diagrammes plantuml / graphviz en mode org.

Je voudrais une expérience de défilement fluide, pour faire défiler doucement l'image comme dans un navigateur Web, sans secousses.

J'ai essayé:

(setq auto-window-vscroll nil)

et aussi

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

J'ai essayé le package smooth-scroll et cet extrait également.

Cependant, il semble qu'une image en ligne ne prenne que «une ligne» et la fixation d'emacs pour faire défiler uniquement par «une ligne» ne résout pas le problème.

Une solution à ce problème?

[modifier] Défilement clavier vs souris:

Le défilement de la souris est implicite. Mais le défilement du clavier serait un bonus si le bon défilement de la souris fonctionnait.

[edit]
Une solution de contournement, mais utile pour travailler avec des images en mode org était de les ouvrir dans une application externe qui se recharge automatiquement en cas de changement de fichier. L'exemple serait eog (eye of gnome)ou shutterou prievew (on OS X). Il peut être configuré via org-file-appsen ajoutant:

extension: \.png\'
Command:   eog "%s"
Leo Ufimtsev
la source
Faites-vous défilement au clavier ou à la souris?
mankoff
défilement de la souris, merci pour la clarification.
Leo Ufimtsev
Peut nécessiter un patch pour emacs. Je connais les fonctionnalités / avantages du port spécifique à Mac: le défilement fluide : github.com/railwaycat/emacs-mac-port/blob/master/README-mac Mais même cela n'est que souris. Les claviers se déplacent par lignes et les images n'ont qu'une ligne de haut ...
mankoff
Ce serait bien d'avoir un patch comme ça ...
Leo Ufimtsev
Que diriez-vous (setq scroll-conservatively 101)et commentez tous vos autres paramètres de défilement mentionnés dans la question ci-dessus et désactivez ce package de défilement fluide et / ou d'extrait? La doc-string pour les scroll-conservativelyétats: " Si la valeur est supérieure à 100, le réaffichage ne sera jamais plus récent, mais fera toujours défiler juste assez de texte pour mettre le point en vue, même si vous vous éloignez. Une valeur de zéro signifie toujours un point plus récent s'il sort de l'écran. "
lawlist

Réponses:

7

Depuis Emacs 26.1, le tampon peut être parcouru par des pixels individuels au lieu de seulement des lignes qui peuvent être utilisées pour faire défiler les images en douceur à l'aide de la molette de la souris. Pour ce faire, j'ai utilisé la configuration suivante:

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

Modifier:

J'ai trouvé que cette solution comporte quelques mises en garde qui pourraient être utiles à savoir:

  • Faire défiler une image au-dessus de la fenêtre provoquera toujours le grand saut discordant qui voit la fenêtre défiler jusqu'à ce que l'image ne soit plus visible (la ligne suivante est en haut de la fenêtre).
  • Vous ne pouvez pas faire le défilement instantané (moins intensif), mais vous faites toujours défiler en pixels plutôt qu'en lignes.
  • Lorsqu'un nouvel événement de défilement est émis avant la fin de l'animation existante, la fenêtre passe au début de l'animation suivante, provoquant une discontinuité dans le défilement fluide.
  • Beaucoup de gens ont connu une telle dégradation des performances en utilisant cette méthode qu'elle n'est tout simplement pas utilisable. Apparemment, cela est courant lorsque certaines modifications de ligne de mode sont utilisées.
Matthew Palermo
la source
Vous ne devriez pas en avoir besoin (require 'pixel-scroll)car il pixel-scroll-modeest automatiquement chargé.
Tobias
Ah oui, tu as raison. Je suivais simplement les instructions de la chaîne de documentation dans pixel-scroll.el mais je suppose qu'elles s'adressent à un public légèrement différent.
Matthew Palermo
1

Que dis-tu de ça:

;; 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
la source
1

Le problème que je comprends est que l'image est une seule ligne. Changer le comportement du défilement ne résoudra pas le problème.

La seule solution que je connaisse est de découper l'image de manière à ce qu'il y ait techniquement beaucoup d'images plus courtes. Cela peut être fait en utilisant insert-sliced-image.

Ista
la source
Pouvez-vous nous en dire plus sur l'utilisation de insert-sliced-image? Est-il possible de passer outre org-toggle-inline-imagespour les découper en premier?
Adam
Vous pouvez en savoir plus sur l' insert-sliced-imageévaluation (describe-function 'insert-sliced-image)- je n'ai pas d'élaboration utile à ajouter à la documentation. J'ai parcouru le org-display-inline-imagescode mais je ne comprends pas où les images sont réellement insérées. Je suis sûr qu'il est possible de le réécrire pour l'utiliser insert-sliced-image, mais je ne vois pas comment le faire.
Ista