如何定义一个 emacs 命令 X 执行某些操作,然后调用另一个 emacs 命令 Y 并复制命令 Y 的交互界面?
我想定义查询替换的替代版本,并临时切换大小写折叠搜索的值:
(defun alt-query-replace (a b c d e)
(interactive)
(let ((case-fold-search (not case-fold-search))
(query-replace a b c d e)))
这是行不通的。当我调用 alt-query-replace 时,它显示“参数数量错误”。我希望 alt-query-replace 的交互界面与 query-replace 相同。我是否需要检查查询替换的源代码或者是否有通用方法?
如果您想修改原始函数的行为而不是调用单独的函数,您可以建议原始函数。
From 第 17.3 章 周围建议 http://www.gnu.org/software/emacs/manual/html_node/elisp/Around_002dAdvice.htmlGNU Emacs Lisp 参考手册的内容:
周围建议让你“包装”一个 Lisp
“围绕”原文的表达
函数定义。
(defadvice foo (around foo-around)
"Ignore case in `foo'."
(let ((case-fold-search t))
ad-do-it))
对于你的情况,你可以写:
(defadvice query-replace (around alt-query-replace (from-string to-string &optional delimited start end))
(let ((case-fold-search (not case-fold-search)))
ad-do-it))
(ad-activate 'query-replace)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)