Emacs:如何设置边距以在分屏时自动调整?

Emacs: how to set margins to automatically adjust when in split-screen?

我是一名历史学家,试图配置 Emacs 以高效地撰写学术论文。考虑到这个目标,我决定向 Emacs 缓冲区添加边距。最终结果看起来像 this,并且是通过以下代码实现的:

;; Margins function

(defun my-set-margins ()
  "Set margins in current buffer."
  (setq left-margin-width 26)
  (setq right-margin-width 26))

;; Add margins by default to a mode

(add-hook 'org-mode-hook 'my-set-margins)

问题是当我垂直分割屏幕时,边距使文本变得不可读。因此,我得出的结论是,有必要(1)让 Emacs 在垂直分屏期间自动删除边距,并在单屏时将它们放回去;或 (2) 创建一个键盘快捷键来切换边距。关于如何做的任何想法?提前致谢!

文档指出设置 left-margin-widthright-margin-width 不会立即影响 window。 window 中显示新缓冲区时会检查这些变量。因此,您可以通过调用 set-window-buffer 使更改生效。 https://www.gnu.org/software/emacs/manual/html_node/elisp/Display-Margins.html

以下函数检查边距是否大于 0,并根据其打开或关闭。我使用 f5 键将交互功能绑定到 global-map

(defun my-toggle-margins ()
"Set margins in current buffer."
(interactive)
  (if (or (> left-margin-width 0) (> right-margin-width 0))
    (progn
      (setq left-margin-width 0)
      (setq right-margin-width 0)
      (set-window-buffer (selected-window) (current-buffer)))
    (setq left-margin-width 26)
    (setq right-margin-width 26)
    (set-window-buffer (selected-window) (current-buffer))))

(global-set-key [f5] 'my-toggle-margins)