git-gui: Enable jumping to a specific line number in blame view.
authorDavid Fries <david@fries.net>
Sun, 17 Jul 2011 01:47:14 +0000 (20:47 -0500)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Tue, 19 Jul 2011 14:31:24 +0000 (15:31 +0100)
This patch adds a goto control similar to the search control currently
available. The goto control permits the user to specify a line number to
jump to.
When in blame, Control-G is bound to display this control.

Signed-off-by: David Fries <David@Fries.net>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
lib/blame.tcl
lib/line.tcl [new file with mode: 0644]

index 1f2977d5bb525521e13380e3957708ba4f025473..14fde81761315aa67363fa549d78a56413f86069 100644 (file)
@@ -22,6 +22,7 @@ field w_asim     ; # text column: annotations (simple computation)
 field w_file     ; # text column: actual file data
 field w_cviewer  ; # pane showing commit message
 field finder     ; # find mini-dialog frame
+field gotoline   ; # line goto mini-dialog frame
 field status     ; # status mega-widget instance
 field old_height ; # last known height of $w.file_pane
 
@@ -231,6 +232,11 @@ constructor new {i_commit i_path i_jump} {
                -column [expr {[llength $w_columns] - 1}] \
                ]
 
+       set gotoline [::linebar::new \
+               $w.file_pane.out.lf $w_file \
+               -column [expr {[llength $w_columns] - 1}] \
+               ]
+
        set w_cviewer $w.file_pane.cm.t
        text $w_cviewer \
                -background white \
@@ -275,6 +281,10 @@ constructor new {i_commit i_path i_jump} {
                -label [mc "Find Text..."] \
                -accelerator F7 \
                -command [list searchbar::show $finder]
+       $w.ctxm add command \
+               -label [mc "Goto Line..."] \
+               -accelerator "Ctrl-G" \
+               -command [list linebar::show $gotoline]
        menu $w.ctxm.enc
        build_encoding_menu $w.ctxm.enc [cb _setencoding]
        $w.ctxm add cascade \
@@ -345,6 +355,7 @@ constructor new {i_commit i_path i_jump} {
        bind $top       <Escape>     [list searchbar::hide $finder]
        bind $top       <F3>         [list searchbar::find_next $finder]
        bind $top       <Shift-F3>   [list searchbar::find_prev $finder]
+       bind $top    <Control-Key-g> [list linebar::show $gotoline]
        catch { bind $top <Shift-Key-XF86_Switch_VT_3> [list searchbar::find_prev $finder] }
 
        grid configure $w.header -sticky ew
diff --git a/lib/line.tcl b/lib/line.tcl
new file mode 100644 (file)
index 0000000..4913bdd
--- /dev/null
@@ -0,0 +1,64 @@
+# goto line number
+# based on code from gitk, Copyright (C) Paul Mackerras
+
+class linebar {
+
+field w
+field ctext
+
+field linenum   {}
+
+constructor new {i_w i_text args} {
+       global use_ttk NS
+       set w      $i_w
+       set ctext  $i_text
+
+       ${NS}::frame  $w
+       ${NS}::label  $w.l       -text [mc "Goto Line:"]
+       entry  $w.ent -textvariable ${__this}::linenum -background lightgreen
+       ${NS}::button $w.bn      -text [mc Go] -command [cb _incrgoto]
+
+       pack   $w.l   -side left
+       pack   $w.bn  -side right
+       pack   $w.ent -side left -expand 1 -fill x
+
+       eval grid conf $w -sticky we $args
+       grid remove $w
+
+       bind $w.ent <Return> [cb _incrgoto]
+       bind $w.ent <Escape> [list linebar::hide $this]
+
+       bind $w <Destroy> [list delete_this $this]
+       return $this
+}
+
+method show {} {
+       if {![visible $this]} {
+               grid $w
+       }
+       focus -force $w.ent
+}
+
+method hide {} {
+       if {[visible $this]} {
+               focus $ctext
+               grid remove $w
+       }
+}
+
+method visible {} {
+       return [winfo ismapped $w]
+}
+
+method editor {} {
+       return $w.ent
+}
+
+method _incrgoto {} {
+       if {$linenum ne {}} {
+               $ctext see $linenum.0
+               hide $this
+       }
+}
+
+}