附加到 emacs-lisp 中列表的默认值:具体来说,dotspacemacs-configuration-layers
Append to default value of a list in emacs-lisp: specifically, dotspacemacs-configuration-layers
目标
我希望通过引用文件 user-config.org
和 user-layers.org
进一步扩展我的 spacemacs
配置的模块化
模板
我通过在 dotspacemacs/user-config 中添加以下内容实现了前者:
(defun dotspacemacs/user-config ()
(org-babel-load-file (expand-file-name
"user-config.org" dotspacemacs-directory)))
我可以放心地尝试克隆同步、org
anize、版本控制user-config.org
问题
现在,
dotspacemacs/user-layers 是按以下方式在函数中设置的变量(默认):
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-distribution 'spacemacs ;; not relevant
;;
;; many such default variable-value lines in between, skipped.
;;
dotspacemacs-configuration-layers
'(
;;
;; many layers auto-added/managed by spacemacs
;;
git
(python :variables python-backend 'lsp
python-lsp-server 'pyright
;; other such python configurations
python-formatter 'yapf))
;; other such default varialbe-value declarations
)
)
尝试
我尝试按以下方式在 setq-default
的末尾添加类似的继承(与 user-config
一样),
- N.B。
dotspacemacs-configuration-layers
无法在函数 dotspacemacs/layers
之外修改,因此,必须在该函数内调用对文件的引用。
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-distribution 'spacemacs
;;
;; many such default variable-value lines in between, skipped.
;;
dotspacemacs-configuration-layers
'(
;; whatever spacemacs wants to auto-add
)
;; other such default variable-value declarations
)
(org-babel-load-file (expand-file-name
"user-layers.org" dotspacemacs-directory))
)
—使得 user-layers.org
具有以下形式:
引用的 org-mode
文件:
- dotspacemacs 图层
#+BEGIN_SRC emacs-lisp
(append dotspacemacs-configuration-layers
'(
;;
;; Other layers managed by the user
;;
git
(python :variables python-backend 'lsp
python-lsp-server 'pyright
;; other such python configurations
python-formatter 'yapf)))
#+END_SRC
失败
但是,append
似乎没有向 seq-default
值添加元素。
我猜它附加到变量的本地 setq
值。
(我可能错了,因为 lisp 不是我的母语,python 是。)
问题:
有没有办法通过添加另一个列表中的元素来扩展 emacs-lisp 中列表的 default 值?
澄清:
—使得添加后,列表的默认值包含新添加的元素。
像这样的东西应该可以工作:
(setq-default dotspacemacs-configuration-layers
(append (default-value 'dotspacemacs-configuration-layers)
'(git ...)))
请注意,append
不会修改原始列表 - 它会创建一个添加了额外值的新列表。要将值添加到变量中包含的列表,您需要重新分配新列表:
*** Welcome to IELM *** Type (describe-mode) for help.
ELISP> (setq x (list 1 2 3))
(1 2 3)
ELISP> (setq y (list 4 5 6))
(4 5 6)
ELISP> (append x y)
(1 2 3 4 5 6)
ELISP> x
(1 2 3)
ELISP> (setq x (append x y))
(1 2 3 4 5 6)
ELISP> x
(1 2 3 4 5 6)
目标
我希望通过引用文件 user-config.org
和 user-layers.org
spacemacs
配置的模块化
模板
我通过在 dotspacemacs/user-config 中添加以下内容实现了前者:
(defun dotspacemacs/user-config ()
(org-babel-load-file (expand-file-name
"user-config.org" dotspacemacs-directory)))
我可以放心地尝试克隆同步、org
anize、版本控制user-config.org
问题
现在, dotspacemacs/user-layers 是按以下方式在函数中设置的变量(默认):
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-distribution 'spacemacs ;; not relevant
;;
;; many such default variable-value lines in between, skipped.
;;
dotspacemacs-configuration-layers
'(
;;
;; many layers auto-added/managed by spacemacs
;;
git
(python :variables python-backend 'lsp
python-lsp-server 'pyright
;; other such python configurations
python-formatter 'yapf))
;; other such default varialbe-value declarations
)
)
尝试
我尝试按以下方式在 setq-default
的末尾添加类似的继承(与 user-config
一样),
- N.B。
dotspacemacs-configuration-layers
无法在函数dotspacemacs/layers
之外修改,因此,必须在该函数内调用对文件的引用。
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-distribution 'spacemacs
;;
;; many such default variable-value lines in between, skipped.
;;
dotspacemacs-configuration-layers
'(
;; whatever spacemacs wants to auto-add
)
;; other such default variable-value declarations
)
(org-babel-load-file (expand-file-name
"user-layers.org" dotspacemacs-directory))
)
—使得 user-layers.org
具有以下形式:
引用的 org-mode
文件:
- dotspacemacs 图层
#+BEGIN_SRC emacs-lisp
(append dotspacemacs-configuration-layers
'(
;;
;; Other layers managed by the user
;;
git
(python :variables python-backend 'lsp
python-lsp-server 'pyright
;; other such python configurations
python-formatter 'yapf)))
#+END_SRC
失败
但是,append
似乎没有向 seq-default
值添加元素。
我猜它附加到变量的本地 setq
值。
(我可能错了,因为 lisp 不是我的母语,python 是。)
问题:
有没有办法通过添加另一个列表中的元素来扩展 emacs-lisp 中列表的 default 值?
澄清:
—使得添加后,列表的默认值包含新添加的元素。
像这样的东西应该可以工作:
(setq-default dotspacemacs-configuration-layers
(append (default-value 'dotspacemacs-configuration-layers)
'(git ...)))
请注意,append
不会修改原始列表 - 它会创建一个添加了额外值的新列表。要将值添加到变量中包含的列表,您需要重新分配新列表:
*** Welcome to IELM *** Type (describe-mode) for help.
ELISP> (setq x (list 1 2 3))
(1 2 3)
ELISP> (setq y (list 4 5 6))
(4 5 6)
ELISP> (append x y)
(1 2 3 4 5 6)
ELISP> x
(1 2 3)
ELISP> (setq x (append x y))
(1 2 3 4 5 6)
ELISP> x
(1 2 3 4 5 6)