使Emacs中的文档视图适合页面宽度

使Emacs中的文档视图适合页面宽度,emacs,document-view,Emacs,Document View,我试图在Emacs中使用Document View来读取PDF,但我不知道如何使其行为类似于许多PDF阅读器的“适应宽度”命令。有没有内部方法可以做到这一点?对我来说很有效: (add-hook 'doc-view-mode-hook 'doc-view-fit-width-to-window) 更新:如果转换(到png或其他格式)仍在进行(首先打开文档),则无法正常工作。有另一种更可靠的方法来处理这种特殊情况(它根本不使用hook,而是使用advice): 下面的代码段定义了一个新的次要模式

我试图在Emacs中使用Document View来读取PDF,但我不知道如何使其行为类似于许多PDF阅读器的“适应宽度”命令。有没有内部方法可以做到这一点?

对我来说很有效:

(add-hook 'doc-view-mode-hook 'doc-view-fit-width-to-window)
更新:如果转换(到png或其他格式)仍在进行(首先打开文档),则无法正常工作。有另一种更可靠的方法来处理这种特殊情况(它根本不使用hook,而是使用advice):


下面的代码段定义了一个新的次要模式
文档视图自动调整模式
,我在下面使用
文档视图模式挂钩
激活了该模式。它适用于我在Ubuntu 14.04上的Emacs 24.3,甚至可以在我调整窗口大小时调整缩放

(由于
doc view autofit timer start
,通常会有一个很短的调整延迟,但我很乐意接受这种情况。)

我不相信这个解决方案;我找到了这个密码

(需要“cl”)
;;;; 自动装配辅助模式
(自定义文档视图自动调整计时器启动1.0
'计时器的初始值(秒),当
`调用“文档视图自动调整”(当窗口
发生配置更改,需要安装文档)。”
:键入“数字”
:组的文档视图)
(defcustom doc view autofit timer inc.0.02
“增加计时器的值(秒)(请参阅'doc view autofit timer start')
到,如果发生另一个窗口配置更改,则在
它用完了。”
:键入“数字”
:组的文档视图)
(自定义文档视图自动调整默认调整宽度
'启用模式时最初使用的配件类型。
有效值为:宽度、高度、页数。“
:type“符号
:组的文档视图)
(defvar文档视图自动调整模式映射
(let((映射(生成稀疏键映射)))
(定义键映射(kbd“C-C W”)'文档视图自动调整宽度)
(定义键映射(kbd“C-C H”)“文档视图自动调整高度”)
(定义键映射(kbd“C-C P”)'文档视图自动调整页面)
(地图)
“文档视图自动调整模式使用的键映射”。)
(定义文档视图自动调整集(类型)
“将当前缓冲区的自动装配设置为类型。”
(文档视图自动调整模式时)
(setq文档视图自动拟合类型)
(文档视图自动调整)
(定义文档视图自动调整宽度()
“将自动拟合设置为当前缓冲区的宽度。”
(交互式)(文档视图自动调整集宽度))
(定义文档视图自动调整高度()
“将当前缓冲区的自动装配设置为高度。”
(交互式)(文档视图自动调整集高度))
(定义文档视图自动调整页面()
“将当前缓冲区的自动适配设置为页面。”
(交互式)(文档视图自动调整集页面))
(定义文档视图自动拟合()
“将文档放入选定窗口的缓冲区中
由于计时器延迟,因此连续多次呼叫
不要造成那么多开销。”
(词法let)
((窗口(选定窗口)))
(如果(相等文档视图自动调整计时器为零)
(setq文档视图自动调整计时器
(使用计时器运行)
文档视图自动调整计时器启动零
(lambda()
(如果(窗口-live-p窗口)
(保存所选窗口)
(选择窗口)
(取消计时器文档视图自动调整计时器)
(setq文档视图自动调整计时器无)
(续)
((等宽文档视图自动调整类型)
(文档视图适合窗口宽度))
((等高文档视图自动调整类型)
(文档视图与窗口的配合高度))
(“相等”页面文档视图自动调整类型)
(文档视图调整页面到窗口(()()())())))
(计时器inc time doc view自动调整计时器doc view自动调整计时器inc)))
(定义次要模式文档视图自动调整模式
“DocView中自动(基于计时器)安装的次要模式。”
:打火机“AFit”:键映射文档视图自动调整模式映射:组“文档视图”
(文档视图自动调整模式时)
(设置(使局部变量“文档视图自动拟合类型”)
文档视图自动调整(默认调整)
(设置(使局部变量“文档视图自动调整计时器”为零)
(添加钩子窗口配置更改钩子
'文档视图自动拟合(无)
(文档视图自动拟合))
(何时(非文档视图自动调整模式)
(拆下挂钩'窗口配置更改挂钩
'文档视图自动调整(t)
(当文档视图自动调整计时器时)
(取消计时器文档视图自动调整计时器)
(setq文档视图自动调整计时器(无))
(setq文档视图自动拟合类型nil)))
(添加钩子“文档视图模式钩子”文档视图自动调整模式)

以下是Chris对答案的轻微修改——它提供了与
查找文件其他窗口
等功能的兼容性——例如,当
所选窗口
与显示
*.pdf
文件的窗口不同时

(defvar上次显示的文档视图缓冲区为零)
(取消获取上次显示的文档视图缓冲区()
(设置上次显示的文档视图缓冲区(当前缓冲区)))
(添加钩子“文档视图模式钩子”获取最后显示的文档视图缓冲区)
(定义文档视图自动拟合()
“将文档放入选定窗口的缓冲区中
由于计时器延迟,因此连续多次呼叫
不要造成那么多开销。”
(如果(空文档视图自动调整计时器)
(setq文档视图自动调整计时器
(运行时使用计时器文档视图自动调整计时器开始零(λ()
(让我们*(
(选定窗口)
(续)
((eq主模式“文档视图模式”)
(选定窗口))
(t
(获取缓冲区窗口上次显示的文档视图缓冲区)))
(当前缓冲区)
(续)
((eq主模式“文档视图模式”)
(当前缓冲区)
(t
(获取缓冲区上次显示的文档视图缓冲区)))
(选择适合)
(当(buffer-live-p(获取缓冲区当前缓冲区))
(使用当前缓冲区(获取缓冲区当前缓冲区)
文档视图(自动调整类型)
(defadvice doc-view-display (after fit-width activate)
  (doc-view-fit-width-to-window))
(add-hook 'doc-view-mode-hook 'doc-view-autofit-mode t)
(require ‘cl-lib)