如何在in.emacs上创建特定的窗口设置

如何在in.emacs上创建特定的窗口设置,emacs,startup,key-bindings,Emacs,Startup,Key Bindings,我对emacs和Lisp非常陌生,不过从其他函数式语言的经验来看,模仿我在有用的代码片段中看到的东西并不难。我在.emacs文件中添加了一些不错的窗口切换功能,它们工作得很好 但在启动时,我想配置一个特定的窗口/框架安排。基本上,每次启动emacs时,我都想做以下工作(通常每天最多一次,然后几天/几周内保持打开状态) 理想情况下,我甚至想最大化左显示器上的第一帧和右显示器上的第二帧,但我可以不这样做 我只是想知道如何将与键命令等效的函数写入.emacs文件。emacs中的最佳功能是自文档帮助,因

我对emacs和Lisp非常陌生,不过从其他函数式语言的经验来看,模仿我在有用的代码片段中看到的东西并不难。我在.emacs文件中添加了一些不错的窗口切换功能,它们工作得很好

但在启动时,我想配置一个特定的窗口/框架安排。基本上,每次启动emacs时,我都想做以下工作(通常每天最多一次,然后几天/几周内保持打开状态)

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


我只是想知道如何将与键命令等效的函数写入.emacs文件。

emacs中的最佳功能是自文档帮助,因此您可以轻松地 了解如何在Emacs lisp中编写所需的命令,并具有以下方面的经验: 其他语言

但因为你想要的是一个直接的键序列,一个宏 这将为您提供最佳服务,并为您提供一个开始写作的好地方

以下是我输入的一个键序列:

 C-x (  C-x 2 C-u 2 0 C-x ^ C-x 5 2 <switch-frame> C-x ) 
然后M-x命名最后一个kbd宏“foo”M-x插入kbd宏“foo”


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

C-x r f         frame-configuration-to-register
C-x r w         window-configuration-to-register
C-x r j         jump-to-register
跳转到包含帧/窗口配置的寄存器将加载该帧/窗口配置

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


但是,我不知道在会话之间如何实际保存它们,因此这更像是供参考。

作为event_jr回答的后续,有趣的是,可以将
(kbd)
的返回值作为键盘宏直接计算。这可以作为定义常规键盘宏的一种替代方法,但在您的情况下(您希望在.emacs文件中放置一个一次性序列,其中效率不是一个问题),您可能会发现以友好的
kbd
格式(并带有注释,因为
kbd
处理这些内容)写出键序列更好而不是插入kbd宏的输出,这在不调用宏编辑器的情况下更难理解

(执行kbd宏(kbd)
C-x 2;;下面的拆分窗口
C-u 20 C-x;放大窗口
C-x 5 2;;生成帧命令
"))
这里我刚刚复制并粘贴了键盘宏编辑器的输出,如event_jr所示,因此请注意,您可以使用该功能自动生成注释:)

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

(下面的拆分窗口)
(放大窗口20)
(生成帧命令)

最简单的方法是按
C-hk
,然后按第一个示例中的组合键(
C-x2
),查看这些键调用的函数。这将为您提供该键正在调用的函数名,然后您可以在.emacs文件中调用该函数名。对于
C-x 2
而言,功能是下面的
拆分窗口。谢谢!我没有想过要寻求这样的帮助,当我在谷歌上搜索的时候,很难找到任何具体的帮助。我相信这是一个复制品,我认为这绝对是不同的。这不仅仅是窗口配置,尽管这是我的具体案例。这个问题是关于在.emacs文件中输入您通常使用的键组合作为实际函数。您的链接问题只是关于保存窗口配置。实际上,这可能是一个很好的方法。请注意,
切换帧
事件(这是一个带有帧参数的复杂事件)将不起作用,因为您无法保存和重新加载帧描述(无法读回
#
),因此如果您将上述内容放在.emacs中,emacs将在启动时抱怨此未知内容#我同意,特别是在我学习函数的编程方面。很酷的提示执行kb宏。
;; 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
(fset 'foo
   [?\C-x ?2 ?\C-u ?2 ?0 ?\C-x ?^ ?\C-x ?5 ?2 (switch-frame #<frame  *Minibuf-1* 0x101855410>)])
(foo)
C-x r f         frame-configuration-to-register
C-x r w         window-configuration-to-register
C-x r j         jump-to-register