donn@utah-cs.UUCP (Donn Seeley) (07/27/86)
Subject: 'more' doesn't understand 'xn' type terminals (such as 'xterm') Index: ucb/more/more.c 4.3BSD Description: When you run 'more' on a terminal which has the 'eat newline' feature described by the 'xn' termcap capability, it can screw up and lose blank lines. Repeat-By: Go to a terminal with the 'eat newline' feature; it's easy to see the problem when you use a window created by the 'xterm' terminal emulator of the X window system. Run the C-shell command: % (repeat 80 -n echo a; repeat 2 echo '') | more (Substitute the appropriate screen width for '80' if you use something different.) Run the same command on a normal terminal and compare -- 'more' on the 'eat newline' terminal will lose the blank line. Fix: 'more' has no code to handle 'xn' terminals, but it's easy to add. Make the following changes to 'more.c', in the declarations at the top and in the routines getline() and initterm(): ------------------------------------------------------------ *** /tmp/,RCSt1024200 Sun Jul 27 02:52:05 1986 --- more.c Sun Jul 27 02:14:23 1986 *************** *** 76,82 **** int inwait, Pause, errors; int within; /* true if we are within a file, false if we are between files */ ! int hard, dumb, noscroll, hardtabs, clreol; int catch_susp; /* We should catch the SIGTSTP signal */ char **fnames; /* The list of file names */ int nfiles; /* Number of files left to process */ --- 76,82 ---- int inwait, Pause, errors; int within; /* true if we are within a file, false if we are between files */ ! int hard, dumb, noscroll, hardtabs, clreol, eatnl; int catch_susp; /* We should catch the SIGTSTP signal */ char **fnames; /* The list of file names */ int nfiles; /* Number of files left to process */ *************** *** 768,773 **** --- 768,776 ---- } } colflg = column == Mcol && fold_opt; + if (colflg && eatnl && Wrap) { + *p++ = '\n'; /* simulate normal wrap */ + } *length = p - Line; *p = 0; return (column); *************** *** 1494,1499 **** --- 1497,1504 ---- hard++; /* Hard copy terminal */ Lpp = 24; } + if (tgetflag("xn")) + eatnl++; /* Eat newline at last column + 1; dec, concept */ if (Mcol <= 0) Mcol = 80; ------------------------------------------------------------ Donn Seeley University of Utah CS Dept donn@utah-cs.arpa 40 46' 6"N 111 50' 34"W (801) 581-5668 decvax!utah-cs!donn