2012-09-28 13 views
9

Dire che ho una finestra di Emacs (cioè una suddivisione di ciò che Emacs chiama un frame) che esegue un buffer M-x ansi-term (ad esempio, zsh) con quello è ~500 pixel di larghezza. Quindi eseguo diversi comandi della shell e l'output viene incapsulato per adattarsi a quei pixel 500.Ridimensionamento del terminale in Emacs

Supponiamo che ora ingrandisca questa finestra o il buffer (ad esempio 1000 pixel), forse perché uccido altre finestre nella cornice, dando più spazio alla finestra ansi-term.

C'è un modo per ottenere l'output precedente nella finestra ansi-term da ridimensionare per sfruttare la nuova dimensione della finestra? (cioè allargando le linee e ricollocandole secondo le dimensioni della nuova finestra)?

+0

Mm .. Direi di no. Prova la shell M-x, si comporta come hai descritto, ho appena provato. – yPhil

risposta

4

No, non di solito, perché il programma che ha prodotto l'output (potrebbe avere) formattato per adattarsi alla larghezza del display che era in vigore al momento della stampa e non è più in esecuzione quando si ridimensiona.

Tuttavia, se è ancora in esecuzione, viene visualizzata l'opzione di ridimensionamento (a SIGWINCH). Potresti provare questo ad es. il browser links/elinks. Questo è il vero "caso d'uso" per la modalità terminale ANSI: programmi che usano "curses" o sistemi simili per muovere il cursore.

Come indicato da @ user2491, shell-mode gestisce l'output basato sul testo (basato sul flusso) con il word-wrapping, a pena di non essere in grado di eseguire programmi di tipo "curses". È progettato per trattare la tua sessione un po 'più come un file di testo, e meno come un "vero terminale".

+0

Grazie! Vi dispiacerebbe elaborare più su come posso usare 'SIGWINCH' per ridimensionare la finestra in cui ho 'ansi-term' in esecuzione in Emacs? (Ho sempre il terminale ancora in esecuzione). –

+0

Questa è la responsabilità del programma in esecuzione. Il programma terminale stesso (ad esempio bash) generalmente non si preoccuperà di queste cose, ma ad es. 'mplayer',' alpine', 'links' hanno gestori per questo. Se intendi letteralmente come gestire SIGWINCH nei tuoi programmi, ti consigliamo di utilizzare una libreria di livello superiore come 'ncurses', ma potresti anche dare un'occhiata ad es. questa risposta: http://stackoverflow.com/a/3472019/475150 – BRFennPocock

+0

Non sono sicuro che la seguo. Ho 'M-x ansi-term' (ad esempio' zsh') in esecuzione in una delle mie finestre. Hai detto che se il terminale è ancora in esecuzione, c'è ancora speranza che riavvii automaticamente il testo usando 'SIGWINCH'. Che cosa è esattamente "SIGWINCH"? Posso inviare un segnale al buffer che esegue il terminale da Emacs per farlo rewrap il testo? –

Problemi correlati