git-gui: Use vi-like keys in merge dialog gitgui-0.7.0-rc1
authorShawn O. Pearce <spearce@spearce.org>
Sat, 5 May 2007 06:28:41 +0000 (02:28 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Tue, 8 May 2007 03:35:53 +0000 (23:35 -0400)
Since we support vi-like keys for scrolling in other UI contexts
we can easily do so here too.  Tk's handy little `event generate'
makes this a lot easier than I thought it would be.  We may want
to go back and fix some of the other vi-like bindings to redirect
to the arrow and pageup/pagedown keys, rather than running the
view changes directly.

I've bound 'v' to visualize, as this is a somewhat common thing
to want to do in the merge dialog.  Control (or Command) Return
is also bound to start the merge, much as it is bound in the
main window to activate the commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/merge.tcl

index 304490a276c80a51a39b4173eba37cd68b5b0ff8..3dce856e5ef29663f10fec818a2b25a9737060c0 100644 (file)
@@ -160,6 +160,7 @@ You can attempt this merge again by merging only one branch at a time." $w
 
 proc dialog {} {
        global current_branch
+       global M1B
 
        if {![_can_merge]} return
 
@@ -197,20 +198,20 @@ proc dialog {} {
        toplevel $w
        wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
 
+       set _visualize [namespace code [list _visualize $w $to_show]]
+       set _start [namespace code [list _start $w $to_show]]
+
        label $w.header \
                -text "Merge Into $current_branch" \
                -font font_uibold
        pack $w.header -side top -fill x
 
        frame $w.buttons
-       button $w.buttons.visualize -text Visualize \
-               -command [namespace code [list _visualize $w $to_show]]
+       button $w.buttons.visualize -text Visualize -command $_visualize
        pack $w.buttons.visualize -side left
-       button $w.buttons.create -text Merge \
-               -command [namespace code [list _start $w $to_show]]
+       button $w.buttons.create -text Merge -command $_start
        pack $w.buttons.create -side right
-       button $w.buttons.cancel -text {Cancel} \
-               -command [list destroy $w]
+       button $w.buttons.cancel -text {Cancel} -command [list destroy $w]
        pack $w.buttons.cancel -side right -padx 5
        pack $w.buttons -side bottom -fill x -pady 10 -padx 10
 
@@ -237,6 +238,13 @@ proc dialog {} {
                        $subj([lindex $ref 0])]
        }
 
+       bind $w.source.l <Key-k> [list event generate %W <Key-Up>]
+       bind $w.source.l <Key-j> [list event generate %W <Key-Down>]
+       bind $w.source.l <Key-h> [list event generate %W <Key-Left>]
+       bind $w.source.l <Key-l> [list event generate %W <Key-Right>]
+       bind $w.source.l <Key-v> $_visualize
+
+       bind $w <$M1B-Key-Return> $_start
        bind $w <Visibility> "grab $w; focus $w.source.l"
        bind $w <Key-Escape> "unlock_index;destroy $w"
        bind $w <Destroy> unlock_index