如何在elisp中覆盖与defadvice的交互输入?
例如,我试图阻止ansi-term使用以下内容提示输入:
(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设置正确,它仍然会提示。
发布于 2016-10-07 06:40:46
这个函数仍然有它的原始interactive声明,所以如果您交互地调用它,它将使用它来获得参数值。
您可以通过在建议中包含interactive表单来替换它。例如:
(defadvice ansi-term (around kill-interactive activate)
(interactive (list "/bin/bash" nil))
ad-do-it)事实上,这正是您应该设置参数值的地方,如果使用这样的建议,否则您也会为ansi术语的非交互式使用而破坏PROGRAM值,这显然不是您想要的!
不过,就我个人而言,我不会这么做。我定义了一个新的包装器命令,然后调用它:
(defun bash ()
"Run bash inside `ansi-term'."
(interactive)
(ansi-term "/bin/bash"))如果您有ansi-term的任何键绑定,那么您可以像这样重新映射它们:
(global-set-key [remap ansi-term] 'bash)https://stackoverflow.com/questions/39907919
复制相似问题