窗口内的 Emacs 缓冲区中心

问题描述 投票:0回答:5

我将所有代码包装在 80 列中,有时 Emacs 窗口比 80 列宽,并且右侧有很多未使用的空白。

我想定位 Emacs 缓冲区,以便所有文本都显示在窗口中间。

这与居中对齐文本不同(更类似于查看 pdf 时文本两侧的空白)。

我认为这可以通过根据当前窗口大小动态调整边缘模式宽度来实现,但我不知道从哪里开始。有什么想法吗?

emacs
5个回答
12
投票

正如here所示,这确实是可能的:

(set-fringe-mode
 (/ (- (frame-pixel-width)
       (* 80 (frame-char-width)))
    2))

但是,当我测试这个时,我似乎在使用边距方面更幸运,至少在调整框架大小时是这样:

(defun my-resize-margins ()
  (let ((margin-size (/ (- (frame-width) 80) 2)))
    (set-window-margins nil margin-size margin-size)))

(add-hook 'window-configuration-change-hook #'my-resize-margins)
(my-resize-margins)

4
投票

这是一个应该做你想做的事情的函数,使用边距而不是边缘(因为我倾向于在边缘显示缓冲区边界,并且我发现如果边缘太大它会变得丑陋)。

(defun my/center (width)
  (interactive "nBuffer width: ")
  (let* ((adj          (- (window-text-width)
                          width))
         (total-margin (+ adj
                          left-margin-width
                          right-margin-width)))
    (setq left-margin-width  (/ total-margin 2))
    (setq right-margin-width (- total-margin left-margin-width)))
  (set-window-buffer (selected-window) (current-buffer)))

3
投票

现代答案是 olivettivisual-vill-columnwriteroom-mode

所有这些都是开箱即用的,尽管 writeroom-mode 还包括其他钩子。


1
投票

您要求在窗口中央显示缓冲区,这只是将一些额外的空白从右侧移动到缓冲区的左侧。

有一个解决方案可以消除多余的空白吗? 如果可以接受,这里有两种方法。

  1. 如果缓冲区单独位于其框架中,那么您可以使用库

    fit-frame.el
    将框架适合缓冲区。 我将命令
    fit-frame
    绑定到
    C-x C-_
    。 这不仅节省了 Emacs 内的空间,还节省了桌面空间。 (Library
    zoom-frm.el
    还允许您逐步缩小/放大框架,因此当您不需要详细查看其内容时,可以通过缩小框架来节省空间。)

  2. 如果没有(因此缓冲区显示在有多个窗口的帧中),并且如果缓冲区的窗口在其左侧或右侧有另一个窗口,则您可以执行以下操作之一:

    2a。如果缓冲区的窗口左侧或右侧有另一个窗口,则可以使用命令

    fit-window-to-buffer
    。 但您还需要将选项
    fit-window-to-buffer-horizontally
    设置为非
    nil

    2b。使用

    C-{
    (
    shrink-window-horizontally
    ),然后使用
    C-x z z z...
    ,逐渐缩小窗口宽度(删除多余的空白)。

    2c。加载库

    face-remap+.el
    。每当您使用文本缩放(例如
    C-x C-
    C-x =
    )时,窗口大小都会随着文本大小而增大或缩小,因此当您缩小文本时,不会在右侧添加额外的空白。 这是由用户选项控制的
    text-scale-resize-window


1
投票

中心窗口模式

https://github.com/anler/centered-window-mode

使窗口文本居中的全局次要模式。

如果另一个窗口可见,并且其宽度小于“cwm-centered-window-width”,则文本将恢复正常。

© www.soinside.com 2019 - 2024. All rights reserved.