+ bind $w_cviewer <Shift-Tab> "[cb _focus_search $w_file];break"
+ bind $w_cviewer <Tab> "[list focus $w_file];break"
+ bind $w_cviewer <Button-1> [list focus $w_cviewer]
+ bind $w_file <Visibility> [cb _focus_search $w_file]
+ bind $top <F7> [list searchbar::show $finder]
+ bind $top <Escape> [list searchbar::hide $finder]
+ bind $top <F3> [list searchbar::find_next $finder]
+ bind $top <Shift-F3> [list searchbar::find_prev $finder]
+ catch { bind $top <Shift-Key-XF86_Switch_VT_3> [list searchbar::find_prev $finder] }
+
+ grid configure $w.header -sticky ew
+ grid configure $w.file_pane -sticky nsew
+ grid configure $w.status -sticky ew
+ grid columnconfigure $top 0 -weight 1
+ grid rowconfigure $top 0 -weight 0
+ grid rowconfigure $top 1 -weight 1
+ grid rowconfigure $top 2 -weight 0
+
+ set req_w [winfo reqwidth $top]
+ set req_h [winfo reqheight $top]
+ set scr_w [expr {[winfo screenwidth $top] - 40}]
+ set scr_h [expr {[winfo screenheight $top] - 120}]
+ set opt_w [expr {$font_w * (80 + 5*3 + 3)}]
+ if {$req_w < $opt_w} {set req_w $opt_w}
+ if {$req_w > $scr_w} {set req_w $scr_w}
+ set opt_h [expr {$req_w*4/3}]
+ if {$req_h < $scr_h} {set req_h $scr_h}
+ if {$req_h > $opt_h} {set req_h $opt_h}
+ set g "${req_w}x${req_h}"
+ wm geometry $top $g
+ update
+
+ set old_height [winfo height $w.file_pane]
+ $w.file_pane sash place 0 \
+ [lindex [$w.file_pane sash coord 0] 0] \
+ [expr {int($old_height * 0.80)}]
+ bind $w.file_pane <Configure> \
+ "if {{$w.file_pane} eq {%W}} {[cb _resize %h]}"
+
+ wm protocol $top WM_DELETE_WINDOW "destroy $top"
+ bind $top <Destroy> [cb _handle_destroy %W]
+
+ _load $this $i_jump
+}
+
+method _focus_search {win} {
+ if {[searchbar::visible $finder]} {
+ focus [searchbar::editor $finder]
+ } else {
+ focus $win
+ }
+}
+
+method _handle_destroy {win} {
+ if {$win eq $w} {
+ _kill $this
+ delete_this
+ }
+}
+
+method _kill {} {
+ if {$current_fd ne {}} {
+ kill_file_process $current_fd
+ catch {close $current_fd}
+ set current_fd {}
+ }
+}
+
+method _load {jump} {
+ variable group_colors
+
+ _hide_tooltip $this
+
+ if {$total_lines != 0 || $current_fd ne {}} {
+ _kill $this
+
+ foreach i $w_columns {
+ $i conf -state normal
+ $i delete 0.0 end
+ foreach g [$i tag names] {
+ if {[regexp {^g[0-9a-f]{40}$} $g]} {
+ $i tag delete $g
+ }
+ }
+ $i conf -state disabled
+ }
+
+ $w_cviewer conf -state normal
+ $w_cviewer delete 0.0 end
+ $w_cviewer conf -state disabled
+
+ set highlight_line -1
+ set highlight_column {}
+ set highlight_commit {}
+ set total_lines 0
+ }
+
+ if {$history eq {}} {
+ $w_back conf -state disabled
+ } else {
+ $w_back conf -state normal
+ }