关于函数window--display-buffer
,我无法使用数字精确设置窗口宽度 - 例如'((window-width . 82))
。宽度总是略小于应有的宽度。任何帮助可靠地使用数字来设置窗口宽度都将非常感激。
文档(https://www.gnu.org/software/emacs/manual/html_node/elisp/Display-Action-Functions.html)声明如下:
要调整窗口的宽度,请使用汽车为window-width
且 cdr 为以下之一的条目:
nil
表示仅保留新窗口的宽度。
数字指定新窗口的所需宽度。 整数指定窗口的列数。 浮点数给出窗口宽度相对于框架根窗口宽度的分数。
如果cdr
指定一个函数,则使用一个参数调用该函数:新窗口。该功能应该调整窗口的宽度;它的返回值被忽略。
以下是broken-example
,用于说明使用数字时window--display-buffer
的问题 - 例如'((window-width . 82))
(defun broken-example ()
(interactive)
(window--display-buffer
;; buffer
(get-buffer-create "*test*")
;; window
(split-window (selected-window) nil 'right)
;; type
'window
;; alist
'((window-width . 82))
;; dedicated
t)
(message "Window Width: %s" (window-width (get-buffer-window "*test*"))) )
以下是working-example
使用第三个选项 - 即一个函数,其参数为新窗口:
(defun working-example ()
(interactive)
(window--display-buffer
;; buffer
(get-buffer-create "*test*")
;; window
(split-window (selected-window) nil 'right)
;; type
'window
;; alist
'((window-width . set-window-width))
;; dedicated
t)
(message "Window Width: %s" (window-width (get-buffer-window "*test*"))) )
(defun set-window-width (window)
"Set the selected window's width."
(window-resize window (- 82 (window-width)) t) )
答案 0 :(得分:0)
对于2014年3月19日制作的当前版本的Emacs Trunk,window.el
的第5944行从 到(delta (- new-width (window-total-width window))))
(delta (- new-width (window-width window))))
的以下修改结算这个问题。
编辑(2014年3月22日):这是关于此问题的公开错误报告的链接 - http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17065