2009-04-01 15 views
31

Uso Ubuntu8.10 y emacs-snapshot. Correr el modo shell en emacs y "ls" de entrada Muestra los códigos de escape:Algo no funciona con el shell de Emacs

screenshot http://lh3.ggpht.com/_os_zrveP8Ns/SdMmohKNjmI/AAAAAAAADB4/VlKpr5H_7ZA/s512/screen.png

¿Cómo puedo obtener el resultado que esperaba?

+0

Bueno, esos divertidos personajes son secuencias de escape ('ESC' '[' '0' 'm') que pueden servir como una pista para otros, pero no responderé porque no conozco una solución específica. – paxdiablo

Respuesta

45

Puede utilizar AnsiTerm la que hace colores apoyo o puede activar AnsiColor para el normal del shell:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t) 
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) 
+1

Tenga en cuenta que para que esto tenga algún efecto, 'ansi-color-process-output' debe estar en' comint-output-filter-functions'. – updogliu

1

El problema es que "l" está tratando de colorear la salida y emacs no está teniendo nada de eso. Pruebe lo siguiente:

 
$ unalias l 
$ alias l ls --color=never 
+0

cómo cambiarlo solo en emacs? – linjunhalida

+1

TERM = tonto ls, probablemente. – jrockway

5

Además, puede elegir otra línea de comandos: M-x term o M-x eshell. El primero proporciona una interfaz que está mucho más cerca de un emulador de terminal real que shell-mode (una vez que lo inicie, puede salir del modo con C-c C-j y volver a ingresar con C-c C-k). Esta última es una implementación de shell escrita en Elisp (puede usar los comandos comunes de shell así como también evaluar el código Lisp).

+0

Sé que es Eshell, pero no me gusta, no es tan poderoso. – linjunhalida

+1

¿Estás diciendo que un lenguaje de programación de propósito general es menos poderoso que * shell *? Creo que simplemente no sabes cómo usarlo. – jrockway

+0

No me refiero a eso. No se trata de ningún idioma versus shell, sino del 'modo de shell 'y sus alternativas. Si quieres un caparazón dentro de Emacs, me encontré a mí mismo 'term-mode' muy conveniente, lo que permite que el buffer se comporte como un terminal real o puedes trabajar en él como cualquier otro buffer común de Emacs. –

3

Ampliando la respuesta vatine 's, se puede añadir que dentro de su cshrc (.tcshrc/.bashrc) envuelto con un cheque para la variable de entorno INSIDE_EMACS.

Por ejemplo (de mi .tcshrc):

if ($?INSIDE_EMACS) then 
    alias l 'ls --color=never' 
endif 
+0

Para 'sh' y compatibles,' prueba "$ INSIDE_EMACS" && alias l = 'ls --color = never'' aunque es posible que desee utilizar una función en lugar de un alias. – tripleee

2

Mx ANSI color-por-comint-mode-en

1

envolví mis alias ls ='ls --color=auto' en ~/.bashrc:

case "$TERM" in 
xterm*|rxvt*) 
    if [ -x /usr/bin/dircolors ]; then 
     alias ls='ls --color=auto' 
     ... 
    fi 
    ;; 
*) 
    ;; 
esac 

Esto inhabilita el uso de color=auto en emacs.

Cuestiones relacionadas