Windows에서 emacs의 Git Bash


9

Git for Windows와 함께 제공되는 Bash 셸을 실행할 수 있습니다. 나는 이것을 내 안에 넣었다 .emacs.

(defun git-bash () (interactive)
  (let ((explicit-shell-file-name "D:/Program Files/git/bin/bash"))
    (call-interactively 'shell)))

그리고 M-x git-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있습니까?

답변:


10

^[]소음은 쉘 프롬프트에서 다양한 터미널 제어 문자에서오고있다. 시도 echo $PS1전체 순서를 참조하고, 예를 들면 시도 export PS1='$ '하는 간단한 프롬프트 문자열을 제거합니다이 특정 문제를 볼 수 있습니다.

인코딩의 경우 utf-8을 원하는 인코딩으로 만들 수 있습니다.

(prefer-coding-system 'utf-8)

프롬프트 설정

Emacs는 INSIDE_EMACS 변수를 설정하므로 Emacs에서 실행될 때만 PS1을 설정하는 .bash_profile을 작성할 수 있습니다.

내 컴퓨터에서 테스트 할 때 프롬프트의 첫 번째 줄에는 문제가있는 제어 문자가 있습니다. 이 ~ / .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 줄 바꿈까지). 또한 MINGW64를 프롬프트에 표시하는 $ MSYSTEM을 제거했습니다. 남아있는 것은 user @ host, 현재 디렉토리 및 git repo입니다. 제어 문자는 Emacs가 올바르게 표시하는 색상을 설정합니다. 프롬프트 설정에 대한 자세한 내용은 bash 매뉴얼을 참조하십시오 .

이맥스에서 쉘을 git-bash로 설정했습니다.

(setq explicit-shell-file-name "C:/git-for-windows/bin/bash.exe")
(setq explicit-bash.exe-args '("--login" "-i"))

이 설정으로 여전히 초기 ioctl 오류 메시지가 표시되지만 그렇지 않으면 예상대로 작동하고 인코딩은 utf-8입니다.


고마워요! PS1 회선은 무엇을 암호화합니까? 쉘 버퍼 인코딩을 utf-8로 자동 설정하는 데 도움을 줄 수 있습니까? ( MĂĄrton읽어 Márton)
marczellm

내 예제에서 PS1은 git-bash가 설정 한 기본 값에서 파생되었습니다. 방금 줄 바꿈까지 모든 것을 삭제했습니다 (\ n). 현재 사용자, 호스트, git repo 등 다양한 정보 비트의 색상을 변경하기 위해 제어 시퀀스를 사용하고 있습니다. 자세한 내용은 bash PS1 문서를 추적해야합니다. utf-8의 경우, default-process-coding-systemEmacs에서 무엇을 설정합니까?
glucas

Emacs 매뉴얼에서 이것을 찾았습니다 : "쉘에 대한 코딩 시스템을 지정하려면, Mx 쉘 바로 앞에 Cx RET c 명령을 사용할 수 있습니다. 쉘에 Cx RET p를 입력하여 실행중인 서브 쉘에 대한 코딩 시스템을 변경할 수도 있습니다 완충기." ( gnu.org/software/emacs/manual/html_node/emacs/… 참조 )
glucas

그 값은 (undecided-dos . undecided-unix)입니다. 버퍼를 열 때마다 다른 키 입력을 기억하지 않고 자동으로 버퍼 인코딩을 설정하는 방법을 찾고 있습니다. 어쩌면 나는 새로운 질문을해야한다.
marczellm

내 utf-8 dos 및 UNIX입니다. 명시 적으로 설정하지는 않았지만 다음 설정이 있습니다 : (pre-coding-system 'utf-8) (setq-default buffer-file-coding-
system'utf

1

이 오류는 일치하지 않는 스위치를 가리 킵니다. 아마 설정되어 -ic있으며 다음과 같이하면됩니다 -c.

(setq shell-command-switch "-c")

다른 옵션은 tty를 git-bash에 다음과 유사한 명령을 제공하는 것입니다 (Windows에 해당하는 것은 무엇이든).

/sbin/getty -l bash -n 38400 tty0

첫 제안은 아무 것도 변하지 않습니다. 또한 M-x list-processes아무런 영향을 미치지 않음을 보여줍니다 D:/Program Files/git/bin/bash --noediting -i. 프로세스 명령은 입니다. 두 번째 제안은 이해할 수 없습니다.
marczellm

1
-i 스위치를 제거하지 않았기 때문입니다.
Emacs 사용자

좋아요, 어떻게 제거합니까?
marczellm

1
사용하고 explicit-shell-file-name있으므로 eg 설정하고 싶습니다 (setq explicit-bash-args '("--login" "-i")).
glucas

1

이것이 OP와 정확히 동일하지는 않지만 흥미로운 옵션이라고 생각합니다. git-bash 명령 줄에서 emacs를 시작할 수 있습니다. emacs가 git-bash를 쉘로 가정합니다.

bash 프롬프트에서 다음과 같은 것을 입력하십시오

bla@host MINGW64 ~/ $ emacs .&

그런 다음 이맥스에서 Mx "shell"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.