Emacs 用通知覆盖交互功能

Emacs 用通知覆盖交互功能,emacs,defadvice,Emacs,Defadvice,如何在elisp中用defadvice覆盖交互式输入 例如,我正在尝试使用以下命令停止提示输入ansi术语: (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)) 但

如何在elisp中用
defadvice
覆盖交互式输入

例如,我正在尝试使用以下命令停止提示输入ansi术语:

(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))

但是,即使正确设置了
显式shell文件名
,它仍会提示。

该函数仍有其原始的
交互式
声明,因此如果以交互方式调用它,它将使用它来获取参数值

您可以通过将
交互式
表单包含在您的建议中来替换它。e、 g:

(defadvice ansi术语(关于kill interactive activate)
(交互式(列表“/bin/bash”nil))
广告(做它)
事实上,如果使用这样的建议,那么这正是你应该设置参数值的地方,否则你也会对非交互式使用ansi术语的
程序
值进行重击,这显然不是你想要的

然而,就我个人而言,我不会这样做。我将定义一个新的包装器命令,并调用它:

(defun bash()
“在‘ansi术语’中运行bash。”
(互动)
(ansi术语“/bin/bash”))
如果您有任何ansi术语的键绑定,您可以像这样重新映射它们:

(全局设置键[重新映射ansi术语]'bash)

该函数仍然有其原始的
交互式
声明,因此如果以交互方式调用它,它将使用它来获取参数值

您可以通过将
交互式
表单包含在您的建议中来替换它。e、 g:

(defadvice ansi术语(关于kill interactive activate)
(交互式(列表“/bin/bash”nil))
广告(做它)
事实上,如果使用这样的建议,那么这正是你应该设置参数值的地方,否则你也会对非交互式使用ansi术语的
程序
值进行重击,这显然不是你想要的

然而,就我个人而言,我不会这样做。我将定义一个新的包装器命令,并调用它:

(defun bash()
“在‘ansi术语’中运行bash。”
(互动)
(ansi术语“/bin/bash”))
如果您有任何ansi术语的键绑定,您可以像这样重新映射它们:

(全局设置键[重新映射ansi术语]'bash)