summaryrefslogtreecommitdiffstats
path: root/library/demos/browse
diff options
context:
space:
mode:
Diffstat (limited to 'library/demos/browse')
-rw-r--r--library/demos/browse56
1 files changed, 56 insertions, 0 deletions
diff --git a/library/demos/browse b/library/demos/browse
new file mode 100644
index 0000000..46f6532
--- /dev/null
+++ b/library/demos/browse
@@ -0,0 +1,56 @@
+#!/bin/sh
+# the next line restarts using wish \
+exec wish "$0" "$@"
+
+# browse --
+# This script generates a directory browser, which lists the working
+# directory and allows you to open files or subdirectories by
+# double-clicking.
+#
+# SCCS: @(#) browse 1.8 96/02/16 10:49:18
+
+# 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.
+
+proc browse {dir file} {
+ global env
+ if {[string compare $dir "."] != 0} {set file $dir/$file}
+ if [file isdirectory $file] {
+ exec browse $file &
+ } else {
+ if [file isfile $file] {
+ if [info exists env(EDITOR)] {
+ eval exec $env(EDITOR) $file &
+ } else {
+ exec xedit $file &
+ }
+ } else {
+ puts stdout "\"$file\" isn't a directory or regular file"
+ }
+ }
+}
+
+# Fill the listbox with a list of all the files in the directory (run
+# the "ls" command to get that information).
+
+if $argc>0 {set dir [lindex $argv 0]} else {set dir "."}
+foreach i [exec ls -a $dir] {
+ .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}}