我有一个忏悔:我不知道Lisp。尽管如此,在一些同事的帮助下,我设法编写了一个emacs宏/脚本:
然后我可以使用--script选项启动带有该宏的emacs,突然间我有一种方法可以在一个更友好的环境中用一个命令启动mysql: - )
但问题在于:我改变了工作并将该脚本抛在了后面。现在我非常想在我的新工作中重新创建该脚本,但我不再有任何emacs专家来帮我写出来,就像我在旧工作中那样。
现在,我真的很讨厌有人基本上说“请为我写代码”的帖子,所以我不想这样做。但是,如果任何emacs宏专家至少可以给我一些指针(比如“这里是你如何在宏中调用Mx命令”),或者指向一个emacs-macro-writing指南,或者“教我钓鱼”在这个问题上,我将不胜感激。
...如果有人恰好有类似的脚本已经躺在他们想要发布的地方,我当然不会抱怨; - )
答案 0 :(得分:5)
大多数emacs命令(即M-x toggle-truncate-lines
)可以通过将它们括在括号中直接翻译成elisp:
(toggle-truncate-lines)
谣言是真实的,在口齿不清中,你只是将括号分散开来并制造魔法。
现在在这种情况下,你可以做得更好。切换对于交互式功能是有意义的,但是在程序中,您实际上并不想切换截断线,您希望打开截断线。如果截断行开始时关闭它也是一样的,但是你不知道下一次运行程序的时间。无论如何,在Emacs中,功能通常由变量控制。在这种情况下,变量为truncate-lines
,要打开该功能,可以将变量设置为t
(这意味着为真)。
为此,请使用:
(setq truncate-lines t)
我们使用setq
代替=
进行分配,因为他们在=
发明之前就已经制作了lisp。
对于真正的独家新闻,你应该看看Robert Chassel出色的“Emacs Lisp编程简介”。它内置了您的emacs,您可以使用C-h i m Emacs Lisp Intro
进行访问。
答案 1 :(得分:3)
开始编写elisp函数的好方法(我认为)是记录键盘宏,然后使用edit-kbd-macro
分析它们
例如,如果您使用 f3 开始录制键盘宏,然后以交互方式执行所需的所有操作并使用 f4 终止宏,您可以看到底层emacs-lisp命令使用 Mx edit-kbd-macro
f4 (最后 f4 是您用来执行键盘的键绑定宏)
<<shell>> ;; shell
<<toggle-truncate-lines>> ;; toggle-truncate-lines
mysql ;; self-insert-command * 5
RET ;; comint-send-input
现在您可以使用这些函数编写脚本,查找文档(例如 C-h f toggle-truncate-lines
),看看是否应该在非交互模式下使用特殊参数调用它们。
您还应该通过调用self-insert-command
替换insert
。
这应该为您提供类似以下脚本的内容,您可以使用emacs --load myscript.el
(shell)
(toggle-truncate-lines 1)
(insert "mysql")
(comint-send-input)
当然,第一次这可能无法正常工作,因此您可能需要eval (setq debug-on-error t)
来获取调试信息。
答案 2 :(得分:1)
您使用的是什么版本的Emacs?
在Emacs 24中,我有 M-x sql-mysql
,它可以执行您提出的所有操作并具有字体锁定功能。