66 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
#!/bin/sh
 | 
						|
# the next line restarts using wish \
 | 
						|
exec wish "$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:
 |