平滑(鼠标)滚动显示内联图像?


23

我显示与begin_src和结果块一致的图像。

但是,对于大图像,当我滚动到图像底部时,会出现“混蛋”,并且整个图像都被滚动了。类似地,如果我向上滚动并遇到一个图像,就会出现一个混蛋并看到整个图像,而不是一点一点地逐渐看到它。

这使得很难在组织模式下使用大型plantuml / graphviz图。

我希望有一个顺畅的scol体验,像在Web浏览器中一样,轻轻地滚动浏览图像,而不会出现抖动。

我试过了:

(setq auto-window-vscroll nil)

并且

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

我尝试了平滑滚动包和此代码段

但是,似乎在线图像仅占用“一行”,而将emacs固定为仅通过“一行”滚动并不能解决问题。

这个问题有解决方案吗?

[编辑] 键盘与鼠标滚动:

暗示鼠标滚动。但是,如果可以正常滚动鼠标,键盘滚动将是一个额外的好处。

[edit]
一种解决方法,但对于在组织模式下使用图像很有用,是在外部应用程序中打开它们,该应用程序会在文件更改时自动重新加载。示例为eog (eye of gnome)or shutterprievew (on OS X)。可以通过org-file-apps添加以下内容进行配置:

extension: \.png\'
Command:   eog "%s"

您正在执行基于键盘的滚动还是鼠标滚动?
mankoff 2015年

鼠标滚动,谢谢您的澄清。
Leo Ufimtsev

可能需要对emacs进行补丁。我知道Mac专用端口的功能/优点很容易滚动:github.com/railwaycat/emacs-mac-port/blob/master/README-mac但这仅仅是鼠标。键盘按行移动,并且图像仅
高出

拥有这样的补丁太好了……
Leo Ufimtsev

如何(setq scroll-conservatively 101)解决上面问题中提到的所有其他滚动设置并将其注释掉,并禁用该平滑滚动包和/或代码段?状态的文档字符串scroll-conservatively:“ 如果该值大于100,则重新显示将永远不会更新点,但是即使您移开很远,也会始终滚动足够的文本以显示该点。值为零意味着始终显示最近点如果它移出屏幕。
律师名单

Answers:


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是自动加载的,所以您不需要。
Tobias

嗯,是的。我只是按照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

1

据我了解,问题在于图像是单行。更改滚动行为不会解决该问题。

我知道的唯一解决方案是将图像切成薄片,以便在技术上有许多较短的图像。可以使用来完成insert-sliced-image


您能详细说明一下insert-sliced-image吗?是否有可能优先覆盖org-toggle-inline-images这些内容?
亚当

您可以insert-sliced-image通过评估来阅读有关内容(describe-function 'insert-sliced-image)-我没有任何有用的详细说明可添加到文档中。我浏览了一下org-display-inline-images代码,但无法理解实际插入图像的位置。我确定可以将其重写为use insert-sliced-image,但是我不知道该怎么做。
Ista
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.