window - display-buffer:如何在创建时精确设置窗口宽度

时间:2014-03-21 17:37:26

标签: emacs elisp

关于函数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) )

1 个答案:

答案 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