我的.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时都会拆分窗口?
答案 0 :(得分:2)
听起来有些事情导致(load "python-mode")
发生“每次emacs都会为每个分机启动”(我不确定你的意思是什么)。
您的代码也很奇怪,因为您强行使用require
加载python-mode,然后随后为同一个库评估eval-after-load
,即使您知道它已经被加载了。这仍然有效,但这很奇怪。一个人倾向于使用eval-after-load
避免预先加载某些东西(让自动加载按需处理它,但仍然在那时运行自定义代码)。
编辑:哦,你的意思是,当你开始 Emacs时,它会评估你的eval-after-load
代码吗?那是因为你告诉它 - 你加载了python模式,然后告诉Emacs如果/当加载python模式时,将屏幕分成两部分。
答案 1 :(得分:0)
可能会引入一些布尔值
(defvar my-action-done nil)
在行动和
之后将它们设为非零(除非我的动作完成 做......
答案 2 :(得分:0)
你在开头做(require 'python-mode)
,所以在你到达(eval-after-load "python-mode" ...)
部分之前总是加载python-mode。我认为你的my-eval-after-load-python
并不意味着在python-mode 加载时加载,但是当python-mode 输入时。所以你想使用
(add-hook 'python-mode-hook #'my-eval-after-load-python)