我将所有代码都包装在80列,有时候Emacs窗口宽于80列,右侧有很多未使用的空白。窗口内的中心Emacs缓冲区
我想定位Emacs缓冲区,所以所有的文本都显示在窗口中间。
这与中心对齐文本不同(更类似于查看pdf时文本两边的空白)。
我认为这可以通过动态调整边缘模式宽度来实现,具体取决于当前的窗口大小,但我不知道从哪里开始。有任何想法吗?
我将所有代码都包装在80列,有时候Emacs窗口宽于80列,右侧有很多未使用的空白。窗口内的中心Emacs缓冲区
我想定位Emacs缓冲区,所以所有的文本都显示在窗口中间。
这与中心对齐文本不同(更类似于查看pdf时文本两边的空白)。
我认为这可以通过动态调整边缘模式宽度来实现,具体取决于当前的窗口大小,但我不知道从哪里开始。有任何想法吗?
作为证明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)
这是一个函数,它应该做你想做的事情,使用边距而不是边缘(因为我倾向于在边缘显示缓冲区边界,如果边缘太大,我觉得它变得很难看)。
(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)))
您要求在窗口的中央显示缓冲区,它将右边的一些额外空白移动到缓冲区的左侧。
如何消除多余的空白而不是解决方案?如果这是可以接受的,这里有两种方法。
如果缓冲区是独自一人在其框架,那么你就可以适应帧缓冲区,利用图书馆fit-frame.el
。我将命令fit-frame
绑定到C-x C-_
。这不仅可以节省Emacs内部的空间,还可以节省桌面空间。 (图书馆zoom-frm.el
让你也缩小/放大框增量,这样你就可以通过缩小,当你不需要看到它的详细内容框架节省空间。)
如果没有(因此缓冲区所示一个窗口有多个窗口),如果缓冲区的窗口在窗口左侧或右侧有另一个窗口,则可以执行以下操作之一:
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
控制。
[writeroom-mode.el](https://github.com/joostkremers/writeroom-mode/blob/master/writeroom-mode。el)设法做到这一点;也许读源提供了一些线索。 – legoscia