Ответ 1
"Известная проблема", без известного решения (пока):
Я пытаюсь 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 появились некоторые странные символы.
Кто-нибудь знает, что произошло?
"Известная проблема", без известного решения (пока):
Добавьте это в свой init:
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Что касается вашего другого сообщения, я начал получать его сам только недавно. Я запустил emacs/cygwin/ bash какое-то время, и я еще не уверен, что вызвало его.
Если ничего не работает, вы можете настроить приглашение оболочки для случая, когда вы используете 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
).
Что касается странных персонажей, я понял, что у меня есть этот фрагмент кода:
; 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.
Запустить новый терминал (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
Что вы видите, Emacs задыхается от некоторых управляющих кодов в вашей переменной PS1. Вот почему вы постоянно видите этот мусор перед тем, как будет напечатано ваше сообщение.
Обход
Добавьте это в свой .bashrc, чтобы получить подсказку, когда вы запускаете оболочку из Emacs:
if [ "$EMACS" == "t" ]; then
PS1='\u \w>'
fi
Это решение основано на: http://cygwin.com/ml/cygwin/2006-06/msg00491.html
Я использую гораздо более простой PS1.
Только что столкнулась и решила эту проблему, установив 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.
Несколько примечаний:
explicit-shell-file-name
: (setq explicit-shell-file-name "/bin/bash")
^G
и т.д.), вы, вероятно, захотите изменить PS1 в .bash_profilemkdir /home/<username>
Надеюсь, что это поможет.