我將所有代碼都包裝在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