Potem M-xgit-bashi voila, bash działa, ale z pewną dziwnością:
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
$
i wypisuje tę linię, zaczynając od ^[], po każdym uruchomieniu polecenia. Również kodowanie jest pomieszane. Jak mogę to naprawić .emacs?
^[]Szumów pochodzących z różnych terminali znaków sterujących w wierszu powłoki. Spróbuj echo $PS1zobaczyć pełną sekwencję i spróbuj np. export PS1='$ 'Zobaczyć, że prostszy ciąg zachęty usuwa ten konkretny problem.
W przypadku kodowania możesz spróbować ustawić utf-8 jako preferowane kodowanie:
(prefer-coding-system 'utf-8)
Konfigurowanie monitu
Emacs ustawia zmienną INSIDE_EMACS, dzięki czemu można utworzyć .bash_profile, który ustawia PS1 tylko podczas działania w Emacsie.
Testując na moim komputerze, pierwsza linia zachęty zawiera problematyczne znaki kontrolne. Za pomocą tego utworzyłem profil ~ / .bash_profile.
if [ -n "$INSIDE_EMACS" ]; then
export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi
To ustawia monit na podstawie domyślnego ustawienia git-bash, ale usunąłem pierwszą linię (do \ n podziału linii). Usunąłem także $ MSYSTEM, który wyświetla MINGW64 w monicie - nie muszę tego widzieć. Pozostaje użytkownik @ host, bieżący katalog i repozytorium git. Znaki kontrolne ustawiają kolory, które Emacs wyświetla mi poprawnie. (Szczegółowe informacje na temat konfigurowania pytania znajdują się w podręczniku bash ).
To działa, dzięki! Co robi ta (dla mnie tajemnicza) linia PS1? Czy możesz pomóc w automatycznym ustawieniu kodowania bufora powłoki na utf-8? ( MĂĄrtonnależy przeczytać Márton)
marczellm
PS1 w moim przykładzie pochodzi z domyślnego zestawu git-bash. Właśnie usunąłem wszystko do końca linii (\ n). Wykorzystuje te sekwencje kontrolne do zmiany koloru różnych wyświetlanych informacji - bieżącego użytkownika, hosta, repozytorium git itp. Muszę wyśledzić dokument PS1 bash, aby uzyskać szczegółowe informacje. W przypadku utf-8, co jest default-process-coding-systemustawione w twoim Emacsie?
glucas
Znalazłem to w podręczniku Emacsa: „Aby określić system kodowania powłoki, możesz użyć polecenia Cx RET c bezpośrednio przed powłoką Mx. Możesz także zmienić system kodowania działającej podpowłoki, wpisując Cx RET p w powłoce bufor." (patrz gnu.org/software/emacs/manual/html_node/emacs/… )
glucas
Jego wartość to (undecided-dos . undecided-unix). Szukam sposobu na automatyczne ustawienie kodowania bufora zamiast konieczności zapamiętywania innego zestawu naciśnięć klawiszy za każdym razem, gdy go otwieram. Może powinienem zadać nowe pytanie.
marczellm
Mój to utf-8 dos i UNIX. Nie ustawiam tego wprost, ale mam następujące ustawienia: (prefer-coding-system 'utf-8) (setq-default-system buforowania plików-utf-8-unix)
glucas
1
Ten błąd wskazuje na niedopasowany przełącznik. Prawdopodobnie jest ustawiony -ici potrzebujesz tylko -c:
(setq shell-command-switch "-c")
Inną opcją jest dostarczenie tty do git-bash za pomocą polecenia podobnego do (cokolwiek jest równoważne z Windows):
Twoja pierwsza sugestia niczego nie zmienia. Co więcej, M-x list-processespokazuje, że nie miało to żadnego wpływu: polecenie procesu brzmi D:/Program Files/git/bin/bash --noediting -i. Druga sugestia, której nie rozumiem.
Wiem, że to nie jest dokładnie to samo co OP, ale myślę, że to interesująca opcja. Możesz uruchomić emacsa z wiersza poleceń git-bash. Sprawi, że emacs przyjmie git-bash jako powłokę.
MĂĄrton
należy przeczytaćMárton
)default-process-coding-system
ustawione w twoim Emacsie?(undecided-dos . undecided-unix)
. Szukam sposobu na automatyczne ustawienie kodowania bufora zamiast konieczności zapamiętywania innego zestawu naciśnięć klawiszy za każdym razem, gdy go otwieram. Może powinienem zadać nowe pytanie.Ten błąd wskazuje na niedopasowany przełącznik. Prawdopodobnie jest ustawiony
-ic
i potrzebujesz tylko-c
:Inną opcją jest dostarczenie tty do git-bash za pomocą polecenia podobnego do (cokolwiek jest równoważne z Windows):
źródło
M-x list-processes
pokazuje, że nie miało to żadnego wpływu: polecenie procesu brzmiD:/Program Files/git/bin/bash --noediting -i
. Druga sugestia, której nie rozumiem.explicit-shell-file-name
więc uważam, że chcesz ustawić np(setq explicit-bash-args '("--login" "-i"))
.Wiem, że to nie jest dokładnie to samo co OP, ale myślę, że to interesująca opcja. Możesz uruchomić emacsa z wiersza poleceń git-bash. Sprawi, że emacs przyjmie git-bash jako powłokę.
Wpisz coś takiego jak poniżej w swoim bashu
Następnie, w emacsie, Mx „shell”
źródło