在Shell模式下启动并运行命令的Emacs宏



我承认:我不了解Lisp。尽管如此,在一些同事的帮助下,我还是成功地编写了一个emacs宏/脚本:

  1. 切换到外壳模式(即M-x外壳模式)
  2. 禁用截断线(即M-x切换截断线)
  3. 启动数据库控制台(即"mysql")

然后,我可以使用--script选项用这个宏启动emacs,突然间,我有了一种方法,可以用一个命令在一个更友好的环境中启动mysql:-)

但问题是:我换了工作,把剧本忘了。现在我很想在新工作中重新创作这个剧本,但我不再像以前那样有任何emacs专家来帮我写。

现在,我真的很讨厌有人说"请为我写代码"的SO帖子,所以我不想这样做。然而,如果任何emacs宏专家至少能给我一些建议(比如"这是你如何在宏中调用M-x命令"),或者给我指一本emacs宏编写指南,或者在这个问题上"教我钓鱼",我将不胜感激。

如果有人碰巧有一个类似的剧本,他们想发布,我当然不会抱怨;-)

大多数emacs命令(即M-x toggle-truncate-lines)都可以通过将它们封装在括号中直接转换为elisp:

(toggle-truncate-lines)

谣言是真的,口齿不清,你只要把括号撒在周围,它们就会变魔术。

现在,在这种情况下,你可以做得更好。切换对于交互式函数来说是有意义的,但在程序中,如果您不想切换截断行,则需要启用截短行。如果截断行从一开始就被关闭了,这也是一样的,但你不知道你的程序下一次什么时候运行。无论如何,在Emacs中,特性通常由一个变量控制。在这种情况下,变量为truncate-lines,要启用该功能,请将变量设置为t(这意味着true)。

要执行此操作,请使用:

(setq truncate-lines t)

我们使用setq而不是=进行分配,因为他们在=发明之前就制作了lisp。

要想获得真正的独家新闻,你应该看看Robert Chassel的精彩文章"Emacs Lisp编程入门"。它内置于您的emacs中,您可以使用C-h i m Emacs Lisp Intro进行访问。

开始编写elisp函数的一个好方法(我认为)是记录键盘宏,然后使用edit-kbd-macro 进行分析

例如,如果您开始使用f3录制键盘宏,然后以交互方式执行所有您想要的操作,并使用f4CD_9f4查看底层emacs-lisp命令(最后一个1f4是用于执行键盘宏的键绑定)

<<shell>>                  ;; shell
<<toggle-truncate-lines>>  ;; toggle-truncate-lines
mysql                      ;; self-insert-command * 5
RET                        ;; comint-send-input

现在,您可以使用这些函数编写脚本,查找文档(例如C-hftoggle-truncate-lines),看看是否应该在非交互式模式下使用特殊参数调用它们。您还应该将self-insert-command替换为对insert的调用。

这将为您提供类似以下脚本的内容,您可以使用emacs --load myscript.el 调用该脚本

(shell)
(toggle-truncate-lines 1)
(insert "mysql")
(comint-send-input)

当然,第一次可能无法按预期工作,因此您可能必须评估(setq debug-on-error t)才能获得调试信息。

您使用的是什么版本的Emacs?

在Emacs24中,我有M-xsql-mysql,它可以满足您的所有要求,并具有字体锁定。

最新更新