# Tksh Demo # Jeff Korn # # This script keeps track of visited directories and shows the files # in the current directory. You can double-click on files and # directories. The script should be used interactively, so to run: # $ tksh # $ . scripts/watchdir function winsetup { pack $(frame .f) frame .f.dirname -relief raised -bd 1 pack .f.dirname -side top -fill x pack $(frame .f.ls) $(frame .f.dirs) -side left label .f.dirname.label -text "Current directory: " label .f.dirname.pwd -textvariable PWD pack .f.dirname.label .f.dirname.pwd -side left scrollbar .f.ls.scroll -command ".f.ls.list yview" listbox .f.ls.list -yscroll ".f.ls.scroll set" -width 20 -setgrid 1 pack $(label .f.ls.label -text "Directory Contents") -side top pack .f.ls.list .f.ls.scroll -side left -fill y -expand 1 scrollbar .f.dirs.scroll -command ".f.dirs.list yview" listbox .f.dirs.list -yscroll ".f.dirs.scroll set" -width 20 -setgrid 1 pack $(label .f.dirs.label -text "Visited Directories") -side top pack .f.dirs.list .f.dirs.scroll -side left -fill y -expand 1 bind .f.dirs.list "<Double-1>" 'cd $(selection get)' bind .f.ls.list "<Double-1>" 'tkfileselect $(selection get)' } function tkfileselect { [[ -d "$1" ]] && tkcd "$1" [[ -f "$1" ]] && ${EDITOR-${VISUAL-emacs}} "$1" } function tkcd { cd $1 > /dev/null || return .f.ls.list delete 0 end set -o markdirs .f.ls.list insert end .. * [[ ${VisitedDir["$PWD"]} == "" ]] && .f.dirs.list insert end "$PWD" VisitedDir["$PWD"]=1 } typeset -A VisitedDir winsetup > /dev/null alias cd=tkcd tkcd .