Windows'ta emac'larda Git Bash


9

Windows için Git ile birlikte gelen Bash kabuğunu çalıştırabilirim. Bunu benim yerime koydum .emacs:

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

Sonra M-x git-bashve voila, bash koşuyor ama biraz gariplikle:

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
$ 

ve ^[]çalıştırdığım her komuttan sonra o satırı basar . Ayrıca kodlama bozulur. Bunu nasıl düzeltebilirim .emacs?

Yanıtlar:


10

^[]Gürültü kabuk komut çeşitli terminali kontrol karakterleri geliyor. Deneyin echo $PS1tam dizisini görmek ve örneğin denemek export PS1='$ 'o daha basit istemi dize kaldırır o belirli sorunu görmek için.

Kodlama için utf-8'i tercih ettiğiniz kodlamayı yapmayı deneyebilirsiniz:

(prefer-coding-system 'utf-8)

İstemi ayarlama

Emacs, INSIDE_EMACS değişkenini ayarlar, böylece PS1'i yalnızca Emacs'ta çalışırken ayarlayan bir .bash_profile oluşturabilirsiniz.

Makinemde test yaparken, istemin ilk satırında sorunlu kontrol karakterleri var. Bununla bir ~ / .bash_profile oluşturdum.

if [ -n "$INSIDE_EMACS" ]; then
    export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi

Bu komut istemi, varsayılan olarak git-bash ayarlarına göre ayarlanır, ancak ilk satırı kaldırdım (\ n satır sonuna kadar). Ben de MINGW64 istemi koyar $ MSYSTEM kaldırıldı - Bunu görmek gerek yok. Geriye kalan kullanıcı @ host, geçerli dizin ve git repo. Kontrol karakterleri, Emacs'in benim için düzgün görüntülediği renkleri ayarlar. (İsteminizi ayarlama hakkında ayrıntılar için, bash kılavuzuna bakın .)

Emacs'ta kabuğu git-bash olarak ayarladım:

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

Bu kurulumla hala ilk ioctl hata mesajını görüyorum, ancak aksi takdirde işler beklendiği gibi çalışıyor ve kodlama utf-8.


İşe yarıyor, teşekkürler! Bu (bana göre şifreli) PS1 hattı ne yapıyor? Kabuk tampon kodlamasını otomatik olarak utf-8 olarak ayarlamanıza yardımcı olabilir misiniz? ( MĂĄrtonokumalıyız Márton)
marczellm

Örneğimdeki PS1, git-bash'ın ayarladığı varsayılandan türetildi. Az önce satır sonuna kadar her şeyi sildim (\ n). Gösterilen kullanıcı bitlerinin rengini değiştirmek için bu kontrol sekanslarını kullanıyor - mevcut kullanıcı, ana bilgisayar, git repo, vb. Ayrıntılar için bash PS1 belgesini izlemem gerekir. Utf-8 için, Emac'larınızda ne olarak default-process-coding-systemayarlanır?
glucas

Bunu Emacs kılavuzunda buldum: "Kabuk için bir kodlama sistemi belirtmek için, Mx kabuğundan hemen önce Cx RET c komutunu kullanabilirsiniz. Kabuğa Cx RET p yazarak çalışan bir alt kabuk için kodlama sistemini de değiştirebilirsiniz. tampon." (bkz. gnu.org/software/emacs/manual/html_node/emacs/… )
glucas

Değeri (undecided-dos . undecided-unix). Her zaman açarken başka bir tuş vuruşlarını hatırlamak zorunda kalmadan tampon kodlamasını otomatik olarak ayarlamak için bir yol arıyorum. Belki yeni bir soru sormalıyım.
marczellm

Benimki utf-8 dos ve UNIX. Açıkça ayarlamıyorum ama bu ayarlara sahibim: (tercih-kodlama-sistemi 'utf-8) (setq-varsayılan arabellek-dosya-kodlama-sistemi' utf-8-unix)
glucas

1

Bu hata, eşleşmeyen bir anahtara işaret ediyor. Muhtemelen ayarlanmıştır -icve ihtiyacınız olan şey -c:

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

Diğer seçenek tty'ye git-bash komutuna benzer bir komut sağlamaktır (windows eşdeğeri ne olursa olsun):

/sbin/getty -l bash -n 38400 tty0

İlk öneriniz hiçbir şeyi değiştirmez. Dahası, M-x list-processesherhangi bir etkisi olmadığını gösterir: process komutu D:/Program Files/git/bin/bash --noediting -i. İkinci öneriniz anlayamıyorum.
marczellm

1
Çünkü -i anahtarını kaldırmadınız.
Emacs Kullanıcısı

Tamam, nasıl kaldırabilirim?
marczellm

1
Kullanıyorsunuz, explicit-shell-file-namebu yüzden örneğin ayarlamak istediğinize inanıyorum (setq explicit-bash-args '("--login" "-i")).
glucas

1

Bunun OP ile tam olarak aynı olmadığını biliyorum, ama bence ilginç bir seçenek. Emac'leri git-bash komut satırından başlatabilirsiniz. Emacs'ın kabuk olarak git-bash olduğunu varsayar.

Bash isteminizden aşağıdakine benzer bir şey girin

bla@host MINGW64 ~/ $ emacs .&

Sonra, emacs, Mx "kabuk"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.