Index: libs/manpower/manpower-main.tcl ================================================================== --- libs/manpower/manpower-main.tcl +++ libs/manpower/manpower-main.tcl @@ -22,16 +22,18 @@ R0lGODlhDgAOAJEAANnZ2YCAgPz8/P///yH5BAEAAAAALAAAAAAOAA4AAAInhI+ py+1I4ocQ/IgDEYIPgYJICUCE4F+YIBolEoKPEJKZmVJK6ZACADs=} image create photo noArrow -height 14 -width 14 +#aem::installeventhandler CoKv sMan showManFromScript +#aem::installeventhandler GURL GURL showManURL #handle "get URL" event for man page proc showManURL {man} { - global manitem - set manitem [lindex [split $man "//"] 2] - singleManPage + global manitem + set manitem [lindex [split $man "//"] 2] + singleManPage } proc showManFromScript {man} { @@ -84,12 +86,12 @@ proc makeImage {} { #create the images set imagedir [file join [file dirname [info script]] images] - - set imagefiles [glob -directory $imagedir *.tcl] + + set imagefiles [glob -directory $imagedir *.tcl] foreach item $imagefiles { source $item } softwareupdate::setIcon icon-update @@ -114,11 +116,11 @@ global datadir set manitem "" set searchterm "" set manterm "" - + #set up menu menu .mb #apple menu @@ -130,11 +132,11 @@ .mb add cascade -label "Manpower" -menu .mb.apple #man page menu menu .mb.man - .mb.man add command -label "Find Man Page" -command manSearch -accelerator "Command-F" + .mb.man add command -label "Find Man Page" -command {.t.left.tree selection set Search} -accelerator "Command-F" menu .mb.man.save .mb.man.save add command -label "Text" -command saveMan .mb.man.save add command -label "HTML" -command saveHTML .mb.man.save add command -label "PDF" -command savePDF @@ -168,12 +170,10 @@ . configure -menu .mb wm title . "Manpower" - - ttk::style configure Toolbutton -font {Iconic 22} #create frame for toolbar pack [ttk::frame .tool] -side top -fill both -expand no #create toolbar @@ -235,11 +235,11 @@ bind .tool.toolbar.frame.browser checkManSelection #additional bindings bind .tool.toolbar.frame.browser {singleManPage} - bind .tool.toolbar.frame.entry {manSearch; writeState} + bind .tool.toolbar.frame.entry {manSearch} ttk::frame .bottom pack .bottom -side bottom -fill both -expand no ttk::separator .bottomsep -orient vertical @@ -264,18 +264,15 @@ macro xbm_script_16 admin xbm_home_16 kernel xbm_refresh_16 } - - #lay out the tree widget ttk::treeview .middle.left.tree -yscrollcommand [list .middle.left.scroll set] -show tree pack .middle.left.tree -fill both -side left -expand yes - - - #tree display for categories + + #tree display for categories ttk::treeview .t.left.tree -yscrollcommand [list .t.left.scroll set] -show tree pack .t.left.tree -fill both -side left -expand yes ttk::scrollbar .t.left.scroll -command [list .t.left.tree yview] @@ -283,28 +280,23 @@ set entry1 [.middle.left.tree insert {} end -id All -value All -text "All" -image xbm_website_16] set entry2 [.middle.left.tree insert {} end -id Search -value Search -text "Search" -image xbm_search_16] set entry3 [ .middle.left.tree insert {} end -id Category -value Category -text "Category" -image xbm_category_16 ] - set categoryman [list users "1. User Commands" system "2. System Commands" library "3. Library Commands" special "4. Special" file-system "5. File Formats" other "6. Other" macro "7. Macros/Conventions" admin "8. Administrative" kernel "9. Kernel Commands" ] foreach {key value} $categoryman { .middle.left.tree insert $entry3 end -id $key -value $key -text $value -image $treelabel($key) } - scrollbar .middle.left.scroll -command [list .middle.left.tree yview] + ttk::scrollbar .middle.left.scroll -command [list .middle.left.tree yview] pack .middle.left.scroll -side right -fill y -expand no - bind .middle.left.tree.c [list +event generate .middle.left.tree <>] - bind .middle.left.tree.c [list +event generate .middle.left.tree <>] + bind .middle.left.tree <> {setCat} - bind .middle.left.tree <> {selectCat} - - bind .middle.left.tree.c {%W yview scroll [expr {- (%D)}] units} .middle.left.tree opentree Category ttk::panedwindow .middle.right pack .middle.right -side right -fill both -expand yes @@ -319,16 +311,16 @@ pack .middle.right.upper.frame.row -side right -fill y -expand no ttk::label .middle.right.upper.frame.row.corner -style TablelistHeader.TLabel pack .middle.right.upper.frame.row.corner -side top -fill x -expand no - scrollbar .middle.right.upper.frame.row.vsb -orient vertical -command [list .middle.right.upper.frame.listbox yview] + ttk::scrollbar .middle.right.upper.frame.row.vsb -orient vertical -command [list .middle.right.upper.frame.listbox yview] pack .middle.right.upper.frame.row.vsb -side bottom -fill y -expand 1 #main data display - tablelist::tablelist .middle.right.upper.frame.listbox -columns {"Man Page" "Description"} -show headings -yscrollcommand [list .middle.right.upper.frame.row.vsb set] -displaycolumns #all - + ttk::treeview .middle.right.upper.frame.listbox -columns {"Man Page" "Description"} -show headings -yscrollcommand [list .middle.right.upper.frame.row.vsb set] -displaycolumns #all + pack .middle.right.upper.frame.listbox -side left -fill both -expand yes bind .middle.right.upper.frame.listbox <> {getManPage} foreach "item" $manlist { .middle.right.upper.frame.listbox insert end $item @@ -335,11 +327,11 @@ } #menu for right-clicking menu .popup - .popup add command -label "Find Man Page" -command manSearch + .popup add command -label "Find Man Page" -command {.t.left.tree selection set Search} .popup add command -label "Print Man Page" -command printFile bind [.middle.right.upper.frame.listbox bodypath] {tk_popup .popup %X %Y} #the rest of the display @@ -349,17 +341,14 @@ ttk::frame .middle.right.lower.right -height 100 pack .middle.right.lower.right -side right -fill both -expand yes #output display--text - text .middle.right.lower.right.log -borderwidth .1 -relief sunken -wrap word -highlightcolor SlateGray3 -yscrollcommand {.middle.right.lower.right.vsb set} -bg white -state disabled - - tclservices::registerservicewidget .middle.right.lower.right.log - bind .middle.right.lower.right.log <> checkTextSelection + text .middle.right.lower.right.log -borderwidth .1 -relief sunken -wrap word -highlightcolor SlateGray3 -yscrollcommand {.middle.right.lower.right.vsb set} -state disabled - scrollbar .middle.right.lower.right.vsb -command ".middle.right.lower.right.log yview" + ttk::scrollbar .middle.right.lower.right.vsb -command ".middle.right.lower.right.log yview" pack .middle.right.lower.right.log -side left -fill both -expand yes pack .middle.right.lower.right.vsb -side right -fill y .middle.right.lower.right.log tag configure manref -foreground blue -underline on @@ -377,50 +366,50 @@ toplevel .bookmarks tk::unsupported::MacWindowStyle style .bookmarks utility wm title .bookmarks "Bookmarks" #draw drawer window offscreen - ttk::label .bookmarks.header -style TablelistHeader.TLabel -text "Bookmarks" -font {-size 12} + ttk::label .bookmarks.header -text "Bookmarks" pack .bookmarks.header -side top -fill both -expand yes ttk::frame .bookmarks.top pack .bookmarks.top -fill both -expand yes -side top ttk::frame .bookmarks.bottom -padding 2 pack .bookmarks.bottom -fill both -expand no -side bottom - - listbox .bookmarks.top.list -yscrollcommand [list .bookmarks.top.scrollbar set] -font {-size 12} -relief flat -bd 0 -selectbackground RoyalBlue1 -selectforeground white -height 30 -activestyle none + listbox .bookmarks.top.list -yscrollcommand [list .bookmarks.top.ttk::scrollbar set] -font {-size 12} -relief flat -bd 0 -height 30 -activestyle none pack .bookmarks.top.list -side left -fill both -expand yes - scrollbar .bookmarks.top.scrollbar -command [list .bookmarks.top.list yview] - pack .bookmarks.top.scrollbar -side right -fill y -expand no - - ttk::button .bookmarks.bottom.add -style Toolbutton -text \u2795 -takefocus 0 -command addBookMark - ttk::button .bookmarks.bottom.delete -style Toolbutton -text \u2796 -takefocus 0 -command deleteBookMark - - DynamicHelp::register .bookmarks.bottom.add balloon "Add bookmark" - DynamicHelp::register .bookmarks.bottom.delete balloon "Delete bookmark" - + ttk::scrollbar .bookmarks.top.ttk::scrollbar -command [list .bookmarks.top.list yview] + pack .bookmarks.top.ttk::scrollbar -side right -fill y -expand no + + ttk::button .bookmarks.bottom.add -style Toolbutton -text "+" -takefocus 0 -command addBookMark + ttk::button .bookmarks.bottom.delete -style Toolbutton -text "-" -takefocus 0 -command deleteBookMark + + tooltip::tooltip .bookmarks.bottom.add "Add bookmark" + tooltip::tooltip .bookmarks.bottom.delete "Delete bookmark" bind .bookmarks.top.list <> getManPagefromBookmark pack .bookmarks.bottom.add .bookmarks.bottom.delete -side left -fill both -expand no wm withdraw .bookmarks wm protocol .bookmarks WM_DELETE_WINDOW {wm withdraw .bookmarks} #other bindings - bind all manSearch - bind all manSearch + bind all {.t.left.tree selection set Search} + bind all {.t.left.tree selection set Search} bind all printFile bind all printFile bind . {wm state . withdrawn} bind . {wm state . withdrawn} - wm protocol . WM_DELETE_WINDOW {wm withdraw .} + wm protocol . WM_DELETE_WINDOW {wm withdraw .} + + .t.left.tree selection set All } ## Code to do the sorting of the tree contents when clicked on proc SortBy {tree col direction} { @@ -479,12 +468,10 @@ proc getAllMan {} { global manlist global cachedir - puts "home is $::env(HOME)" - set result [exec man -k \[a-zA-Z0-9\] > $cachedir/manpages 2>$cachedir/error] set fd [open $cachedir/manpages r] set basiclist [split [read $fd] \n] set displaylist [lrange $basiclist 0 end-1] @@ -543,11 +530,11 @@ global manitem global status global rmanpath global cachedir - set item [lindex [.middle.right.upper.frame.listbox get [.middle.right.upper.frame.listbox curselection]] 0] + set item [lindex [.middle.right.upper.frame.listbox item [.middle.right.upper.frame.listbox selection] -values] 0] #parse man page name from list set mansplit [split $item \(] set manitem [lindex $mansplit 0] set mansection [lindex [split [lindex $mansplit 1] \)] 0] @@ -575,42 +562,34 @@ set status "Open man page: $manitem" } #get category for browsing--bound to single-click -proc setCat {node} { +proc setCat {} { global category global manlist - .middle.left.tree selection set $node - - if { $node == "Category"} { - return - } - if {$node == "Search"} { - manSearch - return - } - if {$node == "All" } { - refreshManList - return - } else { - manCat - } - -} - -#get selected node in tree; we use this because setCat takes a node name as arg, can't simply be called -proc selectCat {} { - - global manlist - global mynode - - set mynode [.middle.left.tree selection get] - setCat $mynode -} + set node [lindex [.middle.left.tree item [.middle.left.tree selection] -values] 0] + + switch - $node { + "" { + return + } "Category" { + return + } "Search" { + manSearch + return + } "All" { + refreshManList + return + } default { + manCat + } + } +} + #search list of man pages for keyword proc manSearch {} { global manlist global searchterm @@ -808,11 +787,10 @@ set range [ .middle.right.lower.right.log tag prevrange manref $i] set final [eval .middle.right.lower.right.log get $range] set new [lindex [split $final \(] 0] set manitem $new singleManPage - # convertMan .middle.right.lower.right.log configure -cursor arrow } @@ -940,13 +918,13 @@ if {![file exists $cachedir]} { file mkdir $cachedir } - if {![file exists $datadir]} { - file mkdir $datadir - } + if {![file exists $datadir]} { + file mkdir $datadir + } set resourcedir [file join [softwareupdate::findCurrentInstallation] "Contents" "Resources"] getAllMan makeImage @@ -1006,11 +984,11 @@ #custom "about" dialog proc aboutWindow {} { - tk_messageBox -parent . -icon info -title "About Manpower" -message "Manpower: Man Page Viewer" -detail "Version 7.0\n(c)2019 WordTech Communications LLC" + tk_messageBox -parent . -icon info -title "About Manpower" -message "Manpower: Man Page Viewer" -detail "Version 7.0\n(c)2019 WordTech Communications LLC" } #raise window if closed--dock click proc ::tk::mac::ReopenApplication {} {