屏幕边缘之前的 Emacs 续行

Emacs continuation lines before screen edge

我希望 Emacs 在指定列(比如第 80 列)而不是屏幕边缘显示续行符。这可能吗?我知道我可以使用 visual-line-mode 并可能将其配置为以某个预定义的宽度软断行,但我更喜欢处理逻辑行,因此不希望使用 visual-line-mode.

设置 window 边距或多或少可以做到这一点,但这会导致一些问题(至少,它会干扰拆分 windows)。

如果您想深入挖掘,这可能是一个起点。

(defvar my-right-margin-column 80
  "Used by `my-right-margin-update'.")

(defun my-right-margin-update ()
  "Make the right margin occupy all space beyond `my-right-margin-column'.

See `my-right-margin-auto-update'."
  (set-window-margins
   nil 0 (max 0 (- (+ (window-text-width)
                      (or (cdr (window-margins)) 0))
                   my-right-margin-column)))
  (set-window-parameter nil 'min-margins '(0 . 0)))

(defun my-right-margin-auto-update ()
  "Configure buffer-local `window-configuration-change-hook'."
  (add-hook 'window-configuration-change-hook
            #'my-right-margin-update nil :local))

(add-hook 'text-mode-hook #'my-right-margin-auto-update)