从文档中
变量
window-system-default-frame-alist
是以下内容的列表 元素(WINDOW-SYSTEM . ALIST)
,其中WINDOW-SYSTEM
是一个 窗口系统符号,ALIST
是框架参数列表。
比方说,我想更改X窗口系统的frame参数alist,使其包含元素(font . "Monospace-11")
,但我不想在该列表中包含多个font
元素。
那我该怎么办?基本上,我会遍历清单,删除要替换/添加的元素,然后添加该元素。这是代码:
(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
。但是,所有这些看起来都过于复杂。当然,必须有一个更简单的解决方案。
答案 0 :(得分:3)
您可以这样做:
(push '(font . "Monospace-11")
(alist-get 'x window-system-default-frame-alist))
或
(setf (alist-get 'font (alist-get 'x window-system-default-frame-alist))
"Monospace-11")
答案 1 :(得分:1)
您可以使用create_task
设置新字体,并使用push
删除旧设置。
assq-delete-all
返回:
(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)