定义调用另一个emacs的命令Emacs的命令(保持互动的东西)(Define an emacs c

2019-08-21 11:02发布

我如何定义一个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的是作为查询替换相同。 我需要检查的查询替换还是有一个通用的方法的源代码?

Answer 1:

使用来电互动:


(defun alt-query-replace ()
  (interactive)
  (let ((case-fold-search (not case-fold-search)))
    (call-interactively 'query-replace)))


Answer 2:

你可以建议原函数,如果你想改变自己的行为,而不是调用一个单独的功能。

从章节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)