Płynne przewijanie (myszą) w przypadku obrazów wbudowanych?

23

Wyświetlam obrazy w jednej linii z blokami begin_src i wyników.

Jednak w przypadku dużych obrazów, kiedy przewijam obok dolnej krawędzi obrazu, pojawia się „szarpnięcie” i cały obraz jest przewijany. Podobnie, jeśli przewijam w górę i wpadam na obraz, szarpię się i widzę cały obraz, zamiast stopniowo, stopniowo.

Utrudnia to pracę z dużymi diagramami plantuml / graphviz w trybie org.

Chciałbym płynnego scollowania, aby delikatnie przewijać obraz jak w przeglądarce, bez szarpania.

Próbowałem:

(setq auto-window-vscroll nil)

i również

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

Próbowałem również pakietu płynnego przewijania i tego fragmentu .

Wydaje się jednak, że obraz w wierszu zajmuje tylko „jedną linię”, a ustawienie emacsa do przewijania tylko za pomocą „jednej linii” nie rozwiązuje problemu.

Jakieś rozwiązanie tego problemu?

[edytuj] Przewijanie klawiatury vs myszy:

Sugerowane jest przewijanie myszy. Przewijanie klawiatury byłoby jednak zaletą, gdyby działało prawidłowe przewijanie myszą.

[edytuj]
Nieco obejściem, ale przydatne do pracy z obrazami w trybie organizacji było otwarcie ich w zewnętrznej aplikacji, która automatycznie ładuje się ponownie po zmianie pliku. Przykładem może być eog (eye of gnome)lub shutterlub prievew (on OS X). Można to skonfigurować poprzez org-file-appsdodanie:

extension: \.png\'
Command:   eog "%s"
Lew Ufimcew
źródło
Czy używasz przewijania za pomocą klawiatury lub myszy?
mankoff
przewijanie myszy, dziękuję za wyjaśnienie.
Leo Ufimcew
Może wymagać poprawki do emacsa. Wiem o funkcjach / zaletach portu specyficznego dla komputerów Mac: płynne przewijanie: github.com/railwaycat/emacs-mac-port/blob/master/README-mac Ale nawet to tylko mysz. Klawiatury poruszają się po liniach, a obrazy mają tylko jedną linię wysokości ...
mankoff
Byłoby miło mieć taką łatkę ...
Leo Ufimcew
Co powiesz (setq scroll-conservatively 101)na wszystkie pozostałe ustawienia przewijania wymienione w powyższym pytaniu i skomentuj je, a także wyłącz ten pakiet płynnego przewijania i / lub fragment kodu? Ciąg dokumentów dla scroll-conservativelystanów: „ Jeśli wartość jest większa niż 100, ponowne wyświetlenie nigdy nie będzie ponownie punktować punktu, ale zawsze przewinie tylko tyle tekstu, aby wyświetlić punkt, nawet jeśli odsuniesz się daleko. Wartość zero oznacza zawsze punkt odniesienia jeśli
zejdzie

Odpowiedzi:

7

Od Emacsa 26.1 bufor można przewijać pojedynczymi pikselami zamiast tylko linii, których można użyć do płynnego przewijania obrazów za pomocą kółka myszy. Aby to osiągnąć, użyłem następującej konfiguracji:

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

Edytować:

Przekonałem się, że to rozwiązanie ma kilka zastrzeżeń, które mogą być pomocne, aby wiedzieć:

  • Przewijanie obrazu wyższego niż okno nadal spowoduje duży wstrząs, który powoduje przewijanie okna, aż obraz nie będzie już widoczny (następny wiersz znajduje się na górze okna).
  • Nie można sprawić, by przewijanie było natychmiastowe (mniej intensywne), ale nadal przewija się pikselami zamiast liniami.
  • Po wydaniu nowego zdarzenia przewijania przed zakończeniem istniejącej animacji okno przeskakuje na początek następnej animacji, powodując nieciągłość płynnego przewijania.
  • Wiele osób doświadczyło takiego pogorszenia wydajności przy użyciu tej metody, że po prostu nie można jej użyć. Najwyraźniej jest to powszechne, gdy stosuje się pewne modyfikacje linii trybu.
Matthew Palermo
źródło
Nie musisz go używać, (require 'pixel-scroll)ponieważ pixel-scroll-modejest ładowany automatycznie.
Tobias
Ach tak, masz rację. Po prostu postępowałem zgodnie z instrukcjami w ciąg dokumentacji w pixel-scroll.el, ale myślę, że są one dla nieco innej publiczności.
Matthew Palermo
1

Co powiesz na to:

;; 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
źródło
1

Problem, jaki rozumiem, polega na tym, że obraz jest pojedynczą linią. Zmiana sposobu przewijania nie rozwiąże problemu.

Jedyne znane mi rozwiązanie polega na pocięciu obrazu tak, aby technicznie było o wiele krótszych obrazów. Można to zrobić za pomocą insert-sliced-image.

Ista
źródło
Czy możesz opracować sposób użycia insert-sliced-image? Czy można przesłonić, org-toggle-inline-imagesaby je najpierw pokroić?
Adam
Możesz przeczytać insert-sliced-image, oceniając (describe-function 'insert-sliced-image)- nie mam żadnego przydatnego opracowania, które można by dodać do dokumentacji. Przejrzałem org-display-inline-imageskod, ale nie rozumiem, gdzie faktycznie wstawiono obrazy. Jestem pewien, że można go ponownie napisać, aby użyć insert-sliced-image, ale nie wiem, jak to zrobić.
Ista