1

我的 .emacs 文件(emacs 23.4.1)包含 python 和 latex 相关代码。两者都有 eval-after-load(我希望在 emacs 启动时只执行一次的代码)和钩子。其中一个相关的部分是:

(setq py-install-directory "~/.emacs.d/python-mode.el-6.1.3")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

(defun my-eval-after-load-python()
  (setq initial-frame-alist '((top . 48) (left . 45) (width . 142) (height . 57)))
  (split-window-horizontally (floor (* 0.49 (window-width)))))

(eval-after-load "python-mode" '(my-eval-after-load-python))

所有钩子都可以正常工作,但 my-eval-after-load-python 不能,这会导致每次 emacs 为每个扩展名启动时,框架都会分成两个窗口(例如:emacs file.py、emacs file.tex、emacs文件)。我试图将其更改为:

(eval-after-load "python-mode" 
  '(progn  
     (setq initial-frame-alist '((top . 48) (left . 45) (width . 142) (height . 57)))
     (split-window-horizontally (floor (* 0.49 (window-width))))

,但它仍然不起作用。这里可能有一个初学者错误,但我找不到它。如何在第一次打开 python 脚本(emacs file.py)而不是每次打开新的缓冲区 file2.py 时拆分窗口?

4

3 回答 3

2

听起来(load "python-mode")“每次 emacs 为每个扩展启动”都会发生某些事情(我不确定您的实际意思是什么)。

您的代码也很奇怪,因为您强制加载 python-mode require,然后评估eval-after-load同一个库,即使您知道它肯定已经加载。这仍然有效,但很奇怪。人们倾向于使用eval-after-load避免预先加载某些东西(让自动加载按需处理它,但当时仍然运行自定义代码)。

编辑:哦,你的意思是当你启动Emacs 时它会评估你的eval-after-load代码?那是因为你告诉它——你加载了 python 模式,然后告诉 Emacs 如果/当 python 模式被加载时,将屏幕一分为二。

于 2014-12-05T08:25:05.747 回答
0

也许引入一些布尔值

(defvar my-action-done nil)

将它们置于非零以下动作和

(除非我的行动完成...

于 2014-12-05T07:52:51.853 回答
0

(require 'python-mode)一开始就做对了,所以 python-mode 总是在你到达(eval-after-load "python-mode" ...)部件之前被加载。我认为你my-eval-after-load-python的意思不是在加载 python-mode时加载,而是在输入python-mode 时加载。所以你想使用

(add-hook 'python-mode-hook #'my-eval-after-load-python)
于 2014-12-05T13:55:28.987 回答