2011-01-14 10 views
10

Chciałbym dołączyć screen lub tmux do emacsa, w trybie powłoki. Często zdarza mi się uruchamiać emacs z gorszymi procesami wewnątrz ekranu na zdalnych serwerach; Byłoby miło, gdybym mógł przenieść workflow do lokalnych emacs + TRAMP; możliwość ponownego przyłączenia sesji trwałych jest jednak koniecznością. (Taki workflow jest szczególnie przydatny do analizy w R [1])Ekran Gnu w trybie powłoki emacs: jak naprawić kody ucieczki kolorów

Tryb powłoki jest dość pożądany, ponieważ napotykam na różne usterki, a nawet awarie, gdy używamy kombinacji terminu Mx lub Mx ansi-term + screen + R. Jednak nie mogę pozbyć się ansi kolorowych renderowanych jako kody ucieczki na ekranie, gdy uruchamiam je pod powłoką Mx. Kiedy używam ansi-color-for-comint-mode-on, są w porządku - ale zaraz po pojawieniu się ekranu staje się okropnym bałaganem.

Czy ktoś wymyślił zestaw warunków dla właściwej interpretacji koloru ansi z powłoką + ekranem lub tmux? Co o pozbycie się koloru całkowicie? .. Czy istnieją jakieś inne alternatywy w zakresie prowadzenia trwałych procesów zdalnych i dołączając je do lokalnych emacs? ..

[1] http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

+1

@ Seppo jest poprawne: tryb powłoki nie może zrobić tego, co chcesz. Przydałoby się opisać problemy, z jakimi się borykasz z terminem "M-x" lub "M-x ansi-term" i być może możemy z tym pomóc. –

Odpowiedz

5

O ile mogę powiedzieć, ekran wymaga funkcje terminala że Emacs tryb powłoki po prostu nie ma i nie może zapewnić, po prostu dlatego, że nie jest to tradycyjny zacisk charakter jak VT100. Tak więc problem nie polega na pozbyciu się lub próbie interpretacji kodów kolorów - istnieje więcej możliwości terminalowych, których Screen wymaga do poprawnego działania.

Domyślnie ekran nie uruchamia się nawet w trybie powłoki Emacsa, o ile mogę to stwierdzić (błędy informują, że potrzebuje on wyraźnego ekranu). Niektóre posty w sieci wydają się sugerować ustawienie TERM = xterm do obejścia tego, ale jest to po prostu wygłuszanie ekranu do myślenia, że ​​terminal ma możliwości XTerm, których nie ma.

Termin i tryb ansi-term Emacsa zapewniłby funkcje terminala wymagane przez Screen, ale niestety wydaje się, że miałeś problemy z tymi trybami.

Proponuję zamiast tego rzucić okiem na polecenie "emacsclient -t" (część Emacsa), które pozwala otworzyć lokalną ramkę podłączoną do istniejącej instancji Emacs w podobny sposób, jak pozwala na to Screen aby ponownie połączyć się z poprzednio utworzoną instancją ekranu. W ten sposób możesz skonfigurować program emacsclient na komputerze lokalnym, aby ponownie połączyć się przez TCP z trwałą zdalną instancją Emacsa.

1

nie używam ekran, ale może możesz to naprawić ze swojego .bashrc. Mam tam kod warunkowy, zmieniający kolor dla okien xterm, ale pozostawiając go innym terminalom, które go nie obsługują. Powłoka M-x ustawia zmienną TERM na niemą, więc możesz to sprawdzić i odpowiednio ustawić kolor.

case "$TERM" in 
dumb) 
## non-color settings here 
;; 
xterm) 
## color settings here 
;; 
*) 
## default (maybe you want non-color here?) 
;; 
esac