当前位置:  开发笔记 > 开发工具 > 正文

定义调用另一个emacs命令的emacs命令(保留交互式东西)

如何解决《定义调用另一个emacs命令的emacs命令(保留交互式东西)》经验,为你挑选了1个好方法。

如何定义执行某些操作的emacs命令X然后调用另一个emacs命令Y并同时复制命令Y的交互式界面?

我想用case-fold-search的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-query-replace时,它会说"参数数量错误".我希望alt-query-replace的交互式界面与query-replace相同.我是否需要检查查询替换的源代码或是否有一般方法?



1> Török Gábor..:

如果要修改其行为而不是调用单独的函数,则可以建议原始函数.

从第17.3章 GNU Emacs Lisp参考手册的周围建议:

Around-advice允许您在原始函数定义"周围""包装"一个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)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有