#!/bin/sh
# the next line restarts using wish \
exec wish8.4 "$0" ${1+"$@"}

# browse --
# This script generates a directory browser, which lists the working
# directory and allows you to open files or subdirectories by
# double-clicking.
#
# RCS: @(#) $Id: browse,v 1.4 2001/11/05 10:13:53 dkf Exp $

# Create a scrollbar on the right side of the main window and a listbox
# on the left side.

scrollbar .scroll -command ".list yview"
pack .scroll -side right -fill y
listbox .list -yscroll ".scroll set" -relief sunken -width 20 -height 20 \
	-setgrid yes
pack .list -side left -fill both -expand yes
wm minsize . 1 1

# The procedure below is invoked to open a browser on a given file;  if the
# file is a directory then another instance of this program is invoked; if
# the file is a regular file then the Mx editor is invoked to display
# the file.

set browseScript [file join [pwd] $argv0]
proc browse {dir file} {
    global env browseScript
    if {[string compare $dir "."] != 0} {set file $dir/$file}
    switch [file type $file] {
	directory {
	    exec [info nameofexecutable] $browseScript $file &
	}
	file {
	    if {[info exists env(EDITOR)]} {
		eval exec $env(EDITOR) $file &
	    } else {
		exec xedit $file &
	    }
	}
	default {
	    puts stdout "\"$file\" isn't a directory or regular file"
	}
    }
}

# Fill the listbox with a list of all the files in the directory.

if {$argc>0} {set dir [lindex $argv 0]} else {set dir "."}
foreach i [lsort [glob * .* *.*]] {
    if {[file type $i] eq "directory"} {
	# Safe to do since it is still a directory.
	append i /
    }
    .list insert end $i
}

# Set up bindings for the browser.

bind all <Control-c> {destroy .}
bind .list <Double-Button-1> {foreach i [selection get] {browse $dir $i}}

# Local Variables:
# mode: tcl
# End:
