📄 workdir.tcl
字号:
#
# Tcl Library for TkCVS
#
#
# Current working directory display. Handles all of the functions
# concerned with navigating about the current directory on the main
# window.
#
proc workdir_setup {} {
global cwd
global module_dir
global cvscfg
global cvsglb
global current_tagname
global logclass
global tcl_platform
gen_log:log T "ENTER"
set cwd [pwd]
set pid [pid]
if {[winfo exists .workdir]} {
wm deiconify .workdir
raise .workdir
return
}
# Make a new toplevel and unmap . so that the working directory browser
# the module browser are equal
toplevel .workdir
wm title .workdir "TkCVS Working Directory"
wm iconname .workdir "TkCVS"
if {$tcl_platform(platform) != "windows"} {
wm iconbitmap .workdir @$cvscfg(bitmapdir)/tkcvs48.xbm
}
wm minsize .workdir 430 300
wm protocol .workdir WM_DELETE_WINDOW { .workdir.close invoke }
wm withdraw .
if {[catch "image type Conflict"]} {
workdir_images
}
# Ignore the dimensions, because they depend on the content. Use
# the remembered position though.
if {[info exists cvscfg(workgeom)]} {
wm geometry .workdir $cvscfg(workgeom)
}
workdir_menus
#
# Top section - where we are, where the module is
#
frame .workdir.top -relief groove -border 2
pack .workdir.top -side top -fill x
::picklist::entry .workdir.top.tcwd cwd directory
::picklist::bind .workdir.top.tcwd <Return> \
{if {[pwd] != $cwd} {change_dir "$cwd"}}
button .workdir.top.updir_btn -image updir \
-command {change_dir ..}
label .workdir.top.lmodule -text "Path"
label .workdir.top.tmodule -textvariable module_dir -anchor w -relief groove
label .workdir.top.ltagname -text "Tag"
label .workdir.top.ttagname -textvariable current_tagname \
-anchor w -relief groove
# Make the Repository Browser button prominent
button .workdir.top.bmodbrowse -image Modules \
-command modbrowse_run
label .workdir.top.lcvsroot -text "CVSROOT"
entry .workdir.top.tcvsroot -textvariable cvscfg(cvsroot) \
-relief groove -state readonly \
-font $cvscfg(guifont) -readonlybackground $cvsglb(readonlybg)
grid columnconf .workdir.top 1 -weight 1
grid rowconf .workdir.top 3 -weight 1
grid .workdir.top.updir_btn -column 0 -row 0 -sticky s
grid .workdir.top.tcwd -column 1 -row 0 -columnspan 2 \
-sticky sew -padx 4 -pady 1
grid .workdir.top.lmodule -column 0 -row 1 -sticky nw
grid .workdir.top.tmodule -column 1 -row 1 -columnspan 2\
-padx 4 -pady 1 -sticky new
grid .workdir.top.bmodbrowse -column 2 -row 2 -rowspan 2 -sticky w
grid .workdir.top.ltagname -column 0 -row 2 -sticky nw
grid .workdir.top.ttagname -column 1 -row 2 -padx 4 -pady 1 -sticky new
grid .workdir.top.lcvsroot -column 0 -row 3 -sticky nw
grid .workdir.top.tcvsroot -column 1 -row 3 -padx 3 -sticky new
# Pack the bottom before the middle so it doesnt disappear if
# the window is resized smaller
#frame .workdir.bottom -relief groove -border 2 -height 128
frame .workdir.bottom
frame .workdir.bottom.filters -relief raised
pack .workdir.bottom -side bottom -fill x
pack .workdir.bottom.filters -side top -fill x
label .workdir.bottom.filters.showlbl -text "Show:" -anchor w
entry .workdir.bottom.filters.showentry -textvariable cvscfg(file_filter) -width 12
label .workdir.bottom.filters.hidelbl -text " Hide:" -anchor w
entry .workdir.bottom.filters.hideentry -width 12 \
-textvariable cvsglb(default_ignore_filter)
label .workdir.bottom.filters.space -text " "
button .workdir.bottom.filters.cleanbutton -text "Clean:" \
-pady 0 -highlightthickness 0 \
-command workdir_cleanup
entry .workdir.bottom.filters.cleanentry -width 12 \
-textvariable cvscfg(clean_these)
bind .workdir.bottom.filters.showentry <Return> {setup_dir}
bind .workdir.bottom.filters.hideentry <Return> {
set cvsglb(default_ignore_filter) [.workdir.bottom.filters.hideentry get]
setup_dir}
bind .workdir.bottom.filters.cleanentry <Return> {workdir_cleanup}
pack .workdir.bottom.filters.showlbl -side left
pack .workdir.bottom.filters.showentry -side left
pack .workdir.bottom.filters.hidelbl -side left
pack .workdir.bottom.filters.hideentry -side left
pack .workdir.bottom.filters.space -side left
pack .workdir.bottom.filters.cleanbutton -side left -ipadx 2 -ipady 0
pack .workdir.bottom.filters.cleanentry -side left
frame .workdir.bottom.buttons -relief groove -bd 2
frame .workdir.bottom.buttons.funcs -relief groove -bd 2
frame .workdir.bottom.buttons.dirfuncs -relief groove -bd 2
frame .workdir.bottom.buttons.cvsfuncs -relief groove -bd 2
frame .workdir.bottom.buttons.oddfuncs -relief groove -bd 2
frame .workdir.bottom.buttons.close -relief groove -bd 2
pack .workdir.bottom.buttons -side top -fill x -expand yes
pack .workdir.bottom.buttons.close -side right -padx 10
pack .workdir.bottom.buttons.funcs -side left -expand yes -anchor w
pack .workdir.bottom.buttons.dirfuncs -side left -expand yes -anchor w
pack .workdir.bottom.buttons.cvsfuncs -side left -expand yes -anchor w
pack .workdir.bottom.buttons.oddfuncs -side left -expand yes -anchor w
#
# Action buttons along the bottom of the screen.
#
button .workdir.bottom.buttons.funcs.bedit_files -image Fileedit \
-command { workdir_edit_file [workdir_list_files] }
button .workdir.bottom.buttons.funcs.bview_files -image Fileview \
-command { workdir_view_file [workdir_list_files] }
button .workdir.bottom.buttons.funcs.bdelete_file -image Delete \
-command { workdir_delete_file [workdir_list_files] }
button .workdir.bottom.buttons.dirfuncs.brefresh -image Refresh \
-command { change_dir [pwd] }
button .workdir.bottom.buttons.dirfuncs.bcheckdir -image Check
button .workdir.bottom.buttons.cvsfuncs.blogfile -image Branches \
-command { cvs_branches [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bannotate -image Annotate \
-command { cvs_annotate $current_tagname [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bfilelog -image Log \
-command { cvs_log [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bdiff -image Diff \
-command { comparediff [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bconflict -image Conflict \
-command { cvs_merge_conflict [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.btag -image Tag \
-command { file_tag_dialog "no" }
button .workdir.bottom.buttons.cvsfuncs.bbranchtag -image Branchtag \
-command { file_tag_dialog "yes" }
button .workdir.bottom.buttons.cvsfuncs.badd_files -image Add \
-command { add_dialog [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bremove -image Remove \
-command { subtract_dialog [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bcheckin -image Checkin \
-command cvs_commit_dialog
button .workdir.bottom.buttons.cvsfuncs.bupdate -image Checkout
button .workdir.bottom.buttons.cvsfuncs.bupdateopts -image CheckoutOpts \
-command { update_run }
button .workdir.bottom.buttons.cvsfuncs.brevert -image Revert \
-command { cvs_revert [workdir_list_files] }
button .workdir.bottom.buttons.cvsfuncs.bjoin -image DirBranches \
-command cvs_joincanvas
button .workdir.bottom.buttons.oddfuncs.bcvsedit_files -image Edit \
-command { cvs_edit [workdir_list_files] }
button .workdir.bottom.buttons.oddfuncs.bunedit_files -image Unedit \
-command { cvs_unedit [workdir_list_files] }
button .workdir.bottom.buttons.oddfuncs.block -image Lock
button .workdir.bottom.buttons.oddfuncs.bunlock -image UnLock
button .workdir.close -text "Close" \
-command {
global cvscfg
set cvscfg(workgeom) [wm geometry .workdir]
destroy .workdir
exit_cleanup 0
}
# These buttons work in any directory
grid .workdir.bottom.buttons.funcs.bdelete_file -column 0 -row 0 \
-ipadx 2 -rowspan 4 -sticky ns
grid .workdir.bottom.buttons.funcs.bedit_files -column 1 -row 0 \
-ipadx 4
grid .workdir.bottom.buttons.funcs.bview_files -column 1 -row 1 \
-ipadx 4
# Directory functions
grid rowconf .workdir.bottom.buttons.dirfuncs 0 -weight 1
grid .workdir.bottom.buttons.dirfuncs.brefresh -column 0 -row 0 \
-ipadx 4 -ipady 4
grid .workdir.bottom.buttons.dirfuncs.bcheckdir -column 1 -row 0 \
-ipadx 4 -ipady 4
# Revcontrol functions
grid .workdir.bottom.buttons.cvsfuncs.blogfile -column 0 -row 0 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.bjoin -column 0 -row 1 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.bdiff -column 1 -row 0 \
-ipadx 2
grid .workdir.bottom.buttons.cvsfuncs.bconflict -column 1 -row 1 \
-ipadx 2
grid .workdir.bottom.buttons.cvsfuncs.bfilelog -column 2 -row 0
grid .workdir.bottom.buttons.cvsfuncs.bannotate -column 2 -row 1
grid .workdir.bottom.buttons.cvsfuncs.bupdate -column 3 -row 0 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.bcheckin -column 3 -row 1 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.bupdateopts -column 4 -row 0 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.brevert -column 4 -row 1 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.badd_files -column 5 -row 0
grid .workdir.bottom.buttons.cvsfuncs.bremove -column 5 -row 1
grid .workdir.bottom.buttons.cvsfuncs.btag -column 6 -row 0 \
-ipadx 4
grid .workdir.bottom.buttons.cvsfuncs.bbranchtag -column 6 -row 1 \
-ipadx 4
# These are specialized an not always available
grid .workdir.bottom.buttons.oddfuncs.block -column 0 -row 0
grid .workdir.bottom.buttons.oddfuncs.bunlock -column 0 -row 1
grid .workdir.bottom.buttons.oddfuncs.bcvsedit_files -column 1 -row 0
grid .workdir.bottom.buttons.oddfuncs.bunedit_files -column 1 -row 1
pack .workdir.close -in .workdir.bottom.buttons.close \
-side right -fill both -expand yes
set_tooltips .workdir.top.updir_btn \
{"Go up (..)"}
set_tooltips .workdir.bottom.buttons.funcs.bedit_files \
{"Edit the selected files"}
set_tooltips .workdir.bottom.buttons.funcs.bview_files \
{"View the selected files"}
set_tooltips .workdir.bottom.buttons.funcs.bdelete_file \
{"Delete the selected files from the current directory"}
set_tooltips .workdir.bottom.buttons.dirfuncs.brefresh \
{"Re-read the current directory"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bjoin \
{"Directory Branch Diagram and Merge Tool"}
set_tooltips .workdir.bottom.buttons.dirfuncs.bcheckdir \
{"Check the status of the directory"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.blogfile \
{"Graphical Branch Diagram of the selected files"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bfilelog \
{"Revision Log of the selected files"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bannotate \
{"Revision where each line was modified (annotate/blame)"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bdiff \
{"Compare the selected files with the repository version"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bconflict \
{"Merge Conflicts using TkDiff"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.badd_files \
{"Add the selected files to the repository"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.btag \
{"Tag the selected files"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bbranchtag \
{"Branch the selected files"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bremove \
{"Remove the selected files from the repository"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bcheckin \
{"Check in (commit) the selected files to the repository"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bupdate \
{"Update (checkout, patch) the selected files from the repository"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.brevert \
{"Revert the selected files, discarding local edits"}
set_tooltips .workdir.bottom.buttons.cvsfuncs.bupdateopts \
{"Update with options (-A, -r, -f, -d, -kb)"}
set_tooltips .workdir.bottom.buttons.oddfuncs.block \
{"Lock the selected files"}
set_tooltips .workdir.bottom.buttons.oddfuncs.bunlock \
{"Unlock the selected files"}
set_tooltips .workdir.bottom.buttons.oddfuncs.bcvsedit_files \
{"Set the Edit flag on the selected files"}
set_tooltips .workdir.bottom.buttons.oddfuncs.bunedit_files \
{"Reset the Edit flag on the selected files"}
set_tooltips .workdir.top.bmodbrowse \
{"Open the Repository Browser"}
set_tooltips .workdir.close \
{"Close the Working Directory Browser"}
frame .workdir.main
pack .workdir.main -side bottom -fill both -expand 1 -fill both
if {! [winfo ismapped .workdir]} {
wm deiconify .workdir
}
change_dir "[pwd]"
gen_log:log T "LEAVE"
}
proc workdir_images {} {
global cvscfg
image create photo arr_up \
-format gif -file [file join $cvscfg(bitmapdir) arrow_up.gif]
image create photo arr_dn \
-format gif -file [file join $cvscfg(bitmapdir) arrow_dn.gif]
image create photo arh_up \
-format gif -file [file join $cvscfg(bitmapdir) arrow_hl_up.gif]
image create photo arh_dn \
-format gif -file [file join $cvscfg(bitmapdir) arrow_hl_dn.gif]
image create photo updir \
-format gif -file [file join $cvscfg(bitmapdir) updir.gif]
image create photo Folder \
-format gif -file [file join $cvscfg(bitmapdir) dir.gif]
image create photo Check \
-format gif -file [file join $cvscfg(bitmapdir) check.gif]
image create photo Fileview \
-format gif -file [file join $cvscfg(bitmapdir) fileview.gif]
image create photo Fileedit \
-format gif -file [file join $cvscfg(bitmapdir) fileedit.gif]
image create photo Annotate \
-format gif -file [file join $cvscfg(bitmapdir) annotate.gif]
image create photo Delete \
-format gif -file [file join $cvscfg(bitmapdir) delete.gif]
image create photo Refresh \
-format gif -file [file join $cvscfg(bitmapdir) loop-glasses.gif]
image create photo Branches \
-format gif -file [file join $cvscfg(bitmapdir) branch.gif]
image create photo DirBranches \
-format gif -file [file join $cvscfg(bitmapdir) dirbranch.gif]
image create photo Add \
-format gif -file [file join $cvscfg(bitmapdir) add.gif]
image create photo Remove \
-format gif -file [file join $cvscfg(bitmapdir) remove.gif]
image create photo Diff \
-format gif -file [file join $cvscfg(bitmapdir) diff.gif]
image create photo Checkin \
-format gif -file [file join $cvscfg(bitmapdir) checkin.gif]
image create photo Revert \
-format gif -file [file join $cvscfg(bitmapdir) loop-ball.gif]
image create photo Edit \
-format gif -file [file join $cvscfg(bitmapdir) edit.gif]
image create photo Unedit \
-format gif -file [file join $cvscfg(bitmapdir) unedit.gif]
image create photo Modules \
-format gif -file [file join $cvscfg(bitmapdir) modbrowse.gif]
image create photo Modules_cvs \
-format gif -file [file join $cvscfg(bitmapdir) modbrowse_cvs.gif]
image create photo Modules_svn \
-format gif -file [file join $cvscfg(bitmapdir) modbrowse_svn.gif]
image create photo Lock \
-format gif -file [file join $cvscfg(bitmapdir) locked.gif]
image create photo UnLock \
-format gif -file [file join $cvscfg(bitmapdir) unlocked.gif]
image create photo Tags \
-format gif -file [file join $cvscfg(bitmapdir) tags.gif]
image create photo Mergebranch \
-format gif -file [file join $cvscfg(bitmapdir) newmerge_simple.gif]
image create photo Mergediff \
-format gif -file [file join $cvscfg(bitmapdir) newmerge.gif]
image create photo Conflict \
-format gif -file [file join $cvscfg(bitmapdir) conflict.gif]
image create photo Man \
-format gif -file [file join $cvscfg(bitmapdir) man.gif]
}
proc workdir_menus {} {
global cvscfg
global cvsmenu
global usermenu
global execmenu
global bookmarks
gen_log:log T "ENTER"
set startdir "[pwd]"
.workdir configure -menu .workdir.menubar
menu .workdir.menubar
#
# Create the Menu bar
#
.workdir.menubar add cascade -label "File" -menu .workdir.menubar.file -underline 0
menu .workdir.menubar.file -tearoff 0
.workdir.menubar add cascade -label "CVS" -menu .workdir.menubar.cvs -underline 0
menu .workdir.menubar.cvs -tearoff 0
.workdir.menubar add cascade -label "SVN" -menu .workdir.menubar.svn -underline 0
menu .workdir.menubar.svn -tearoff 0
.workdir.menubar add cascade -label "RCS" -menu .workdir.menubar.rcs -underline 0
menu .workdir.menubar.rcs -tearoff 0
.workdir.menubar add cascade -label "Reports" -menu .workdir.menubar.reports -underline 2
menu .workdir.menubar.reports -tearoff 0
.workdir.menubar add cascade -label "Options" -menu .workdir.menubar.options -underline 0
menu .workdir.menubar.options -tearoff 0
if { [info exists cvsmenu] || \
[info exists usermenu] || \
[info exists execmenu]} {
.workdir.menubar add cascade -label "User Defined" -menu .workdir.menubar.user -underline 0
menu .workdir.menubar.user -tearoff 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -