窗口中的中心Emacs缓冲区

时间:2014-07-25 11:57:42

标签: emacs

我将所有代码包装在80列,有时候Emacs窗口宽度超过80列,右侧有很多未使用的空格。

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

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

我认为这可以通过动态调整条纹模式宽度来实现,具体取决于当前窗口大小,但我不知道从哪里开始。有什么想法吗?

4 个答案:

答案 0 :(得分:10)

正如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)

答案 1 :(得分:2)

这是一个应该做你想要的功能,使用边距而不是条纹(因为我倾向于在条纹中显示缓冲区边界,如果条纹太大,我发现它变得很丑)。

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

答案 2 :(得分:0)

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

如何解决一个消除额外空白的解决方案呢?如果这是可以接受的,这里有两种方法。

  1. 如果缓冲区在其帧中是单独的,那么您可以使用库fit-frame.el将帧拟合到缓冲区。我将命令fit-frame绑定到C-x C-_。这不仅可以节省Emacs中的空间,还可以节省桌面空间。 (图书馆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控制。

答案 3 :(得分:0)

中心窗口模式

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

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

如果可以看到另一个窗口,则文本的宽度小于“ cwm-centered-window-width”时,文本将恢复正常。