Тогда M-xgit-bashи вуаля, bash работает, но со странностями:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
^[]0;MINGW64:/c/Users/M??rton^G
MĂĄrton@Marci MINGW64 /c/Users/MĂĄrton
$
и она печатает эту строку, начиная с ^[]каждой команды, которую я запускаю. Также кодировка испорчена. Как я могу это исправить .emacs?
^[]Шум исходит от различных управляющих символов терминала в вашем приглашении оболочки. Попробуйте echo $PS1просмотреть полную последовательность и, например, попытаться export PS1='$ 'увидеть, что более простая строка приглашения устраняет эту конкретную проблему.
Для кодировки вы можете попробовать сделать utf-8 предпочитаемой кодировкой:
(prefer-coding-system 'utf-8)
Настройка приглашения
Emacs устанавливает переменную INSIDE_EMACS, чтобы вы могли создать .bash_profile, который устанавливает PS1 только при работе в Emacs.
При тестировании на моей машине первая строка подсказки содержит проблемные управляющие символы. Я создал ~ / .bash_profile с этим.
if [ -n "$INSIDE_EMACS" ]; then
export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi
Это устанавливает приглашение на основе того, что git-bash было установлено по умолчанию, но я удалил первую строку (до \ n разрыва строки). Я также удалил $ MSYSTEM, который помещает MINGW64 в приглашение - мне не нужно это видеть. Остается только user @ host, текущий каталог и git repo. Управляющие символы устанавливают цвета, которые Emacs отображает для меня правильно. (Подробнее о настройке вашего приглашения см. Руководство по bash .)
Это работает, спасибо! Что делает эта (для меня загадочная) линия PS1? Можете ли вы помочь автоматически установить кодировку буфера оболочки в utf-8? ( MĂĄrtonследует прочитать Márton)
marczellm
PS1 в моем примере был получен из установленного по умолчанию одного git-bash. Я просто удалил все до разрыва строки (\ n). Он использует эти управляющие последовательности для изменения цвета различных отображаемых битов информации - текущего пользователя, хоста, git-репо и т. Д. Я должен был бы отследить документацию по bash PS1 для получения подробной информации. Для utf-8, что default-process-coding-systemустановлено в вашем Emacs?
glucas
Я нашел это в руководстве по Emacs: «Чтобы указать систему кодирования для оболочки, вы можете использовать команду Cx RET c непосредственно перед оболочкой Mx. Вы также можете изменить систему кодирования для работающей подоболочки, набрав в оболочке Cx RET p буфер «. (см. gnu.org/software/emacs/manual/html_node/emacs/… )
glucas
Его значение (undecided-dos . undecided-unix). Я ищу способ установить кодировку буфера автоматически вместо того, чтобы каждый раз вспоминать другой набор нажатий клавиш при его открытии. Может быть, я должен задать новый вопрос.
marczellm
У меня есть utf-8 и UNIX. Я не устанавливаю это явно, но у меня есть эти настройки: (предпочитаемая-coding-system 'utf-8) (setq-default buffer-file-coding-system' utf-8-unix)
glucas
1
Эта ошибка указывает на несовпадающий переключатель. Это, вероятно, установлено, -icи вам нужно просто -c:
(setq shell-command-switch "-c")
Другой вариант - предоставить tty для git-bash командой, аналогичной (что бы ни было эквивалентно windows):
Ваше первое предложение ничего не меняет. Более того, M-x list-processesпоказывает, что это не имело никакого эффекта: команда процесса есть D:/Program Files/git/bin/bash --noediting -i. Ваше второе предложение я не могу понять.
marczellm
1
Это потому, что вы не удалили ключ -i.
Emacs User
Хорошо, так как я могу удалить это?
marczellm
1
Вы используете, explicit-shell-file-nameтак что я думаю, что вы хотели бы установить, например (setq explicit-bash-args '("--login" "-i")).
glucas
1
Я знаю, что это не совсем то же самое, что OP, но я думаю, что это интересный вариант. Вы можете запустить emacs из командной строки git-bash. Это заставит emacs принять git-bash в качестве оболочки.
Введите в командной строке bash что-то вроде следующего
MĂĄrton
следует прочитатьMárton
)default-process-coding-system
установлено в вашем Emacs?(undecided-dos . undecided-unix)
. Я ищу способ установить кодировку буфера автоматически вместо того, чтобы каждый раз вспоминать другой набор нажатий клавиш при его открытии. Может быть, я должен задать новый вопрос.Эта ошибка указывает на несовпадающий переключатель. Это, вероятно, установлено,
-ic
и вам нужно просто-c
:Другой вариант - предоставить tty для git-bash командой, аналогичной (что бы ни было эквивалентно windows):
источник
M-x list-processes
показывает, что это не имело никакого эффекта: команда процесса естьD:/Program Files/git/bin/bash --noediting -i
. Ваше второе предложение я не могу понять.explicit-shell-file-name
так что я думаю, что вы хотели бы установить, например(setq explicit-bash-args '("--login" "-i"))
.Я знаю, что это не совсем то же самое, что OP, но я думаю, что это интересный вариант. Вы можете запустить emacs из командной строки git-bash. Это заставит emacs принять git-bash в качестве оболочки.
Введите в командной строке bash что-то вроде следующего
Тогда в Emacs Mx "shell"
источник