2016-04-25 17 views
6

Sto provando ad usare ansi-term in emacs (configurato per shell tcsh). Vedo alcuni problemi con i caratteri di nuova riga visualizzati. Se provo quanto segue dal terminale (ANSI termine), ottengo l'uscita corretta:Problemi con carattere di fine riga durante l'utilizzo di ansi-term in emacs

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

Ma se provo mettere le stesse linee in uno script shell e provo ad eseguire lo script da ANSI termine, ho un uscita sbagliata

script: (test)

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

Esecuzione dello script (test):

myterm > ./test 
Line1 
    Line2 
      Line3 
       myterm > 

Nota:/usr/bin/env tcsh punta alla shell corretta (è la stessa shell che ho usato durante il richiamo di ansi-term). Anche l'esecuzione dello script da gnome-terminal mostra anche l'output corretto. Ho anche provato impostando le seguenti variabili, ma non ha risolto i miei problemi:

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

molto probabilmente \ r & \ r \ n differenza. non posso riprodurre qui, quindi non posso aiutare di più. – iced

+0

l'output di 'infocmp' potrebbe aiutare a generare alcune risposte qui –

+0

Provare a usare' printf' invece di 'echo' e specificare \ r \ n esplicitamente alla fine di ogni stringa – sqrt163

risposta

15

Se si imposta stty onlcr nello script, si otterrà il comportamento desiderato.
Traducendo il comando in un inglese potrebbe dire:
s et al tty a o scita n ew l ine come c arriage- r eturn e nuova riga.

Questa soluzione è ovvia, poiché questa opzione deve essere impostata per impostazione predefinita. Riesco a vedere dall'output di stty -a che hai dato nei tuoi commenti che è impostato su nel tcsh che viene eseguito nel tuo ansi-term. Ho il sospetto che una possibile ragione per cui ANSI-termine e lo script di shell comportano in modo diverso è dovuto alle seguenti linee in 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))) 

Il comando stty in quanto sopra in realtà imposta onlcr due volte, dal momento che l'opzione
composto -nl traduce a icrnl -inlcr -igncr onlcr -ocrnl -onlret
e l'opzione sane traduce in
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

Un'altra possibile causa: per la shell non-login tcsh sarà solo leggere /etc/csh.cshrc e sia ~/.tcshrc o ~/.cshrc all'avvio, ma per le shell di login si legge un certo numero di altri file tra cui /etc/csh.login~/.history o il valore di $histfile - Si consiglia di consultare il man page per tutti i dettagli, tra cui l'ordine esatto in cui si legge le cose

+3

@ [pulimon] (http://stackoverflow.com/users/990772/pulimon) Ho fatto una grande riscrittura della risposta da quando il mio primo tentativo è stato un po 'laconico. C'è una discussione a riguardo su [meta] (http://meta.stackoverflow.com/questions/322563/editing-my-answer-that-has-been-upvoted-accepted-and-has-bounty-paid) –

+2

Bella modifica Non ho alcuna lamentela :) – Pulimon

Problemi correlati