2016-04-25 8 views
6

Я пытаюсь использовать ansi-term в emacs (настроен на tcsh shell). Я вижу некоторые проблемы с отображаемыми символами новой строки. Если бы я попробовать следующее из терминала (ANSI-термин), я получаю правильный вывод:Проблемы с символом новой строки при использовании ansi-term в emacs

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

Но если я пытаюсь поставить те же строки в сценарии оболочки и попытаться выполнить сценарий из AnSi перспективы, Я получаю неверные результаты

сценария: (тест)

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

Запуск сценария (тест):

myterm > ./test 
Line1 
    Line2 
      Line3 
       myterm > 

Примечание:/usr/bin/env tcsh указывает на правильную оболочку (ее ту же оболочку, которую я использовал при вызове ansi-term). Также выполнение сценария из gnome-терминала также отображает правильный вывод. Я также попытался установить следующие переменные, но это не решило мои проблемы:

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

скорее всего \ r & \ r \ n разница. не может воспроизводиться здесь, поэтому больше не могу помочь. – iced

+0

вывод 'infocmp' может помочь сгенерировать некоторые ответы здесь –

+0

Попробуйте использовать' printf' вместо 'echo' и указать \ r \ n явно в конце каждой строки – sqrt163

ответ

15

Если вы установили stty onlcr в сценарии, вы получите поведение, которое вы требуете.
Перевод команды на английский можно сказать:
с эт терминал к о utput п EW л ине, как с arriage- г eturn и новой строки.

Это, конечно, обходное решение, потому что этот параметр должен быть установлен по умолчанию. Я могу видеть из вывода stty -a, который вы указали в ваших комментариях, что это is набор в tcsh, который работает в вашем ansi-term. Я подозреваю, что одна из возможных причин, почему ANSI-член и ваш сценарий оболочки ведут себя по-разному из-за следующие строки в 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))) 

stty команды в приведенном выше фактически устанавливает onlcr дважды, так как
опцию соединения -nl транслятов к icrnl -inlcr -igncr onlcr -ocrnl -onlret
и опции sane переводит
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

Другая возможная причина: для нерегистрируемых оболочек Tcsh будет только чтения /etc/csh.cshrc и либо ~/.tcshrc или ~/.cshrc при запуске, но для входа в оболочках читает ряд других файлов, в том числе /etc/csh.login~/.history или значение $histfile - Вы должны проконсультироваться с man page для получения полной информации, включая точный порядок, в котором он читает вещи.

+3

@ [pulimon] (http://stackoverflow.com/users/990772/pulimon) Я сделал серьезную переписку с ответа, так как мой первый вариант был немного кратким. Об этом говорится в [meta] (http://meta.stackoverflow.com/questions/322563/editing-my-answer-that-has-been-upvoted-accepted-and-has-bounty-paid) –

+2

Хорошее редактирование. У меня нет никаких претензий :) – Pulimon

 Смежные вопросы

  • Нет связанных вопросов^_^