Emacs终端列宽(julia / python shell)

时间:2015-07-21 19:47:37

标签: python shell emacs julia

我正在尝试将Emacs用作Julia&amp ;;的集成计算环境。蟒蛇。 ESS(Emacs Speaks Statistics)是我用来交互式发送选定代码以进行REPL评估的插件。

C-c C-c选择代码并在第一次使用组合时启动Julia解释器,在后续执行中使用现有的Julia会话。

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

例如,如果在Julia会话中执行以下代码,则会在包含80列的三个组中打印DataFrame df。即使我的窗口大小可以轻松处理超过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 shell Julia内手动启动M-x shell会话,甚至会导致80列换行。

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

变通方法/潜在罪魁祸首

如果我在stty size上执行OS X Terminal,我会得到适当的输出,表示终端的实际大小,例如24 157

但是如果我在Emacs shell stty size中执行M-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设置。
  3. 我甚至在Linux机器(CentOS)上试过这个,我也有同样的问题。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在我正在看的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