首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用通知覆盖交互功能

用通知覆盖交互功能
EN

Stack Overflow用户
提问于 2016-10-07 01:14:22
回答 1查看 254关注 0票数 0

如何在elisp中覆盖与defadvice的交互输入?

例如,我试图阻止ansi-term使用以下内容提示输入:

代码语言:javascript
复制
(defadvice ansi-term (around kill-interactive activate)
  (let ((explicit-shell-file-name "/bin/bash"))
    (ad-set-arg 0 explicit-shell-file-name)
    (deactivate-input-method)
    ad-do-it))

但是,即使explicit-shell-file-name设置正确,它仍然会提示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-07 06:40:46

这个函数仍然有它的原始interactive声明,所以如果您交互地调用它,它将使用它来获得参数值。

您可以通过在建议中包含interactive表单来替换它。例如:

代码语言:javascript
复制
(defadvice ansi-term (around kill-interactive activate)
  (interactive (list "/bin/bash" nil))
  ad-do-it)

事实上,这正是您应该设置参数值的地方,如果使用这样的建议,否则您也会为ansi术语的非交互式使用而破坏PROGRAM值,这显然不是您想要的!

不过,就我个人而言,我不会这么做。我定义了一个新的包装器命令,然后调用它:

代码语言:javascript
复制
(defun bash ()
  "Run bash inside `ansi-term'."
  (interactive)
  (ansi-term "/bin/bash"))

如果您有ansi-term的任何键绑定,那么您可以像这样重新映射它们:

代码语言:javascript
复制
(global-set-key [remap ansi-term] 'bash)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39907919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档