M-xgit-bashEt puis voila, bash s'exécute mais avec une certaine bizarrerie:
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
$
et il imprime cette ligne, en commençant par ^[], après chaque commande que j'exécute. De plus, l'encodage est foiré. Comment puis-je résoudre ce problème .emacs?
Le ^[]bruit provient de divers caractères de contrôle de terminal dans votre invite de shell. Essayez echo $PS1de voir la séquence complète, et essayez par exemple export PS1='$ 'de voir qu'une chaîne d'invite plus simple supprime ce problème particulier.
Pour l'encodage, vous pouvez essayer de faire de utf-8 votre encodage préféré:
(prefer-coding-system 'utf-8)
Configuration de l'invite
Emacs définit la variable INSIDE_EMACS afin que vous puissiez créer un .bash_profile qui définit PS1 uniquement lors de l'exécution dans Emacs.
En testant sur ma machine, la première ligne de l'invite présente les caractères de contrôle problématiques. J'ai créé un ~ / .bash_profile avec ceci.
if [ -n "$INSIDE_EMACS" ]; then
export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi
Cela définit l'invite en fonction de ce que git-bash définissait par défaut, mais j'ai supprimé la première ligne (jusqu'au \ n saut de ligne). J'ai également supprimé le $ MSYSTEM qui met MINGW64 dans l'invite - je n'ai pas besoin de voir cela. Il ne reste que l'utilisateur @ host, le répertoire courant et le dépôt git. Les caractères de contrôle définissent les couleurs qu'Emacs affiche correctement pour moi. (Pour plus de détails sur la configuration de votre invite, reportez-vous au manuel bash .)
Cela fonctionne, merci! Que fait cette ligne PS1 (pour moi cryptique)? Pouvez-vous aider à définir automatiquement l'encodage du tampon shell sur utf-8? (à MĂĄrtonlire Márton)
marczellm
La PS1 dans mon exemple était dérivée de celle par défaut que git-bash avait définie. Je viens de tout supprimer jusqu'au saut de ligne (\ n). Il utilise ces séquences de contrôle pour changer la couleur des différents bits d'informations affichés - l'utilisateur actuel, l'hôte, le dépôt git, etc. Je devrais retrouver le doc bash PS1 pour plus de détails. Pour utf-8, quel est le default-process-coding-systemréglage de votre Emacs?
glucas
J'ai trouvé ceci dans le manuel Emacs: "Pour spécifier un système de codage pour le shell, vous pouvez utiliser la commande Cx RET c juste avant le shell Mx. Vous pouvez également changer le système de codage pour un sous-shell en cours d'exécution en tapant Cx RET p dans le shell tampon." (voir gnu.org/software/emacs/manual/html_node/emacs/… )
glucas
Sa valeur est (undecided-dos . undecided-unix). Je cherche un moyen de définir l'encodage du tampon automatiquement au lieu de devoir se souvenir d'un autre ensemble de touches à chaque ouverture. Je devrais peut-être poser une nouvelle question.
marczellm
Le mien est utf-8 dos et UNIX. Je ne le définis pas explicitement mais j'ai ces paramètres: (prefer-coding-system 'utf-8) (setq-default buffer-file-coding-system' utf-8-unix)
glucas
1
Cette erreur indique un commutateur non compatible. Il est probablement réglé sur -icet vous avez juste besoin de -c:
(setq shell-command-switch "-c")
L'autre option est de fournir tty à git-bash avec une commande similaire à (quel que soit l'équivalent de Windows):
Votre première suggestion ne change rien. De plus, M-x list-processesmontre que cela n'a eu aucun effet: la commande process est D:/Program Files/git/bin/bash --noediting -i. Votre deuxième suggestion, je ne peux pas la comprendre.
marczellm
1
C'est parce que vous n'avez pas supprimé le commutateur -i.
Emacs User
D'accord, alors comment puis-je le supprimer?
marczellm
1
Vous utilisez explicit-shell-file-namedonc je crois que vous voudriez définir par exemple (setq explicit-bash-args '("--login" "-i")).
glucas
1
Je sais que ce n'est pas exactement la même chose que l'OP, mais je pense que c'est une option intéressante. Vous pouvez démarrer emacs à partir de la ligne de commande git-bash. Cela obligera emacs à assumer git-bash comme shell.
Entrez quelque chose comme ce qui suit à partir de votre invite bash
MĂĄrton
lireMárton
)default-process-coding-system
réglage de votre Emacs?(undecided-dos . undecided-unix)
. Je cherche un moyen de définir l'encodage du tampon automatiquement au lieu de devoir se souvenir d'un autre ensemble de touches à chaque ouverture. Je devrais peut-être poser une nouvelle question.Cette erreur indique un commutateur non compatible. Il est probablement réglé sur
-ic
et vous avez juste besoin de-c
:L'autre option est de fournir tty à git-bash avec une commande similaire à (quel que soit l'équivalent de Windows):
la source
M-x list-processes
montre que cela n'a eu aucun effet: la commande process estD:/Program Files/git/bin/bash --noediting -i
. Votre deuxième suggestion, je ne peux pas la comprendre.explicit-shell-file-name
donc je crois que vous voudriez définir par exemple(setq explicit-bash-args '("--login" "-i"))
.Je sais que ce n'est pas exactement la même chose que l'OP, mais je pense que c'est une option intéressante. Vous pouvez démarrer emacs à partir de la ligne de commande git-bash. Cela obligera emacs à assumer git-bash comme shell.
Entrez quelque chose comme ce qui suit à partir de votre invite bash
Ensuite, dans emacs, Mx "shell"
la source