Emacs终端列宽(茱莉亚/ python外壳)

问题描述:

我试图使用Emacs作为Julia的集成计算环境& Python。 ESS(Emacs Speaks Statistics)是我用来交互发送REPL评估选定代码的插件。Emacs终端列宽(茱莉亚/ python外壳)

C-c C-c选择代码,并开始Julia解释首次组合使用,在后续执行它使用现有Julia会话。

我面临的挑战是Julia的终端窗口(即使是Python也是如此)出于某种原因仅使用80 columns作为输出。

例如,如果在Julia会话中执行以下代码,将以三列打印DataFrame df,这三个组包装在80列。即使我的窗口大小可以轻松处理超过200个字符。

using DataFrames 
df=readtable("../../data/titanic/data/train.csv") 


julia> df[1:2, :] 
2x12 DataFrame 
| Row | PassengerId | Survived | Pclass | 
|-----|-------------|----------|--------| 
| 1 | 1   | 0  | 3  | 
| 2 | 2   | 1  | 1  | 

| Row | Name             | Sex  | 
|-----|-------------------------------------------------------|----------| 
| 1 | "Braund, Mr. Owen Harris"        | "male" | 
| 2 | "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" | "female" | 

| Row | Age | SibSp | Parch | Ticket  | Fare | Cabin | Embarked | 
|-----|------|-------|-------|-------------|---------|-------|----------| 
| 1 | 22.0 | 1  | 0  | "A/5 21171" | 7.25 | NA | "S"  | 
| 2 | 38.0 | 1  | 0  | "PC 17599" | 71.2833 | "C85" | "C"  | 

我甚至尝试手动发射了Emacs的外壳M-x shellJulia会话,甚至将导致80列包装。

但是,如果我在Julia会话中执行的相同代码将在正常Mac OSX Terminal内运行,将会正确使用终端的整个宽度。

解决方法/潜在的罪魁祸首

如果我执行上stty sizeOS X Terminal我得到这代表我的终端例如24 157的实际大小适当的输出。

但是如果我在Emacs shell里执行stty sizeM-x shell我得到0 0。不管Emacs窗口的大小是什么,Emacs里的stty的结果总是0 0

当我手动更改stty设置,比如说stty rows 24 cols 160,然后执行julia我能够从julia获得我的输出以消耗全部160列。

问题

  1. 我怎样才能让Emacs的动态调整的stty(设置)或任何机构,将给予预期的结果。
  2. 如果#1是不可能的,这是一个妥协,我必须处理的是可以在.emacs文件中设置静态stty设置,默认情况下会使用它。

我甚至在Linux机器(CentOS)上试过这个,我也有同样的问题。

感谢您的帮助。

在我看到的emacs M-x shell中,有一个EMACS = t envvar,您可以使用它从.bashrc或同等设置中执行stty设置。但是,如果您使用“Mx ansi-term”,则完全支持终端大小调整,包括动态调整大小,严重终端仿真等。更多信息:https://masteringemacs.org/article/running-shells-in-emacs-overview - 如果可能的话,我会强烈推荐此路径假设没有人知道更好的一个)。

希望你能够使用ansi-term,但是如果需要M-x shell,那么可能会比.profile或.bashrc这样的行有效。缺点是它会按用户使用,而用户在这些脚本中做了大不相同的事情。

[ _"$EMACS" = _t ] && stty cols 160