Rolagem suave (mouse) para imagens embutidas?

23

Eu exibo imagens alinhadas com begin_src e blocos de resultados.

No entanto, para imagens grandes, quando passo a parte inferior da imagem, recebo um 'empurrão' e a imagem inteira é rolada para longe. Da mesma forma, se eu rolar para cima e me deparar com uma imagem, recebo um empurrão e vejo a imagem inteira em vez de vê-la gradualmente, pouco a pouco.

Isso dificulta o trabalho com grandes diagramas plantuml / graphviz no modo organizacional.

Eu gostaria de ter uma experiência suave de rolagem, passando a imagem suavemente como em um navegador da Web, sem tremer.

Eu tentei:

(setq auto-window-vscroll nil)

e também

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

Eu tentei o pacote de rolagem suave e esse trecho também.

No entanto, parece que uma imagem em linha ocupa apenas 'uma linha' e corrigir o emacs para rolar apenas por 'uma linha' não resolve o problema.

Alguma solução para esse problema?

[editar] Rolagem de teclado versus mouse:

A rolagem do mouse está implícita. Mas a rolagem do teclado seria um bônus se a rolagem adequada do mouse funcionasse.

[editar]
Uma solução alternativa, mas útil para trabalhar com imagens no modo organizacional, foi abri-las em um aplicativo externo que é recarregado automaticamente na alteração de arquivo. Exemplo seria eog (eye of gnome)ou shutterou prievew (on OS X). Pode ser configurado via org-file-appsadicionando:

extension: \.png\'
Command:   eog "%s"
Leo Ufimtsev
fonte
Você está fazendo rolagem com base no teclado ou rolagem do mouse?
27415 Mankoff
rolagem do mouse, obrigado pelo esclarecimento.
Leo Ufimtsev 27/03
Pode exigir um patch para o emacs. Eu sei que os recursos / benefícios da porta específica para Mac são de rolagem suave: github.com/railwaycat/emacs-mac-port/blob/master/README-mac Mas mesmo isso é apenas com o mouse. Teclados mover por linhas, e as imagens são apenas uma linha de alta ...
Mankoff
Seria bom ter um patch assim ...
Leo Ufimtsev
Que tal (setq scroll-conservatively 101)e comentar todas as suas outras configurações de rolagem mencionadas na pergunta acima e desativar esse pacote e / ou snippet de rolagem suave? A sequência de documentos para os scroll-conservativelyestados: " Se o valor for maior que 100, a exibição novamente nunca apontará mais recentemente, mas sempre rolará texto suficiente para mostrar o ponto, mesmo se você se afastar. Um valor zero significa sempre o ponto mais recente se sair da tela " .
lawlist

Respostas:

7

Desde o Emacs 26.1, o buffer pode ser rolado por pixels individuais, em vez de apenas linhas que podem ser usadas para rolar suavemente as imagens usando a roda do mouse. Para conseguir isso, usei a seguinte configuração:

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

Eu descobri que esta solução tem algumas advertências que podem ser úteis para você saber:

  • Rolar uma imagem acima da janela ainda causará um grande salto estridente, que vê a janela rolar até que a imagem não fique mais visível (a próxima linha fica na parte superior da janela).
  • Você não pode fazer a rolagem instantânea (menos intensiva), mas ainda assim rolando por pixels em vez de linhas.
  • Quando um novo evento de rolagem é emitido antes que a animação existente seja concluída, a janela salta para o início da próxima animação, causando uma descontinuidade na rolagem suave.
  • Muitas pessoas experimentaram uma degradação de desempenho usando esse método que simplesmente não é utilizável. Aparentemente, isso é comum quando algumas modificações de linha de modo são usadas.
Matthew Palermo
fonte
Você não precisa, (require 'pixel-scroll)pois pixel-scroll-modeé carregado automaticamente.
21418 Tobias
Ah sim, você está certo. Eu estava apenas seguindo as instruções na sequência de documentação em pixel-scroll.el, mas acho que elas são para um público um pouco diferente.
Matthew Palermo
1

Que tal agora:

;; 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
fonte
1

O problema que eu entendo é que a imagem é uma única linha. Alterar o comportamento da rolagem não resolverá o problema.

A única solução que tenho conhecimento é dividir a imagem para que tecnicamente existam muitas imagens mais curtas. Isso pode ser feito usando insert-sliced-image.

Ista
fonte
Você pode elaborar sobre o uso de insert-sliced-image? É possível substituir org-toggle-inline-imagesa primeira fatia dessas?
Adam
Você pode ler sobre a insert-sliced-imageavaliação (describe-function 'insert-sliced-image)- não tenho nenhuma elaboração útil para adicionar à documentação. Examinei o org-display-inline-imagescódigo, mas não consigo entender onde as imagens são realmente inseridas. Tenho certeza de que é possível reescrevê-lo para uso insert-sliced-image, mas não vejo como fazê-lo.
Ista,