Подтвердить что ты не робот

Cygwin bash не отображается правильно в оболочке emacs

Я пытаюсь 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

Кто-нибудь знает, что произошло?

4b9b3361

Ответ 2

Добавьте это в свой init:

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

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

Ответ 3

Если ничего не работает, вы можете настроить приглашение оболочки для случая, когда вы используете 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).

Ответ 4

Что касается странных персонажей, я понял, что у меня есть этот фрагмент кода:

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

И это приводило к тому, что большинство команд терпело неудачу, потому что они добавляли спецификацию () в команду 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.

Ответ 5

Запустить новый терминал (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

Ответ 6

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

Обход

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

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

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

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

Ответ 7

Только что столкнулась и решила эту проблему, установив 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")
  • Если вы видите смешной управляющий символ (например, ^G и т.д.), вы, вероятно, захотите изменить PS1 в .bash_profile
  • Вам может потребоваться явно создать домашний каталог, прежде чем вы сможете изменить ~/.bash_profile: mkdir /home/<username>

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