我承认:我不了解Lisp。尽管如此,在一些同事的帮助下,我还是成功地编写了一个emacs宏/脚本:
- 切换到外壳模式(即M-x外壳模式)
- 禁用截断线(即M-x切换截断线)
- 启动数据库控制台(即"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
,它可以满足您的所有要求,并具有字体锁定。