【发布时间】:2010-03-07 02:58:15
【问题描述】:
我在 emacs 中使用折叠模式,并试图创建一个函数来根据模式插入适当的折叠标记(开始或结束)。到目前为止我有
(defun insert-folding-mode-mark ()
(interactive)
(let ((st "##{{{")
(en "##}}}")
string-to-insert)
(save-excursion
(setq string-to-insert
(let ((here (point))
sp ep)
(setq sp (search-backward st))
(goto-char here)
(setq ep (search-backward en))
(if (< sp ep) st en))))
(insert string-to-insert)))
这会在(点)处插入“##{{{”,除非“##{{{”在它之前,在这种情况下它会插入“##}}}”。 我想用确定开始和结束标记的东西替换第一个(let)分配
(let* ((match (assoc (intern mode-name) folding-mode-marks-alist))
(st (nth 1 match))
(en (nth 2 match)))
[是(实习生)应该以这种方式调用吗?] 我的折叠模式标记列表的截断版本看起来像
((ess-mode "##{{{" "##}}}")
(tex-mode "%{{{" "%}}}")
(python-mode "# {{{" "# }}}")
(emacs-lisp-mode ";;{{{" ";;}}}")
(TeX-mode "%{{{" "%}}}")
(LaTeX-mode "%{{{" "%}}}"))
而从各种模式返回的模式名称是 {"Emacs-Lisp", "ESS[S]", "PDFLaTeX", "Python", ...}。似乎我可能想使用(小写),(concat x“-mode”)等对字符串进行一些部分匹配,但想知道emacs lisp中是否有一种惯用的方式来进行这种与键的匹配是一个alist,还是我只需要一个单独的代码块来提取带有(mapcar 'car folding-mode-marks-alist)的键并将每个符号转换为字符串(如何?)进行匹配?
非常感谢!
【问题讨论】: