【问题标题】:Emacs continuation lines before screen edge屏幕边缘之前的 Emacs 续行
【发布时间】:2020-07-16 17:49:45
【问题描述】:

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

【问题讨论】:

标签: emacs


【解决方案1】:

设置窗口边距或多或少会这样做,但会导致一些问题(至少会干扰拆分窗口)。

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

(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)

【讨论】:

  • 这很简单。谢谢你的灵感。我想知道您是否已经知道它可能会导致什么样的问题。
  • 我注意到玩的事情是(a)在不同宽度的多个窗口中显示相同的缓冲区让事情变得非常混乱(边距用于缓冲区而不是窗口),并且(b)拆分窗口变得有问题.
  • 我已经更新了代码以使用窗口边距,这解决了 (a) 但不是 (b)。
  • C-h i g (elisp)Window Parameters 表示拆分是由窗口参数min-margins 进行的,它本质上是为了支持您的用例而添加的。另见debbugs.gnu.org/cgi/bugreport.cgi?bug=24193。我已经添加了一个……最有效的用法?您可能需要在拆分后重新平衡窗口。该手册还建议window-size-change-functions 将比window-configuration-change-hook 更可靠。
  • 我还注意到该错误线程末尾的神秘且完全未经证实的“原来有更好的解决方案”。如果他们能详细说明就好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多