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

2024-04-04

如何定义一个 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(使用前将#替换为@)

定义一个调用另一个 emacs 命令的 emacs 命令(保留交互式内容) 的相关文章

  • 在 Emacs 中移动到搜索查找的开始和结束位置

    接受搜索时如何将点置于搜索字符串的开头或结尾 所以说你执行 C s foobar 当我按 RET 时 我希望将光标置于找到的字符串的末尾 如果按 C RET 则将光标置于开头 Thanks 尝试这个 defun my isearch exi
  • 如何启动 Perl 的交互式控制台?

    如何启动 Perl 的交互式控制台 类似于irbRuby 命令或python对于Python 您可以在一个简单的程序上使用 perl 调试器 如下所示 perl de1 该命令将启动 Perl 调试器 d 表达式1 e1 因为调试器想要调试
  • 在 Python 中,如何使用交互式命令行(和可视断点?)进行调试

    我最近从 Matlab 转向了 Python Python 是一种更好的语言 从计算机科学家的角度来看 但 Python IDE 似乎都缺少一件重要的事情 一个合适的交互式调试器 我在找 通过单击编辑器中代码行旁边的图标以图形方式设置断点的
  • Sublime Text 2 中的“关闭其他”命令快捷方式

    我正在尝试添加 关闭其他 选项卡的快捷方式 但似乎找不到该命令 这就是我正在尝试的 keys super alt w command close others Cmd Option W sort of like Cmd Option H i
  • 同时维护多个emacs配置

    我想在同一台电脑上的同一用户帐户上同时维护多个 emacs 配置 例如 emacs prelude emacs starter kit 和我自己的自定义 emacs 配置 为此 我设置了 emacs1 d emacs2 d emacs3 d
  • emacs - 如何在子目录中进行查找文件搜索

    我想为 Emacs 实现类似 Resharper 的 转到文件 功能 当按下上述快捷键时 Resharper 会弹出一个接受通配符字符串的文本框 并显示一个自动完成菜单 其中列出了项目中与该通配符匹配的所有文件 source jetbrai
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • 有没有办法使用 emacs 安装 R 包?

    我正在使用 ESS 但每次需要安装新软件包时 我都必须使用 R gui 有没有办法在不离开 emacs 的情况下做到这一点 From help Startup Example of Rprofile site local add MASS
  • 在 Emacs 中定义新的工具提示

    我想向 emacs 添加自定义工具提示 更具体地说 每当我将鼠标悬停在符号 函数 变量 名称上时 用我的鼠标我想看到带有符号定义的工具提示 我知道我可以使用 cscope 这样的工具找到此类信息 但我不知道如何找到 将 cscope 的输出
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • Emacs 关于 python 模式函数的默认提示

    在 python 模式下 有一个名为 py execute region 的函数 它将突出显示的代码区域发送到 Python 缓冲区进行评估 评估后 光标位于 Python 缓冲区中 但我希望它保留在脚本缓冲区中 以便我可以继续生成更多代码
  • `npm i` 命令有什么作用?

    什么是i在 npm CLI 中执行命令 我看到它是这样使用的 npm i package The iflag 是一个别名install so npm i package 是相同的 npm install package 从文档中 npm i
  • Emacs Evil“重复”(点)行为

    我的中有以下行 emacs define key evil normal state map M j lambda interactive evil next line 5 这使得文件中的导航变得更加容易 例如 与M j我在下面 5 行 所
  • 点击Leaflet地图上的点即可在Shiny中生成ggplot

    我正在尝试使用 R 中的 Shiny 创建一个 Leaflet 地图 它允许用户单击任何标记来生成表示该特定站点的信息 温度 的相应图 我合并了这个问题的代码 单击传单地图中的点作为闪亮绘图的输入 https stackoverflow c
  • windows下无法用emacs + sbcl启动slime

    我想配置我的 emacs 以使用 SLIME 和 SBCL emacs 文件如下所示 add to list load path D app slime setq inferior lisp program sbcl require sli
  • Bash:在新终端中执行带有参数的命令[重复]

    这个问题在这里已经有答案了 所以我想在 bash 中打开一个新终端并执行带参数的命令 只要我只采取类似的东西ls作为命令它工作正常 但是当我采取类似的东西时route n 所以带参数的命令不起作用 代码 gnome terminal win
  • 如何配置 Firefox 在某些链接上运行 emacsclientw?

    我有一个 Perl 脚本 它会在一堆日志文件中查找 有趣 的行 以获取一些有趣的定义 它生成一个 HTML 文件 其中包含一个表 该表的列是时间戳 文件名 行号引用和 有趣 位 我想做的是让文件名 行号成为一个实际的链接 它将在 emacs
  • MVVM 中的事件而不是命令?

    在MVVM的各种教程中经常会指出 MVVM的目标不是消除代码隐藏 并且代码隐藏中的一些事件处理可能仍然是必要的 在什么场景下您需要在代码隐藏中编写事件而不是在视图模型中使用命令 一般来说 如果您的代码与 UI 逻辑相关 请将其保留在视图的
  • 如何从 Emacs 中运行 Cygwin Bash Shell?

    我在 Windows 上运行 GNU Emacs 因此输入 M x shell 启动 Windows 命令行 DOS shell 但是 我希望能够从 Emacs 中运行 Cygwin Bash Shell 或任何其他非 Windows sh
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人

随机推荐