如何使用 modify-frame-parameters 修改缓冲区列表

3
我将尝试创建一个函数,通过替换缓冲区列表来修改帧的缓冲区列表,以显示在同一帧上的Tabbar组中的选项卡列表。
以下是返回所选帧上显示的Tabbar组选项卡列表的代码段:
(mapcar (lambda (tab)
  (buffer-name (tabbar-tab-value tab)))
    (tabbar-tabs (tabbar-current-tabset t)))

以下函数返回nil而不是所需的修改后的缓冲区列表。如有建议,将不胜感激。
(defun new-buffer-list ()
(interactive)
  (message "Original Buffer List:  %s" (frame-parameter (selected-frame) 'buffer-list))
  (setq new-list
    (mapcar (lambda (tab)
      (buffer-name (tabbar-tab-value tab)))
        (tabbar-tabs (tabbar-current-tabset t))))

  (modify-frame-parameters (selected-frame) (list (cons 'buffer-list new-list)))
  (message "The variable \"new-list\":  %s" new-list)
  (message "Modified Buffer List:  %s" (frame-parameter (selected-frame) 'buffer-list)))

我正在配置一个修改过的 frame-bufs.el 版本,以便与 Tabbar 兼容。当切换到 frame-bufs-mode 时,有一个可选的框架初始化,将每个带有焦点的缓冲区与帧关联起来:(mapcar #'(lambda (x) (window-buffer x)) (window-list frame 'no-minibuf))。我想使用我的 new-list 替代它,这样所有打开的标签都会被关联。如果有一种方法可以修改我的 new-list 的格式,使其与 (mapcar #'(lambda (x) (window-buffer x)) (window-list frame 'no-minibuf)) 完全相同,那就可以解决问题了。 - lawlist
以下所有示例都具有相同的一般格式,但与我的“new-list”略有不同(但我不知道如何解决):(frame-parameter frame 'buffer-list)(frame-parameter frame 'buried-buffer-list)(mapcar #'(lambda (x) (window-buffer x)) (window-list frame 'no-minibuf)) - lawlist
1
(frame-parameter 'nil 'buffer-list) 返回的是缓冲区列表,而不是它们的名称;你可能想要用 'tabbar-tab-value 替换 (lambda (tab) (buffer-name (tabbar-tab-value tab))) - sds
@sds -- 非常感谢您 -- 这确实让我回到了正确的轨道上,并且它也在问题上面示例函数中奏效。当启用 frame-bufs-mode 时,我需要做一些工作来将所需结果分布到所有框架中,但是您已经帮助我克服了最初的障碍。非常感谢 !!! :) - lawlist
不用客气,我根据评论添加了一个答案。 - sds
显示剩余3条评论
1个回答

2
(frame-parameter 'nil 'buffer-list)

返回的是缓冲区列表,而不是它们的名称;因此您可能需要替换。

(lambda (tab) (buffer-name (tabbar-tab-value tab)))

使用'tabbar-tab-value'进行操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接