我正在尝试定义一个函数,它将Emacs中的固定宽度主体保持在缓冲区中居中,而不是与左侧对齐。特别是我希望这是缓冲区本地化,我试图通过本地设置左右边距宽度来实现。在Emacs缓冲区中居中文本
这本身很好,但我也想要一个钩子来调整窗口大小更改时的边距,这对我造成了问题。下面的代码(改编自https://stackoverflow.com/a/23731757/3822233):
(defun center-body()
(let* ((max-text-width 70)
(margin (max 0 (/ (- (window-width) max-text-width) 2))))
(setq-local left-margin-width margin)
(setq-local right-margin-width margin)
(set-window-buffer nil (current-buffer))))
(defun uncenter-body()
(setq-local left-margin-width 0)
(setq-local right-margin-width 0)
(set-window-buffer nil (current-buffer)))
(defun body-center-mode()
(interactive)
(if (= left-margin-width 0)
(progn
(center-body))
(add-hook 'window-configuration-change-hook 'center-body nil 1))
(uncenter-body)
(remove-hook 'window-configuration-change-hook 'center-body 1)))
当add-hook
和remove-hook
线被除去,寄托都没关系。但只要我打电话给add-hook
我得到一个嵌套超过最大lisp评估深度错误。
我不太了解lisp,所以我在调试时遇到了麻烦。
谢谢!用'set-window-margins'去了,事情正常。 – Arpon 2014-10-01 02:33:02