繁体   English   中英

Emacs宏以Shell模式启动并运行命令

[英]Emacs Macro to Start in Shell Mode and Run a Command

我有一个坦白:我不知道Lisp。 尽管如此,在一些同事的帮助下,我设法写了一个emacs宏/脚本:

  1. 切换到shell模式(即Mx shell模式)
  2. 禁用截断线(即Mx切换截断线)
  3. 启动了一个数据库控制台(即“mysql”)

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

但问题出在这里:我改变了工作并将这个脚本抛在身后。 现在我非常想在我的新工作中重新创建该脚本,但我不再有任何emacs专家来帮助我像在旧工作中那样编写它。

现在,我真的讨厌SO帖子,有人基本上说“请为我写代码”,所以我不想这样做。 但是,如果任何emacs宏专家至少可以给我一些指针(比如“这里是你如何在宏中调用Mx命令”),或者指向一个emacs-macro-writing指南,或者“教我钓鱼”在这个问题上,我将不胜感激。

...如果有人恰好有一个类似的脚本已经躺在他们想要发布,我当然不会抱怨;-)

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

(toggle-truncate-lines)

谣言是真实的,在口齿不清中,你只是将括号分散开来并且制造魔法。

现在在这种情况下,你可以做得更好。 切换对于交互式功能是有意义的,但是在程序中,您实际上并不想切换截断线,而是想要打开截断线。 如果截断行开始时关闭它也是一样的,但是你不知道下一次运行程序的时间。 无论如何,在Emacs中,功能通常由变量控制。 在这种情况下,变量是truncate-lines ,要打开该功能,可以将变量设置为t (表示为true)。

为此,请使用:

(setq truncate-lines t)

我们使用setq而非=用于分配,因为他们做了LISP之前=被发明了。

对于真正的独家新闻,您应该看看Robert Chassel的优秀“Emacs Lisp编程入门”。 它内置了你的emacs,你可以使用Ch im Emacs Lisp Intro来实现它。

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

例如,如果您使用f3开始录制键盘宏,然后以交互方式执行所需的所有操作并使用f4终止宏,您可以使用Mx edit-kbd-macro f4查看底层的emacs-lisp命令(最后一个f4是你用来执行键盘宏的键绑定)

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

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

这应该给你类似下面的脚本,你可以使用emacs --load myscript.el调用它

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

当然,这可能不会在第一次时按预期工作,因此您可能需要eval (setq debug-on-error t)来获取调试信息。

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

在Emacs 24中,我有Mx sql-mysql ,它可以执行您提出的所有操作并具有字体锁定功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM