Python Emacs:始终执行加载后评估代码

Python Emacs:始终执行加载后评估代码,python,emacs,elisp,eval-after-load,Python,Emacs,Elisp,Eval After Load,My.emacs文件(emacs 23.4.1)包含python和latex相关代码。对于这两种代码,都有eval-after-load(我希望在emacs启动时只执行一次的代码)和hook。其中一个相关部分是: (setq py安装目录“~/.emacs.d/python mode.el-6.1.3”) (添加到列表的加载路径py安装目录) (需要“python模式”) (defun my-eval-after-load-python() (setq初始帧列表'((顶部48)(左侧45)(宽度

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

(setq py安装目录“~/.emacs.d/python mode.el-6.1.3”)
(添加到列表的加载路径py安装目录)
(需要“python模式”)
(defun my-eval-after-load-python()
(setq初始帧列表'((顶部48)(左侧45)(宽度142)(高度57)))
(水平剖分窗(地板(*0.49(窗宽(()()))))
(加载“python模式”后的评估(加载python后的我的评估))
所有钩子都可以正常工作,但加载python后我的eval不能正常工作,这导致每次emacs为每个扩展启动时,框架都会被拆分为两个窗口(例如:emacs file.py、emacs file.tex、emacs file)。我尝试将其更改为:

(加载后评估“python模式”
"(progn)
(setq初始帧列表'((顶部48)(左侧45)(宽度142)(高度57)))
(水平拆分窗(地板(*0.49(窗宽)))

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

可能会引入一些布尔值

(defvar我的操作已完成无)

在操作之后将其设置为非零,然后

(除非我的行动完成
do…

听起来好像有什么事情导致了
(加载“python模式”)
发生了“每次emacs为每个扩展启动时”(我不确定您的实际意思)

您的代码也很奇怪,因为您使用
require
强制加载python模式,然后在加载后对同一个库进行
eval
评估,即使您知道它肯定已经加载了。这仍然有效,但很奇怪。人们倾向于使用
eval after load
来避免加载某些库预先编译(允许自动加载按需处理,但此时仍在运行自定义代码)

编辑:哦,你的意思是当你启动Emacs时,它会在加载代码后对你的
进行评估吗?那是因为你告诉它——你加载了python模式,然后告诉Emacs如果加载了python模式,就把屏幕一分为二。

你会这样做
(需要“python模式”)
就在开头,所以python模式总是在你进入
(加载后求值“python模式”…)
部分之前加载。我想你的
我的加载后求值python
不是在加载python模式时加载的,而是在进入python模式时加载的。所以你想使用

(add-hook 'python-mode-hook #'my-eval-after-load-python)

去掉上面所有与问题无关的代码——所有的latex代码和大部分python代码。只需提供一个简单、精简、最少的代码和一个完整的方法来重新处理问题,从
emacs-Q
开始。我的猜测是:您不想在
My eval之后运行这些代码-加载python包后,但加载第一个python文件后,加载python
。因此,您应该将
my eval after load python
钩住到
python模式钩子中。也许,您应该根据是否已调用它(通过设置标志并测试它)有条件地对其进行评估。我不希望每次使用不同的.py文件打开缓冲区时都调整窗口的大小。您的第二个解决方案很好,但似乎我正在寻找的是自动加载。这很完美!您理解正确,这很愚蠢。使用
自动加载
而不是
require
保存了我的代码,谢谢。