cygwin bash在emacs shell中无法正确显示

时间:2012-03-12 15:44:59

标签: bash emacs cygwin

我正在尝试使用emacs进行cygwin。 我的环境是Windows 7 x64,emacs-24.0.93.1,cygwin 2.769,系统编码是gbk,cygwin的编码系统默认为utf-8,而emacs的编码系统默认为gbk

我使用setup-cygwin 用emacs设置cygwin。 我可以使用cygwin bash启动emacs shell。但是我遇到了两个问题。 首先,在bash开头有两个警告

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

其次,在bash响应之后,出现了一些奇怪的字符。 enter image description here

有谁知道发生了什么?

7 个答案:

答案 0 :(得分:11)

答案 1 :(得分:1)

将此添加到您的init:

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

至于你的另一条消息,我最近才开始自己解决这个问题。我已经运行了emacs / cygwin / bash一段时间了,我还不确定是什么导致它。

答案 2 :(得分:1)

如果没有其他工作,您可以通过使用以下功能运行M-x shell来自定义shell提示:

M - : (info "(emacs) Interactive Shell") RET

  

Emacs向新shell发送文件内容   ~/.emacs_SHELLNAME' as input, if it exists, where SHELLNAME is the name of the file that the shell was loaded from. For example, if you use bash, the file sent to it is〜/ .emacs_bash”。如果没有这个文件   发现,Emacs尝试使用`〜/ .emacs.d / init_SHELLNAME.sh'。

因此,您可以在该文件中指定不带颜色代码的提示(即设置PS1环境变量)。

答案 3 :(得分:0)

关于奇怪的角色,我意识到我有这段代码搞乱了:

     ; Always prefer UTF-8 encoding
     ;(prefer-coding-system 'utf-8-with-signature-dos)

这导致大多数命令失败,因为它正在将BOM()添加到命令invokation中:

     ----------------------------------------------------------
     -*- mode: grep; default-directory: "~/" -*-
     Grep started at Sat Oct 06 02:53:32
     grep -nH -e test
     'grep' is not recognized as an internal or external command,
     operable program or batch file.

答案 4 :(得分:0)

使用strace -o bash.log bash启动新终端(bash)可以帮助调试此问题。 它看起来像是bash尝试打开的某些设备缺少适当的权限或者甚至不存在。

grep你的bash.log文件中的任何/ dev字符串,并检查那里是否有任何问题。 例如,我的bash打开/ dev / tty:

$ grep "/dev" bash.log
open("/dev/tty", O_RDWR|O_NONBLOCK)     = 3

答案 5 :(得分:0)

你看到的是Emacs在你的PS1变量中窒息了一些控制代码。这就是为什么你在提示被打印之前一直看到垃圾的原因。

解决方法

将此添加到.bashrc,以便在从Emacs中运行shell时给自己一个愚蠢的提示:

if [ "$EMACS" == "t" ]; then
    PS1='\u \w>'
fi

此解决方案基于: http://cygwin.com/ml/cygwin/2006-06/msg00491.html

我只是使用更简单的PS1。

答案 6 :(得分:0)

刚刚遇到并解决了这个问题,为我的64位Win7安装了 64位cygwin (以前有32位)。根据您的Windows版本选择正确的Cygwin setup

如何告诉您的Windows版本:"Start" > right-click "Computer" [right side of Start pane] > "Properties" [context menu],查找"系统类型"大约在窗户的一半。

在cygwin设置过程中,请务必选择emacs包 - 我选择"常规" emacs emacs-x11 emacs-w32 (本机为Windows编译)。据我所知, emacs-w32 的外观/感觉就像常规的Windows emacs二进制文件一样。

一些注意事项:

  • 默认情况下在 c:\ cygwin64 中安装64位cygwin(可能需要更新路径
  • emacs-w32 中的路径使用unix样式路径名指定(" / bin / bash")
  • 默认 emacs-w32 似乎使用 sh 作为shell - 您可以通过设置{{1}来更改 .emacs 中的内容}:explicit-shell-file-name
  • 如果您看到有趣的控制角色(例如(setq explicit-shell-file-name "/bin/bash")等),您可能想要更改 .bash_profile
  • 中的 PS1
  • 您可能需要明确创建家庭目录才能更改〜/ .bash_profile ^G

希望这有帮助。