2016-04-25 16 views
6

Próbuję użyć ansi-term w emacs (skonfigurowany do powłoki tcsh). Widzę problemy z wyświetlaniem znaków nowej linii. Gdy próbuję następujące od terminala (ANSI okresie), otrzymuję poprawny wynik:Problemy z znakiem nowej linii podczas używania ansi-term w emacs

myterm > echo "Line1"; echo "Line2"; echo "Line3";  
Line1 
Line2 
Line3 
myterm > 

Ale jeśli próbuję oddanie tych samych linii w skrypcie powłoki i spróbować uruchomić skrypt z ANSI perspektywie dostaję nieprawidłowe wyświetlamy

Script: (test)

#!/usr/bin/env tcsh 
echo "Line1"; echo "Line2"; echo "Line3"; 

Uruchamianie skryptu (test):

myterm > ./test 
Line1 
    Line2 
      Line3 
       myterm > 

Uwaga:/usr/bin/env tcsh wskazuje poprawną powłokę (jest to ta sama powłoka, której użyłem podczas wywoływania ansi-term). Również wykonywanie skryptu z gnome-terminal wyświetla również prawidłowe wyjście. Próbowałem również ustawienie następujących zmiennych, ale to nie rozwiąże moje problemy:

(set-terminal-coding-system 'utf-8-unix) 
(setq default-process-coding-system '((utf-8-unix . utf-8-unix))) 
+0

najprawdopodobniej \ r & r różnica. nie może się tutaj reprodukować, więc nie może pomóc więcej. – iced

+0

wyjście 'infocmp' może pomóc w wygenerowaniu niektórych odpowiedzi tutaj –

+0

Spróbuj użyć' printf' zamiast 'echo' i podaj \ r \ n jawnie na końcu każdego ciągu znaków – sqrt163

Odpowiedz

15

Jeśli ustawisz stty onlcr w skrypcie, dostaniesz zachowania wymagają.
Przełożenie polecenie do angielska może to być też
s ET TTY do O utput n ew l ine jak C arriage- R wrót oraz nowej linii.

Jest to obejście, ponieważ ta opcja powinna być domyślnie ustawiona. Widzę na wyjściu z stty -a, że dałeś w swoich komentarzach, że to jest ustawione w tcsh, który działa w twoim ansi-term. Podejrzewam, że jeden możliwy powód ANSI-term i skrypt shell zachowują się inaczej ze względu na następujących liniach w term.el

(apply 'start-process name buffer 
     "/bin/sh" "-c" 
     (format "stty -nl echo rows %d columns %d sane 2>/dev/null; 
       if [ $1 = .. ]; then shift; fi; exec \"[email protected]\"" 
       term-height term-width) 
     ".." 
     command switches))) 

Komenda wyżej stty faktycznie ustawia onlcr dwukrotnie, ponieważ
opcję związek -nl tłumaczy do icrnl -inlcr -igncr onlcr -ocrnl -onlret
i opcji sane przekłada się
cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Inna możliwa przyczyna: dla powłok non-login tcsh tylko czytać /etc/csh.cshrc i albo ~/.tcshrc lub ~/.cshrc gdy zaczyna się, ale dla powłok zgłoszeniowych odczytuje wiele innych plików w tym /etc/csh.login~/.history lub wartości $histfile - należy skonsultować się z man page dla pełnych szczegółów, w tym takiej kolejności, w której czyta rzeczy.

+3

@ [pulimon] (http://stackoverflow.com/users/990772/pulimon) Zrobiłem poważny ponowny zapis odpowiedzi, ponieważ moja pierwsza wizyta była trochę zwięzła. Dyskusja na ten temat odbywa się w [meta] (http://meta.stackoverflow.com/questions/322563/editing-my-answer-that-has-been-upvoted-accepted-and-has-bounty-paid) –

+2

Dobra edycja. Nie mam żadnych reklamacji :) – Pulimon

Powiązane problemy