首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动执行这些emacs ESS (ess-remote)命令?

如何自动执行这些emacs ESS (ess-remote)命令?
EN

Stack Overflow用户
提问于 2012-11-23 02:18:41
回答 1查看 761关注 0票数 6

我正在使用一个本地emacs实例(aquamacs)在远程服务器上运行R进程,并且我想自动执行连接到我的服务器的过程。具体流程如下:

在emacs中

代码语言:javascript
复制
M-x shell

在生成的控制台中

代码语言:javascript
复制
TERM=xterm
ssh -Y -C <my remote server>
screen -rd [and/or] R

在emacs中

代码语言:javascript
复制
M-x ess-remote
r

我在这里发现了这个通用方法:http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/。-Y -C选项允许您使用xterm查看绘图。我不知道lisp,尽管我在谷歌上搜索了一下,但我似乎无法拼凑出如何定义一个函数来自动化这一点(例如,在.emacs.el中)。有没有人实现过这样的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 10:47:47

假设您只想在代码中调用shell。在Lisp中,一切都是用括号括起来的前缀表示法。因此,我们将其输入到一个缓冲区(例如,临时缓冲区):

代码语言:javascript
复制
(shell)

将指针移动到close-paren之后的行尾,然后键入<C-x C-e>以执行Lisp代码。您应该会看到调用了shell函数。

现在,让我们让它成为一个函数,这样我们就可以向它添加其他东西。创建函数的命令是defun,它接受函数的名称、参数列表(在括号中),然后是函数体:

代码语言:javascript
复制
(defun automate-connection ()
  (shell))

将光标移动到代码的末尾,点击<C-x C-e>,函数将被定义。您可以通过执行以下命令从Lisp调用它

代码语言:javascript
复制
(automate-connection)

好了,现在我们只需要把一些文本放到shell缓冲区中。

代码语言:javascript
复制
(defun automate-connection ()
  (shell)
  (insert "TERM=xterm"))

现在,当我们运行它时,我们将"TERM=xterm“放入外壳缓冲区。但它实际上并不发送命令。让我们试着换行。

代码语言:javascript
复制
(defun automate-connection ()
  (shell)
  (insert "TERM=xterm\n"))

这会放入一个换行符,但实际上并不会使该命令运行。为什么不行?让我们来看看enter键有什么作用。转到*shell*缓冲区,键入<C-h c>,然后按return键。(<C-h c>运行describe-key-briefly,打印通过按给定的键调用的函数的名称)。也就是说,当你点击RET时,它不会换行,而是实际调用comint-send-input。因此,让我们这样做:

代码语言:javascript
复制
(defun automate-connection ()
  (shell)
  (insert "TERM=xterm")
  (comint-send-input))

现在,当你从任何Lisp代码运行`(automate-connection)时,你应该会得到给定的东西。我把添加其他命令的练习留给读者。

但是等等!我们还没说完呢,是吗?我假设您不想移动到Lisp临时缓冲区,输入(automate-connection),然后计算该代码。你可能只想打字,然后就到此为止。默认情况下,您不能使用我们刚刚创建的函数执行此操作。幸运的是,实现这一点很简单:只需在函数中添加对(interactive)的调用:

代码语言:javascript
复制
(defun automate-connection ()
  (interactive)
  (shell)
  (insert "TERM=xterm")
  (comint-send-input))

现在您可以随心所欲地调用它,它将打开*shell*缓冲区,输入文本,并告诉Emacs告诉shell运行该文本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13518185

复制
相关文章

相似问题

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