⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesel.tcl

📁 ethernet_tri_mode_latest.tar.gz源代码
💻 TCL
字号:
## fileselect.tcl --# simple file selector.## Mario Jorge Silva			          msilva@cs.Berkeley.EDU# University of California Berkeley                 Ph:    +1(510)642-8248# Computer Science Division, 571 Evans Hall         Fax:   +1(510)642-5775# Berkeley CA 94720                                 # # Layout:##  file:                  +----+#  ____________________   | OK |#                         +----+##  +------------------+    Cancel#  | ..               |S#  | file1            |c#  | file2            |r#  |                  |b#  | filen            |a#  |                  |r#  +------------------+#  currrent-directory## Copyright 1993 Regents of the University of California# Permission to use, copy, modify, and distribute this# software and its documentation for any purpose and without# fee is hereby granted, provided that this copyright# notice appears in all copies.  The University of California# makes no representations about the suitability of this# software for any purpose.  It is provided "as is" without# express or implied warranty.## Copyright 1996# Slight modifications to and adoption to Tk4.0 were made to this# fileselectionbox code by Lakshmi Sastry, Rutherford Appleton Laboratory,# chilton, Didcot, OXON, OX11 0QX, UK.# You can now type in a non-existing file name as well. This file name is# returned for the application to open a new file to write to # AGOCG Tcl/Tk Cookbook# Authors# Lakshmi Sastry# Computing and Information Systems Department# Rutherford Appleton Laboratory, Chilton, Didcot. OX11 0QX# lakshmi.sastry@rl.ac.uk#                         and# Venkat VSS Sastry# Department of Applied Mathematics and Operational Research# Cranfield University, RMCS Shrivenham, Swindon, SN6 8LA# sastry@rmcs.cran.ac.uk# Permission to use, copy, modify, and distribute this# software and its documentation for any purpose and without# fee is hereby granted, provided that this copyright# notice appears in all copies.  # The authors, RAL, RMCS Shrivenham, Cranfield University and AGOCG# make no representations about the suitability of this# software for any purpose.  It is provided "as is" without# express or implied warranty. Likewise they accept no responsibility# whatsoever for any public domain software modules used (which are# hereby acknowledged) in this software # names starting with "fileselect" are reserved by this module# no other names used.# use the "option" command for further configurationoption add *Listbox*font \    "-*-helvetica-medium-r-normal-*-12-*-*-*-p-*-iso8859-1" startupFileoption add *Entry*font \    "-*-helvetica-medium-r-normal-*-12-*-*-*-p-*-iso8859-1" startupFileoption add *Label*font \    "-*-helvetica-medium-r-normal-*-12-*-*-*-p-*-iso8859-1" startupFile# this is the default proc  called when "OK" is pressed# to indicate yours, give it as the first arg to "fileselect"proc fileselect.default.cmd {f} {global fileselectset fileselect(selectedfile) $fset fileselect(canceled) 0#puts stderr "selected file $f" }# this is the default proc called when error is detected# indicate your own pro as an argument to fileselectproc fileselect.default.errorHandler {errorMessage} {    puts stdout "error: $errorMessage"    catch { cd ~ }}# this is the proc that creates the file selector boxproc fileselect {    {cmd fileselect.default.cmd}     {purpose "Open file:"}     {w .fileSelectWindow}     {errorHandler fileselect.default.errorHandler}} {    catch {destroy $w}    toplevel $w    grab $w    wm title $w "Select File"    # path independent names for the widgets    global fileselect    global selected    set fileselect(entry) $w.file.eframe.entry    set fileselect(list) $w.file.sframe.list     set fileselect(scroll) $w.file.sframe.scroll    set fileselect(ok) $w.bframe.okframe.ok    set fileselect(cancel) $w.bframe.cancel    set fileselect(dirlabel) $w.file.dirlabel    # widgets    frame $w.file -bd 10     frame $w.bframe -bd 10    pack append $w \        $w.file {left filly} \        $w.bframe {left expand frame n}    frame $w.file.eframe    frame $w.file.sframe    label $w.file.dirlabel -anchor e -width 24 -text [pwd]     pack append $w.file \        $w.file.eframe {top frame w} \	$w.file.sframe {top fillx} \	$w.file.dirlabel {top frame w}    label $w.file.eframe.label -anchor w -width 24 -text $purpose    entry $w.file.eframe.entry -relief sunken     pack append $w.file.eframe \		$w.file.eframe.label {top expand frame w} \                $w.file.eframe.entry {top fillx frame w}     scrollbar $w.file.sframe.yscroll -relief sunken \	 -command "$w.file.sframe.list yview"    listbox $w.file.sframe.list -relief sunken -selectmode single \	-yscroll "$w.file.sframe.yscroll set"     #$fileselect(list) configure -selectmode single    pack append $w.file.sframe \        $w.file.sframe.yscroll {right filly} \ 	$w.file.sframe.list {left expand fill}     # buttons    frame $w.bframe.okframe -borderwidth 2 -relief sunken     button $w.bframe.okframe.ok -text OK -relief raised -padx 10 \        -command "fileselect.ok.cmd $w $cmd $errorHandler"    button $w.bframe.cancel -text cancel -relief raised -padx 10 \        -command "fileselect.cancel.cmd $w"    pack append $w.bframe.okframe $w.bframe.okframe.ok {padx 10 pady 10}    pack append $w.bframe $w.bframe.okframe {expand padx 20 pady 20}\                          $w.bframe.cancel {top}    # Fill the listbox with a list of the files in the directory (run    # the "/bin/ls" command to get that information).    # to not display the "." files, remove the -a option and fileselect    # will still work     $fileselect(list) insert end ".."    foreach i [exec ls -a [pwd]] {        if {[string compare $i "."] != 0 && \	    [string compare $i ".."] != 0 } {            $fileselect(list) insert end $i        }    }   # Set up bindings for the browser.    bind $fileselect(entry) <Return> {eval $fileselect(ok) invoke}     bind $fileselect(entry) <Control-c> {eval $fileselect(cancel) invoke}    bind $fileselect(list) <Button-1> {        # puts stderr "button 1 release"	set x [$fileselect(list) curselection]	$fileselect(entry) delete 0 end	$fileselect(entry) insert 0 [%W get [%W nearest %y]]    }    bind $fileselect(list) <Key> {	set x [$fileselect(list) curselection]        $fileselect(entry) delete 0 end	$fileselect(entry) insert 0 [%W get [%W nearest %y]]    }    bind $fileselect(list) <Double-ButtonPress-1> {        # puts stderr "double button 1"       	set x [$fileselect(list) curselection]	$fileselect(entry) delete 0 end	$fileselect(entry) insert 0 [%W get [%W nearest %y]]	$fileselect(ok) invoke    }    bind $fileselect(list) <Return> {	set x [$fileselect(list) curselection]	$fileselect(entry) delete 0 end	$fileselect(entry) insert 0 [%W get [%W nearest %y]]	$fileselect(ok) invoke    }    # set kbd focus to entry widget    focus $fileselect(entry)}# auxiliary button proceduresproc fileselect.cancel.cmd {w} {    # puts stderr "Cancel"    global fileselect    set fileselect(canceled) 1    destroy $w}proc fileselect.ok.cmd {w cmd errorHandler} {    global fileselect   global selected    set selected [$fileselect(entry) get]        # some nasty file names may cause "file isdirectory" to return an error    set sts [catch { 	file isdirectory $selected    }  errorMessage ]    if { $sts != 0 } then {	$errorHandler $errorMessage	destroy $w	return    }    # clean the text entry and prepare the list      $fileselect(entry) delete 0 end      $fileselect(list) delete 0 end      $fileselect(list) insert end ".."    # perform globbing on the selection.     # If globing returns an error (no match) check if a non-null name is    # entered. If name string is non-empty return it as a new file name    # else give an error message.    # If resulting list length > 1, put the list on the file listbox and return    # If globing expands to a list of filenames in multiple directories,    # the indicated regexp is invalid and the error handler is called instead.set globlist 0    set sts [catch {	set globlist [glob [list $selected]]    } errorMessage ]    if { $sts != 0 } then {	if { [llength $globlist] == 1 } {		destroy $w		$cmd $selected		return 	} else {	$errorHandler $errorMessage	destroy $w	return   	 }	    }     if {[llength $globlist] > 1} {	if {[regexp "/" $globlist] != 0} {	    $errorHandler [list "Invalid regular expression, " $selected, "."]	    destroy $w	    return	}	foreach i $globlist {	    if {[string compare $i "."] != 0 && \		[string compare $i ".."] != 0} {		$fileselect(list) insert end $i	    }	}	return    }    # selection may be a directory. Expand it.    if {[file isdirectory $selected] != 0} {	cd $selected	set dir [pwd]	$fileselect(dirlabel) configure -text $dir	foreach i [exec ls -a $dir] {	    if {[string compare $i "."] != 0 && \		[string compare $i ".."] != 0} {		$fileselect(list) insert end $i	    }	}	return    }    destroy $w    $cmd $selected	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -