git-gui: Check for fetch or push command failure and denote it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/git-gui b/git-gui
index 2645cd5..0cd85e3 100755
--- a/git-gui
+++ b/git-gui
@@ -1020,8 +1020,12 @@
 		-font $difffont \
 		-state disabled \
 		-yscrollcommand [list $w.m.sby set]
+	label $w.m.s -anchor w \
+		-justify left \
+		-font [concat $mainfont bold]
 	scrollbar $w.m.sby -command [list $w.m.t yview]
 	pack $w.m.l1 -side top -fill x
+	pack $w.m.s -side bottom -fill x
 	pack $w.m.sby -side right -fill y
 	pack $w.m.t -side left -fill both -expand 1
 	pack $w.m -side top -fill both -expand 1 -padx 5 -pady 10
@@ -1088,12 +1092,19 @@
 	$w.m.t conf -state disabled
 	$w.m.t see end
 
+	fconfigure $fd -blocking 1
 	if {[eof $fd]} {
-		close $fd
+		if {[catch {close $fd}]} {
+			$w.m.s conf -background red -text {Error: Command Failed}
+		} else {
+			$w.m.s conf -background green -text {Success}
+		}
 		$w.ok conf -text Close
 		$w.ok conf -state normal
 		array unset console_cr $w
+		return
 	}
+	fconfigure $fd -blocking 0
 }
 
 ######################################################################
@@ -1468,17 +1479,19 @@
 
 # -- Key Bindings
 bind $ui_comm <$M1B-Key-Return> {do_commit;break}
-bind . <Destroy> do_quit
-bind . <Key-F5> do_rescan
-bind . <$M1B-Key-r> do_rescan
-bind . <$M1B-Key-R> do_rescan
-bind . <$M1B-Key-s> do_signoff
-bind . <$M1B-Key-S> do_signoff
-bind . <$M1B-Key-u> do_checkin_all
-bind . <$M1B-Key-U> do_checkin_all
-bind . <$M1B-Key-Return> do_commit
-bind . <$M1B-Key-q> do_quit
-bind . <$M1B-Key-Q> do_quit
+bind .   <Destroy> do_quit
+bind all <Key-F5> do_rescan
+bind all <$M1B-Key-r> do_rescan
+bind all <$M1B-Key-R> do_rescan
+bind .   <$M1B-Key-s> do_signoff
+bind .   <$M1B-Key-S> do_signoff
+bind .   <$M1B-Key-u> do_checkin_all
+bind .   <$M1B-Key-U> do_checkin_all
+bind .   <$M1B-Key-Return> do_commit
+bind all <$M1B-Key-q> do_quit
+bind all <$M1B-Key-Q> do_quit
+bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
+bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
 foreach i [list $ui_index $ui_other] {
 	bind $i <Button-1> {click %W %x %y 1 %X %Y; break}
 	bind $i <Button-3> {click %W %x %y 3 %X %Y; break}