2

我对 emacs 和 Lisp 非常陌生,尽管从使用其他函数式语言的经验来看,模仿我在有用的代码片段中看到的内容对我来说并不难。我在 .emacs 文件中添加了一些不错的窗口切换功能,它们运行良好。

但是在启动时,我想配置一个特定的窗口/框架排列。基本上,我想在每次启动 emacs 时执行以下操作(通常每天最多一次,然后保持打开数天/数周)。

1. Split the screen in half (C-x 2)
2. Grow the top half bigger by 20 lines (C-u 20 C-x ^)
3. Open a second frame of emacs (C-x 5 2)

理想情况下,我什至想最大化左显示器上的第一帧和右显示器上的第二帧,但我可以不这样做。

我只是想知道您如何将等效于键命令的功能写入 .emacs 文件。

4

3 回答 3

5

作为 event_jr 答案的后续,有趣的是,(kbd)可以直接将返回值作为键盘宏进行评估。这可以分配给一个键作为定义常规键盘宏的替代方法,但在您的情况下 - 您希望放置在 .emacs 文件中的一次性序列,其中效率不是问题 - 您可能会发现最好以友好的kbd格式写出键序列(并带有注释,因为kbd处理这些)而不是 的输出insert-kbd-macro,如果不调用宏编辑器就很难理解。

(execute-kbd-macro (kbd "
 C-x 2           ;; split-window-below
 C-u 20 C-x ^    ;; enlarge-window
 C-x 5 2         ;; make-frame-command
"))

在这里,我刚刚复制并粘贴了键盘宏编辑器的输出,如 event_jr 所示,因此请注意,您可以使用该工具自动生成注释 :)

也就是说,我个人鼓励您编写诸如真正的函数调用之类的东西:

(split-window-below)
(enlarge-window 20)
(make-frame-command)
于 2012-09-20T14:51:23.683 回答
3

Emacs中最好的功能是自文档帮助,因此您可以通过其他语言的经验轻松弄清楚如何在 Emacs-lisp 中编写所需的命令。

但是因为你想要的是一个直接的键序列,一个宏会为你提供最好的服务,它为你提供了一个开始写作的好地方

这是我输入的键序列:

 C-x (  C-x 2 C-u 2 0 C-x ^ C-x 5 2 <switch-frame> C-x ) 

我已经录制了一个宏来执行您的要求。然后M-x edit-last-kbd-macro,我看到:

;; Keyboard Macro Editor.  Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: C-x 2 C-u 20 C-x ^ C-x 5 2

Command: last-kbd-macro
Key: none

Macro:


C-x 2           ;; split-window-below
C-u 20 C-x ^        ;; enlarge-window
C-x 5 2         ;; make-frame-command

然后M-x name-last-kbd-macro"foo" M-x insert-kbd-macro"foo"

(fset 'foo
   [?\C-x ?2 ?\C-u ?2 ?0 ?\C-x ?^ ?\C-x ?5 ?2 (switch-frame #<frame  *Minibuf-1* 0x101855410>)])

将最后一个块添加到您的 .emacs 文件中,并使用

(foo)
于 2012-09-20T13:33:32.190 回答
2

有一种更“成熟”的方式来配置框架和窗口配置。有三个相关的功能:

C-x r f         frame-configuration-to-register
C-x r w         window-configuration-to-register
C-x r j         jump-to-register

跳转到包含框架/窗口配置的寄存器将加载该框架/窗口配置。

窗口配置不是每帧,它(似乎)适用于所有帧。我没有测试框架配置,因为它们在 xmonad 下似乎不起作用。

但是,我不知道您如何在会话之间实际保存它们,所以这更像是一个仅供参考。

于 2012-09-20T14:22:01.647 回答