首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套关联列表中添加或替换项

在嵌套关联列表中添加或替换项
EN

Stack Overflow用户
提问于 2018-09-30 19:32:02
回答 2查看 64关注 0票数 1

从医生那里:

变量window-system-default-frame-alist是元素列表(WINDOW-SYSTEM . ALIST),其中WINDOW-SYSTEM是窗口系统符号,ALIST是框架参数主义者。

假设我希望更改X窗口系统的框架参数it,以便它包含元素(font . "Monospace-11"),但我不希望在该列表中包含多个font元素。

那我该怎么办?基本上,我会遍历这些运算符,删除我想要替换/添加的元素,然后添加元素。这是代码:

代码语言:javascript
复制
(let ((x-frame-alist (alist-get 'x window-system-default-frame-alist)))
  (cl-acons 'x (cl-acons 'font "Monospace-11"
                         (cl-remove (cl-assoc 'font x-frame-alist)
                                    x-frame-alist))
            (cl-remove `(x . ,x-frame-alist)
                       window-system-default-frame-alist)))

然后,必须将结果分配给符号window-system-default-frame-alist。但不知怎么的,这一切看起来都太复杂了。当然,必须有一个更简单的解决办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-30 20:14:57

你可以:

代码语言:javascript
复制
(push '(font . "Monospace-11")
      (alist-get 'x window-system-default-frame-alist))

代码语言:javascript
复制
(setf (alist-get 'font (alist-get 'x window-system-default-frame-alist))
      "Monospace-11")
票数 3
EN

Stack Overflow用户

发布于 2018-09-30 20:32:19

您可以使用push设置新字体,使用assq-delete-all删除旧设置。

代码语言:javascript
复制
(progn
  (setq frame-alist '((x . ((font . "remove")
                            (other . "d")
                            (font . "remove")
                            (other . "c")))
                      (w32 . ((font . "keep")))))

  (setq x-change-font (assq-delete-all 'font (alist-get 'x frame-alist)))
  (push '(font . "wanted") x-change-font)
  (setq frame-alist
        (mapcar
         (lambda (elem) (if (eq (car elem) 'x) `(x . ,x-change-font) elem))
         frame-alist ))
  frame-alist)

返回:

代码语言:javascript
复制
((x   (font . "wanted") (other . "d") (other . "c"))
 (w32 (font . "keep")))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52581431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档