Lalu M-xgit-bashdan voila, bash berjalan tetapi dengan sedikit keanehan:
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
$
dan itu mencetak baris itu, dimulai dengan ^[], setelah setiap perintah saya jalankan. Pengkodean juga kacau. Bagaimana saya bisa memperbaikinya .emacs?
The ^[]kebisingan yang datang dari berbagai karakter kontrol terminal dalam prompt shell Anda. Cobalah echo $PS1untuk melihat urutan penuh, dan coba misalnya export PS1='$ 'untuk melihat bahwa string prompt yang lebih sederhana menghilangkan masalah tertentu.
Untuk penyandian, Anda dapat mencoba membuat utf-8 penyandian pilihan Anda:
(prefer-coding-system 'utf-8)
Menyiapkan prompt
Emacs menetapkan variabel INSIDE_EMACS sehingga Anda bisa membuat .bash_profile yang menetapkan PS1 hanya saat dijalankan di Emacs.
Menguji pada mesin saya, baris pertama prompt memiliki karakter kontrol yang bermasalah. Saya membuat ~ / .bash_profile dengan ini.
if [ -n "$INSIDE_EMACS" ]; then
export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi
Ini menetapkan prompt berdasarkan apa yang diatur git-bash secara default, tapi saya menghapus baris pertama (hingga \ n break baris). Saya juga menghapus $ MSYSTEM yang menempatkan MINGW64 di prompt - Saya tidak perlu melihatnya. Yang tersisa adalah user @ host, direktori saat ini, dan git repo. Karakter kontrol mengatur warna yang ditampilkan Emacs dengan benar untuk saya. (Untuk detail tentang pengaturan prompt Anda, lihat manual bash .)
Itu berhasil, terima kasih! Apa yang dilakukan (bagi saya samar) garis PS1 lakukan? Dapatkah Anda membantu secara otomatis mengatur penyandian shell buffer ke utf-8? ( MĂĄrtonharus membaca Márton)
marczellm
PS1 dalam contoh saya berasal dari default yang telah ditetapkan git-bash. Saya baru saja menghapus semuanya hingga jeda baris (\ n). Ini menggunakan urutan kontrol tersebut untuk mengubah warna dari berbagai bit informasi yang ditampilkan - pengguna saat ini, host, git repo, dll. Saya harus melacak doc bash PS1 untuk detailnya. Untuk utf-8, apa yang default-process-coding-systemdiatur dalam Emacs Anda?
glukas
Saya menemukan ini di manual Emacs: "Untuk menentukan sistem pengkodean untuk shell, Anda dapat menggunakan perintah Cx RET c segera sebelum shell Mx. Anda juga dapat mengubah sistem pengkodean untuk subkulit yang sedang berjalan dengan mengetikkan Cx RET p di dalam shell penyangga." (lihat gnu.org/software/emacs/manual/html_node/emacs/… )
glucas
Nilainya adalah (undecided-dos . undecided-unix). Saya mencari cara untuk mengatur penyandian buffer secara otomatis daripada harus mengingat set penekanan tombol lain setiap kali ketika membukanya. Mungkin saya harus mengajukan pertanyaan baru.
marczellm
Milik saya utf-8 dos dan UNIX. Saya tidak mengaturnya secara eksplisit tetapi saya memiliki pengaturan ini: (prefer-coding-system 'utf-8) (setq-default buffer-file-coding-system' utf-8-unix)
glucas
1
Kesalahan ini menunjuk ke saklar yang tidak cocok. Mungkin diatur ke -icdan Anda hanya perlu -c:
(setq shell-command-switch "-c")
Opsi lainnya adalah menyediakan tty to git-bash dengan perintah yang mirip (apa pun yang setara dengan windows):
Saran pertama Anda tidak mengubah apa pun. Selain itu, M-x list-processesmenunjukkan bahwa itu tidak memiliki efek apa pun: perintah proses adalah D:/Program Files/git/bin/bash --noediting -i. Saran kedua Anda, saya tidak bisa mengerti.
marczellm
1
Itu karena Anda tidak menghapus saklar -i.
Pengguna Emacs
Oke, jadi bagaimana cara menghapusnya?
marczellm
1
Anda menggunakan explicit-shell-file-namejadi saya yakin Anda ingin mengatur mis (setq explicit-bash-args '("--login" "-i")).
glucas
1
Saya tahu ini tidak persis sama dengan OP, tapi saya pikir ini pilihan yang menarik. Anda dapat memulai emacs dari baris perintah git-bash. Itu akan membuat emacs menganggap git-bash sebagai shell.
Masukkan sesuatu seperti berikut ini dari bash prompt Anda
MĂĄrton
harus membacaMárton
)default-process-coding-system
diatur dalam Emacs Anda?(undecided-dos . undecided-unix)
. Saya mencari cara untuk mengatur penyandian buffer secara otomatis daripada harus mengingat set penekanan tombol lain setiap kali ketika membukanya. Mungkin saya harus mengajukan pertanyaan baru.Kesalahan ini menunjuk ke saklar yang tidak cocok. Mungkin diatur ke
-ic
dan Anda hanya perlu-c
:Opsi lainnya adalah menyediakan tty to git-bash dengan perintah yang mirip (apa pun yang setara dengan windows):
sumber
M-x list-processes
menunjukkan bahwa itu tidak memiliki efek apa pun: perintah proses adalahD:/Program Files/git/bin/bash --noediting -i
. Saran kedua Anda, saya tidak bisa mengerti.explicit-shell-file-name
jadi saya yakin Anda ingin mengatur mis(setq explicit-bash-args '("--login" "-i"))
.Saya tahu ini tidak persis sama dengan OP, tapi saya pikir ini pilihan yang menarik. Anda dapat memulai emacs dari baris perintah git-bash. Itu akan membuat emacs menganggap git-bash sebagai shell.
Masukkan sesuatu seperti berikut ini dari bash prompt Anda
Kemudian, di emacs, Mx "shell"
sumber