我将所有代码包装在80列,有时候Emacs窗口宽度超过80列,右侧有很多未使用的空格。
我想定位Emacs缓冲区,所以所有文本都显示在窗口中间。
这与中心对齐文本不同(更类似于查看pdf时文本两侧的空白)。
我认为这可以通过动态调整条纹模式宽度来实现,具体取决于当前窗口大小,但我不知道从哪里开始。有什么想法吗?
答案 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)
您要求在窗口中央显示缓冲区,该缓冲区只是从右侧将一些额外的空格移动到缓冲区的左侧。
如何解决一个消除额外空白的解决方案呢?如果这是可以接受的,这里有两种方法。
如果缓冲区在其帧中是单独的,那么您可以使用库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
控制。
答案 3 :(得分:0)
中心窗口模式
https://github.com/anler/centered-window-mode
使窗口文本居中的全局次要模式。
如果可以看到另一个窗口,则文本的宽度小于“ cwm-centered-window-width”时,文本将恢复正常。