我如何定义一个Emacs命令X,做的东西,然后调用另一个emacs的命令Y以及复制命令Y的人机交互界面吗?
我想定义的altenative版本查询替换的情况下折搜索的temporarilly切换值:
(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-查询替换,它说:“错误的参数个数”。 我想的交互界面ALT-query-replace的是作为查询替换相同。 我需要检查的查询替换还是有一个通用的方法的源代码?
使用来电互动:
(defun alt-query-replace ()
(interactive)
(let ((case-fold-search (not case-fold-search)))
(call-interactively 'query-replace)))
你可以建议原函数,如果你想改变自己的行为,而不是调用一个单独的功能。
从章节17.3环游咨询的GNU的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)
文章来源: Define an emacs command that calls another emacs command (preserving interactive stuff)