Stray traînant 4m avant l'invite avec Zsh en Mx ansi-term

10

J'ai récemment lu Running Shells in Emacs , et je passe un peu de temps à adapter mon invite Zsh élaborée pour qu'elle fonctionne avec les capacités limitées de M-x shellet M-x ansi-term.

Suite à cet effort, je peux enfin utiliser Zsh depuis Emacs, mais il y a une nuisance, quoique mineure M-x ansi-term. Je vois toujours le texte errant 4mavant l'invite.

Texte erroné avant invite

Comme vous pouvez le voir, ce phénomène semble être indépendant du thème actuel de l'invite. Il apparaît également avec toutes les invites intégrées, même les plus simples qui n'utilisent aucun caractère de contrôle de fantaisie. En fait, cela arrive même avec l'invite par défaut, c'est-à-dire si je démarre Zsh sans mon .zshrc.

Eh bien, c'est vraiment juste une nuisance mineure, et cela ne me dérangerait pas vraiment si je ne pouvais pas m'en débarrasser - je préfère surtout de M-x shelltoute façon, où ce problème ne se produit pas.

Mais cela m'énerve vraiment de ne pas avoir pu trouver la cause de ce problème, même si j'ai vraiment essayé de le déboguer. Je dois dire, cependant, que ma compréhension des terminaux est assez limitée, donc j'ai peut-être manqué l'évidence.

Je suis sur OS X 10.10. Mon Emacs est 25.0.50, construit directement à partir du tronc avec Homebrew, et aucun drapeau spécial. Zsh est 5.0.5, comme inclus avec Yosemite, mais le problème se produit également avec 5.0.7 installé via Homebrew.

Quelqu'un peut-il faire la lumière sur cette question?

lunaryorn
la source
Essayez de définir l' exportation TERM = xterm-256color dans votre .zshrc ou (setq system-uses-terminfo nil) .
kmicu
system-user-terminfon'a rien changé. Changer a $TERMrésolu le problème, mais cela ne peut pas être la solution, n'est-ce pas? Après tout, c'est un mensonge, essentiellement: ansi-termn'est pas xterm et ne prend certainement pas en charge 256 couleurs.
lunaryorn
4m est un artefact du code d'échappement ANSI utilisé pour définir une couleur, par exemple \x1b[37;4mspécifie une couleur blanche avec 37 et un texte souligné avec 4. Je ne peux pas reproduire votre problème. Mon zsh est 5.0.7 et 'echo $ TERM' en ansi-term me donne une couleur eterm , mon emacs est 24.4.1 . J'ai également testé la version par défaut propre 'env HOME = ~ / tmp / emacstest emacs -Q' et je ne vois aucun problème.
kmicu
@kmicu Sous OS X 10.10, je peux toujours reproduire le problème avec emacs -Qet sans configuration Zsh du tout.
lunaryorn du

Réponses:

10

Apparemment, ce problème est dû à l' absence de terminfo poureterm-color . J'ai réussi à résoudre le problème en suivant les instructions de cette réponse pour installer une entrée appropriée dans la base de données terminfo. Plus précisément:

$ tic -o ~/.terminfo /usr/local/share/emacs/25.0.50/etc/e/eterm-color.ti

Je ne sais toujours pas pourquoi cela est nécessaire. term.elexporte en fait la $TERMINFOvariable pointant vers ce répertoire, donc le shell devrait pouvoir trouver le terminfo. Zsh semble ignorer le répertoire, cependant…

Il regarde ~/.terminfocependant, donc la commande ci-dessus rend l'entrée terminfo disponible pour Zsh.

Je serais heureux si quelqu'un pouvait fournir une meilleure explication ou une solution qui ne nécessite pas d'intervention manuelle.

lunaryorn
la source