Emacs aquamacs中的评估区域ipython解释器

Emacs aquamacs中的评估区域ipython解释器,emacs,elisp,ipython,aquamacs,python.el,Emacs,Elisp,Ipython,Aquamacs,Python.el,我正在尝试让Aquamacs 3.0a GNU Emacs 24.3.50.2与iPython 1.2.0作为解释器一起工作。我能够使用python.el中的指令让iPython基本上正常工作。特别是,我在我的.emacs文件中添加了顶部答案中给出的设置,但我仍然看到一些奇怪的行为 注意:my.emacs文件中的设置显然是针对iPython 0.11,而不是1.2.0,这可能是问题的根源。我不是一个lisp专家,所以任何与此相关的帮助都将不胜感激 这里有一个我能够重现的症状:^C^R(eval

我正在尝试让Aquamacs 3.0a GNU Emacs 24.3.50.2与iPython 1.2.0作为解释器一起工作。我能够使用python.el中的指令让iPython基本上正常工作。特别是,我在我的.emacs文件中添加了顶部答案中给出的设置,但我仍然看到一些奇怪的行为

注意:my.emacs文件中的设置显然是针对iPython 0.11,而不是1.2.0,这可能是问题的根源。我不是一个lisp专家,所以任何与此相关的帮助都将不胜感激

这里有一个我能够重现的症状:^C^R(eval region)命令可能会在解释器中生成大量空白“In[X]:”。为了重现aquamacs中的问题,我创建了一个名为
test.py
的文件,并将以下代码放入其中:

spam = "spam "
spam = spam + spam
spam = spam + spam
print spam
然后我键入^C^p(启动解释器),返回到
test.py
buffer,然后键入^C^C(eval buffer)。输出为:

(... iPython startup message ...)

In [1]: 
In [2]: 
In [3]: 
In [4]: spam spam spam spam 

In [5]: 
这一切都很好。但我突出显示最后一行
打印垃圾邮件
,然后键入^C^R。输出:

In [5]: 
In [5]: 
In [5]: 
奇怪,不是吗?文件越长,情况就越糟。即使活动区域是一行,我也经常看到15行或更多的空白“In[X]:”行

^C^R(eval region)命令可能会在[X]中生成大量空白“In: 从我的口译员那里

以下是我对这个问题的理解。您看到的是在
comint模式下如何计算代码的副作用(这是一种通用模式,python模式的repl是在该模式之上编写的)

基本上,它将您选择的字符串按原样发送给下级进程(包括换行符等),然后接收下级进程的输出并将其打印到emacs comint缓冲区(您在emacs中打开的repl)。python代码

spam = "spam "
spam = spam + spam
spam = spam + spam

不产生任何输出,这就是为什么你看到空白“in [x]:”行。

这一切都很好。然后我突出显示最后一行打印垃圾邮件和 然后键入^C^R。输出:

In [5]: 
In [5]: 
In [5]: 
在执行C-cC-r之后,如果切换到python repl并按enter键,您将实际得到打印输出。我想问题在于python模式没有将最后的
换行符
(触发计算)添加到发送给命令解释器的字符串中。我能够将这个问题追溯到
python.el
中的函数
pythonshellsendstring
(Doc-hf
pythonshellsendstring
RET,您将在帮助缓冲区中看到一个指向
python.el
的链接,单击它,emacs将带您到函数的定义)。在函数的末尾,我们有以下几行

(when (or (not (string-match "\n$" string))
                (string-match "\n[ \t].*\n?$" string))
        (comint-send-string process "\n"))
似乎这会检查刚刚发送的字符串是否有一个最后的
换行符
,如果没有,它会显式发送一个
换行符
,对于单行字符串,此检查失败,python模式从不插入最后一个换行符。这似乎是一个bug,可能这是在emacs主干中修复的,需要检查

更新

我可以确认这已在emacs中继中修复。事实上,您报告的两个问题都已解决

更新

现已弃用的python.el具有获取库的最新版本的说明

1) 从该站点下载最新版本

2) 通过向init文件中添加类似的内容,将下载了
python.el
的目录添加到加载路径

(add-to-list 'load-path "<name_of_the_directory>")

谢谢你能描述一下如何更新到最新版本吗?它只是一个新的python.el文件吗?@mikemcoy,python.el的github repo[(现已弃用)有安装说明。您似乎只需要从这里下载python.el文件并将其添加到加载路径。@mikemcoy我已经更新了答案,如果您遇到任何问题,请告诉我。