Cygwin Bash не отображается правильно в оболочке Emacs - PullRequest
21 голосов
/ 12 марта 2012

Я пытаюсь Cygwin с Emacs.Моя среда - Windows 7 x64, emacs-24.0.93.1, cygwin 2.769, система кодирования gbk, система кодирования cygwin по умолчанию - utf-8, а система кодирования emacs - gbk

, я использую setup-cygwin для настройки cygwin с помощью emacs.И я могу запустить оболочку emacs, используя cygwin bash. Но я столкнулся с двумя проблемами.Во-первых, два предупреждения в начале 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 ]

11 голосов
/ 20 апреля 2012

«Известная проблема», решение которой пока неизвестно (пока):

http://emacswiki.org/emacs/NTEmacsWithCygwin

http://comments.gmane.org/gmane.os.cygwin/132165

1 голос
/ 20 апреля 2012

Если больше ничего не работает, вы можете настроить приглашение оболочки для случая, когда вы запускаете M-x shell, используя следующие функции:

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

Emacs отправляет новой оболочке содержимое файла ~/.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 переменная окружения).

1 голос
/ 12 марта 2012

Добавьте это к вашему init:

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

Что касается вашего другого сообщения, я сам начал получать это только недавно. Я какое-то время запускал emacs / cygwin / bash и пока не уверен, что его вызвало.

0 голосов
/ 16 ноября 2014

Только что столкнулся и решил эту проблему, установив 64-битный Cygwin для моей 64-битной Win7 (ранее был 32-битной).Выберите Cygwin setup в соответствии с вашей версией Windows.

Как узнать версию 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.

Несколько замечаний:

  • 64-разрядная установка cygwin в c: \ cygwin64 по умолчанию (возможно, потребуется обновить PATH )
  • Пути в emacs-w32 указываются с использованием путей в стиле Unix ("/ bin / bash")
  • По умолчанию emacs-w32 кажетсяиспользуйте sh в качестве оболочки - вы можете изменить это в .emacs , установив explicit-shell-file-name: (setq explicit-shell-file-name "/bin/bash")
  • Если вы видите забавный управляющий символ (например, * 1043)* и так далее) вы, вероятно, захотите изменить PS1 в .bash_profile
  • Возможно, вам придется явно создать домашний каталог, прежде чем вы сможете изменить ~ /.bash_profile : mkdir /home/<username>

Надеюсь, это поможет.

0 голосов
/ 22 марта 2013

То, что вы видите, это то, что Emacs задыхается от некоторых управляющих кодов в вашей переменной PS1. Вот почему вы постоянно видите этот мусор перед печатью вашего приглашения.

Обход

Добавьте это в ваш .bashrc, чтобы получить неожиданное приглашение при запуске оболочки из Emacs:

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

Это решение основано на: http://cygwin.com/ml/cygwin/2006-06/msg00491.html

Я просто использую гораздо более простую PS1.

0 голосов
/ 04 декабря 2012

запуск нового терминала (bash) с strace -o bash.log bash может помочь отладить эту проблему. Похоже, что какое-то устройство, которое пытается открыть bash, не имеет соответствующих разрешений или даже не существует.

grep ваш файл bash.log для любых строк / dev и проверьте, есть ли там какие-либо проблемы. Например, мой bash открывается / dev / tty:

$ grep "/dev" bash.log
open("/dev/tty", O_RDWR|O_NONBLOCK)     = 3
0 голосов
/ 06 октября 2012

Что касается странных символов, я понял, что у меня есть этот кусок кода, возиться:

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

И это приводило к сбою большинства команд, потому что он добавлял спецификацию () к вызову команды:

     ----------------------------------------------------------
     -*- 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.
...