5

一般来说,如果它的参数已知,是否可以从 init.el 调用交互式函数?

我举一个具体的例子:在 sql 包中,有一个交互函数sql-connect

当调用为

    M-x sql-connect

它要求在 minibuffer 中连接。接听

    my-mysql-localhost-connection1

打开一个带有 mysql 提示符的SQL缓冲区,这是我想要的。

我想在 Emacs 启动时在SQL缓冲区中启动连接。但是在我的 init.el 中添加:

   (sql-connect 'my-mysql-localhost-connection1)      

不做任何事情。在这种情况下,我试图实现的目标是什么,以及一个通用的交互功能(哪些参数是已知的)

谢谢

4

2 回答 2

5

一般来说:

是的,您可以在交互式调用之后使用repeat-complex-command( C-xM-:) 来找出参数最终的样子。这是一种值得记住的有用方法,因为有时交互形式中存在隐藏的操作,可以将用户的输入转换为不同的内容1

不一定为您提供在非交互式调用中使用的最佳参数(这将始终取决于所讨论的函数),但如果您不确定如何将其翻译成另一个2

1 align-regexp就是一个很好的例子。
2假设您至少已经阅读了相关函数的文档字符串——在非交互式上下文中调用给定的交互式命令并不少见,并且函数帮助通常足以指出这个出来。

于 2013-09-11T17:32:11.310 回答
3

您的一般问题的答案是肯定的:您可以从代码中调用交互式函数,而不是使用M-x.

写你更具体的问题:

您不需要交互调用该函数(即,不需要使用call-interactively),除非出于某种原因您真的想以交互方式调用它(例如,提示用户)。;-)

只需通过提供必要的参数来调用它,就可以了。IOW 这应该有效:

 (sql-connect 'my-mysql-localhost-connection1)

但是文档说CONNECTIONarg 必须定义实际的连接设置,每sql-connection-alist. 检查my-mysql-localhost-connection1是否遵循 sql-connection-alist正确定义连接设置,以便不会提示用户输入任何登录参数。

于 2013-09-11T05:56:32.767 回答