[Chapter 21] 21.10 Keep a Directory Listing at Top of the Screen: dirtop
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-08-04T21:40:11Z

#

| Chapter 21 More About Managing Files |

## 21.10 Keep a Directory Listing at Top of the Screen: dirtop

When I'm cleaning out a directory, I'm always using ls to see what files are there. When I have a terminal with windows, I can keep an ls listing in one window and do cleanup in another. In a terminal without windows, I use this script named dirtop. It clears the screen, puts an ls listing at the top of the screen, and sends an escape sequence (5.8) to the terminal that makes the screen top nonscrolling. So, as I type my commands, they scroll "underneath" the ls listing at the top without disturbing it. If I use a command like vi that resets the screen, I just use dirtop again when the command is done. When I'm done, the command dirtop -c clears the screen and makes the whole screen scrollable again.

This script works only on VT100-type terminals and compatibles because the escape sequences are hardcoded into it. It should probably be rewritten to use termcap or terminfo information so it'd work on more terminals. Luckily, there are lots of VT100-compatible terminals and communications programs.

    THE...

    echo...33'

    `..`
    #! /bin/sh

    ls="/bin/ls -CF"                # ls command to use
    maxlines=10     # if more lines in listing than this, quit
    # UNCOMMENT THE LINE FOR YOUR SYSTEM:
    cmd=echo   c='\c'   e='\033'   n=                       # SysV
    #cmd=/usr/5bin/echo   c='\c'   e='\033'   n=            # SunOS
    #cmd=/bin/echo   c=   e="`echo e | tr e '\033'`"   n=-n # BSD

    case "$1" in
    -c) $cmd $n "${e}[r${e}[2J${c}"; exit 0;; # just reset screen
    "") ;;
    *) echo "Usage: `basename $0` [-c]" 1>&2; exit 1 ;;
    esac

    temp=/tmp/DIRTOP$$
    trap 'rm -f $temp; exit' 0 1 2 15

    $ls > $temp
    # set number of lines to clear: one more than length of ls listing:
    lines=`expr 1 + \`wc -l < $temp\``
    if [ $lines -gt $maxlines ]
    then
        echo "`basename $0`: Directory listing > $maxlines lines" 1>&2
        exit 1
    else
        # CLEAR SCREEN.  SET NO-SCROLL AREA:
        $cmd $n "${e}[2J${c}"
        $cmd $n "${e}[${lines};24r${c}"
        # MOVE CURSOR TO TOP-LEFT CORNER, THEN PRINT LISTING:
        $cmd $n "${e}[0;0f${c}"
        cat $temp
        exit
    fi

- JP

21.9 Keep File Printouts Up-to-Date Automatically with make |  | 21.11 Safer Removing, Moving, and Copying