Emacs 如何使用“修改帧参数”修改缓冲区列表

Emacs 如何使用“修改帧参数”修改缓冲区列表,emacs,elisp,Emacs,Elisp,我试图创建一个函数,通过将其替换为同一帧上显示的选项卡栏组中选项卡的缓冲区列表来修改帧的缓冲区列表 这是一个代码段,用于返回所选框架上显示的选项卡栏组中的选项卡列表: (mapcar (lambda (tab) (buffer-name (tabbar-tab-value tab))) (tabbar-tabs (tabbar-current-tabset t))) 以下函数返回nil,而不是所需的修改缓冲区列表。任何想法都将不胜感激 (defun new-buffer-list

我试图创建一个函数,通过将其替换为同一帧上显示的选项卡栏组中选项卡的缓冲区列表来修改帧的缓冲区列表

这是一个代码段,用于返回所选框架上显示的选项卡栏组中的选项卡列表:

(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)))
返回缓冲区的列表,而不是它们的名称;因此,您可能需要替换

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

对于
'tabbar-tab-value

我的猜测是缓冲区列表是emacs内部使用和修改的一个变量,因此尝试修改它不会得到预期的结果。您可以验证,一旦将其设置为nil,一旦更改缓冲区或窗口,列表就会重新填充。如果您知道一个成功更改此框架参数的代码示例,我将对指向它的指针非常感兴趣。我正在配置一个修改版本的
frame bufs.el
,以便更好地使用Tabbar。切换到
帧bufs模式时
有一个可选的帧初始化,它将每个帧中的缓冲区与焦点关联:
(mapcar#'(lambda(x)(窗口缓冲区x))(窗口列表帧“no minibuf))
。我想改用我的
新列表
,这样所有打开的选项卡都会关联起来。如果有一种方法可以将我的
新列表的格式修改为类似
(mapcar#'(lambda(x)(窗口缓冲区x))(窗口列表框“no minibuf))
,那么就可以了。以下所有示例都具有相同的通用格式,这与我的
新列表有所不同(但我不知道为什么或如何修复它):
(帧参数帧“缓冲区列表”)
(帧参数帧”隐藏缓冲区列表)
(mapcar#'(lambda(x)(窗口缓冲区x))(窗口列表帧“no minibuf”)
返回字符串消息,从不
nil
(帧参数“nil”buffer list)
返回缓冲区列表,而不是它们的名称;您可能希望用
替换
(lambda(tab)(buffer name(tabbar tab-value tab))
(lambda (tab) (buffer-name (tabbar-tab-value tab)))