【问题标题】:window--display-buffer: How to precisely set window width at time of creationwindow--display-buffer:如何在创建时精确设置窗口宽度
【发布时间】: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“使用风险自负”。

标签: emacs elisp


【解决方案1】:

对于 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

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2011-11-09
    • 1970-01-01
    • 2013-06-03
    • 2014-05-29
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多