一般来说,是否可以从init.el调用交互式函数,如果它的参数已知?
让我举一个具体的例子:在sql包中,有一个交互式函数 sql-connect 。
当被调用为
时 M-x sql-connect
它要求迷你缓冲区中的连接。回答
my-mysql-localhost-connection1
打开一个带有mysql提示符的 SQL 缓冲区,这就是我想要的。
我想在Emacs启动的 SQL 缓冲区中启动连接。但是,在我的init.el中添加:
(sql-connect 'my-mysql-localhost-connection1)
什么都不做。在这种情况下,我想要实现的是什么,以及一般的交互功能(已知哪些参数)
由于
答案 0 :(得分:2)
您的一般问题的答案是肯定的:您可以从代码调用交互式函数,而不是使用M-x
。
更具体的问题:
您不需要以交互方式调用该函数(即,不需要使用call-interactively
),除非出于某种原因您确实想要出于某种原因以交互方式调用它(例如,提示用户)。 ; - )
通过提供必要的参数来调用它,你应该没问题。我应该这样做:
(sql-connect 'my-mysql-localhost-connection1)
但是文档说CONNECTION
arg必须按照sql-connection-alist
定义实际的连接设置。在正确定义连接设置时,检查my-mysql-localhost-connection1
是否遵循sql-connection-alist
,以便不提示用户输入任何登录参数。
答案 1 :(得分:1)
一般来说:
是的,您可以在交互式调用之后使用repeat-complex-command
( C-x M - :)来查找最终看起来像什么的参数。这是一种有用的记忆方法,因为有时会以交互形式隐藏操作,可以将用户的输入转换为不同的 1 。
那不是必然为你提供在非交互式调用中使用的最佳参数(这将永远取决于所讨论的函数),但它可能是最好的起点,如果你不确定如何将一个翻译成另一个 2 。
1 align-regexp
就是一个很好的例子
2 假设您至少已经阅读了相关函数的文档字符串 - 给定的交互式命令在非交互式上下文中调用是错误的并且这个函数并不常见帮助通常足以指出这一点。