我正在嘗試定義一個函數,它將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