Гладкая (мышь) прокрутка для встроенных изображений?

23

Я отображаю изображения в линию с begin_src и блоков результата.

Однако для больших изображений, когда я прокручиваю нижнюю часть изображения, я получаю «рывок», и все изображение прокручивается. Точно так же, если я прокручиваю вверх и сталкиваюсь с изображением, я получаю рывок и вижу все изображение вместо того, чтобы видеть его постепенно по крупицам.

Это затрудняет работу с большими диаграммами plantuml / graphviz в режиме org.

Я хотел бы получить плавную прокрутку, чтобы аккуратно прокрутить изображение, как в веб-браузере, без рывков.

Я пытался:

(setq auto-window-vscroll nil)

а также

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

Я попробовал пакет с гладкой прокруткой и этот фрагмент также.

Тем не менее, кажется, что встроенное изображение занимает только «одну строку», и исправление emacs для прокрутки только «одной строкой» не решает проблему.

Любое решение этой проблемы?

[править] Клавиатура против прокрутки мыши:

Мышь прокрутка подразумевается. Но прокрутка клавиатуры была бы бонусом, если бы работала правильная прокрутка мышью.

[править]
Обходным решением, но полезным для работы с изображениями в режиме org, было открытие их во внешнем приложении, которое автоматически перезагружается при изменении файла. Примером будет eog (eye of gnome)или shutterили prievew (on OS X). Это можно настроить с помощью org-file-appsдобавления:

extension: \.png\'
Command:   eog "%s"
Лев Уфимцев
источник
Вы делаете прокрутку на основе клавиатуры или мыши?
Mankoff
прокрутка мышкой, спасибо за разъяснения.
Лев Уфимцев
Может потребоваться патч для Emacs. Я знаю, что функции / преимущества порта для Mac - плавная прокрутка: github.com/railwaycat/emacs-mac-port/blob/master/README-mac Но даже это только для мыши. Клавиатуры перемещаются по линиям, а изображения высотой всего в одну строку ...
mankoff
Было бы неплохо иметь такой патч ...
Лев Уфимцев
Как насчет (setq scroll-conservatively 101)и прокомментируйте все остальные настройки прокрутки, упомянутые в вопросе выше, и отключите этот пакет плавной прокрутки и / или фрагмент? Строка документа для scroll-conservativelyсостояний: « Если значение больше 100, повторное отображение никогда не переместит точку, но всегда будет прокручивать достаточно текста, чтобы вывести точку зрения, даже если вы удаляетесь далеко. Значение ноль всегда означает точку пересчета если он выходит за пределы экрана. "
Lawlist

Ответы:

7

Начиная с Emacs 26.1, буфер можно прокручивать отдельными пикселями, а не просто строками, которые можно использовать для плавной прокрутки изображений с помощью колесика мыши. Для этого я использовал следующую конфигурацию:

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

Редактировать:

Я обнаружил, что у этого решения есть несколько предостережений, которые полезно знать:

  • Прокрутка по изображению выше, чем у окна, все равно вызовет большой скачок, который вызывает прокрутку окна, пока изображение больше не будет видно (следующая строка находится в верхней части окна).
  • Вы не можете сделать прокрутку мгновенной (менее интенсивной), но все же прокручиваете пикселями, а не линиями.
  • Когда новое событие прокрутки генерируется до завершения существующей анимации, окно переходит к началу следующей анимации, вызывая разрыв в плавной прокрутке.
  • Многие люди испытали такое снижение производительности при использовании этого метода, что его просто невозможно использовать. По-видимому, это часто встречается, когда используются некоторые модификации строки режима.
Мэтью Палермо
источник
Вам не нужно, (require 'pixel-scroll)так pixel-scroll-modeкак загружается автоматически.
Тобиас
Ах да, вы правы. Я просто следовал инструкциям в строке документации в pixel-scroll.el, но я думаю, что они предназначены для немного другой аудитории.
Мэтью Палермо
1

Как насчет этого:

;; 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
источник
1

Проблема, насколько я понимаю, состоит в том, что изображение представляет собой одну строку. Изменение способа прокрутки не решит проблему.

Единственное известное мне решение - разрезать изображение так, чтобы было технически много более коротких изображений. Это можно сделать с помощью insert-sliced-image.

Ista
источник
Можете ли вы подробнее рассказать об использовании insert-sliced-image? Можно ли переопределить, org-toggle-inline-imagesчтобы сначала нарезать их?
Адам
Вы можете прочитать об этом insert-sliced-image, оценив (describe-function 'insert-sliced-image)- у меня нет никакой полезной проработки, чтобы добавить к документации. Я просмотрел org-display-inline-imagesкод, но не могу понять, куда на самом деле вставляются изображения. Я уверен, что можно переписать его для использования insert-sliced-image, но я не вижу, как это сделать.
Иста