【发布时间】:2014-03-21 17:37:26
【问题描述】:
关于函数window--display-buffer,我无法使用数字精确设置窗口宽度——例如'((window-width . 82))。宽度总是略小于应有的宽度。对于可靠地使用数字来设置窗口宽度的任何帮助将不胜感激。
文档 (https://www.gnu.org/software/emacs/manual/html_node/elisp/Display-Action-Functions.html) 声明如下:
要调整窗口的宽度,请使用 car 为 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) )
【问题讨论】:
-
请正确格式化您的代码。
-
@sds -- 我很乐意学习如何更好地格式化代码。我患有 OCDC,需要以某种方式拥有一切。您是否希望我为
window--display-buffer创建一个长行并删除有关每个变量组件代表什么的有用的 cmets?如果我这样做,那么每个人都需要使用 describe-variable 来查看每个组件的用途。 -
只需使用 Emacs 缩进您的代码并学会喜欢这种风格。 ;-)
-
@sds -- 好的 -- 我选择了
emacs-lisp-mode,选择了区域,然后使用了indent-region。我使用此链接作为指南:stackoverflow.com/a/992863/2112489 -
函数名中的“--”表示它是内部的,IOW“使用风险自负”。