Я пытаюсь определить функцию, которая сохранит мое тело с фиксированной шириной в 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
строки будут удалены, Everthing нормально. Но как только я вызываю add-hook
, я получаю . Вложенность превышает max-lisp-eval-depth.
Я действительно не понимаю lisp, поэтому мне трудно отладить это.
спасибо! пошел с 'set-window-margins', и все работает нормально. – Arpon