我有这样的代码
(defun work ()
(interactive)
(case major-mode
('javascript-mode (setq js-indent-level (if (eq js-indent-level 2) 4 2)))
('css-mode (setq cssm-indent-level (if (eq cssm-indent-level 2) 4 2)))
('nxml-mode (setq nxml-child-indent (if (eq nxml-child-indent 2) 4 2)))
(t (setq c-basic-offset (if (eq c-basic-offset 2) 4 2)))))在缩进级别2和4之间的切换(我使用4个缩进空间,但工作需要2),是否可以减少代码的大小--每一行看起来都是一样的:
(defun work ()
(interactive)
(let ((var (case major-mode
('javascript-mode 'js-indent-level)
('css-mode 'cssm-indent-level)
('nxml-mode 'nxml-child-indent)
(t 'c-basic-offset))))
;; like C pointers
(setf (pointer var) (if (eq (pointer var) 2) 4 2))))或
(defun work ()
(interactive)
(let ((var (cdr (assoc major-mode indent-vars))))
(setf (pointer var) (if (eq (pointer var) 2) 4 2))))如果我的缩进变量在缩进-vars中
我需要使用宏还是eval来完成这个任务?
发布于 2013-12-12 12:06:16
你需要符号值和set。
(defun work ()
(interactive)
(let ((var (cdr (assoc major-mode indent-vars))))
(set var (if (eq (symbol-value var) 2) 4 2))))发布于 2013-12-12 11:50:27
您可以尝试下面的操作,而不是setf-construct。
(set var (if (eq (eval var) 2) 4 2))它应该有效,但我没有测试它。
https://stackoverflow.com/questions/20541634
复制相似问题