Code

git-gui: Allow the user to copy name of the file in the diff viewer.
authorShawn O. Pearce <spearce@spearce.org>
Mon, 13 Nov 2006 02:11:12 +0000 (21:11 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Mon, 13 Nov 2006 05:10:40 +0000 (00:10 -0500)
There's a lot of reasons why the user might need to obtain the
complete (or just part of) path of a file which they are currently
viewing in the diff viewer pane.  So now we allow selection on this
widget by using a text widget instead of a label.  We also offer a
context menu which has actions for copying the selection or the entire
value onto the clipboard.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui

diff --git a/git-gui b/git-gui
index 7e28328cf0d5eca0d5c3085954e5bff5c135594f..1e5b0d049d069f68fe63c53d8c52255ef2cce04b 100755 (executable)
--- a/git-gui
+++ b/git-gui
@@ -511,7 +511,7 @@ proc show_diff {path {w {}} {lno {}}} {
        set m [lindex $s 0]
        set diff_3way 0
        set diff_active 1
-       set ui_fname_value [escape_path $path]
+       set ui_fname_value $path
        set ui_fstatus_value [mapdesc $m $path]
        set ui_status_value "Loading diff of [escape_path $path]..."
 
@@ -2284,11 +2284,33 @@ frame .vpane.lower.diff.header -background orange
 label .vpane.lower.diff.header.l1 -text {File:} \
        -background orange \
        -font font_ui
-label .vpane.lower.diff.header.l2 -textvariable ui_fname_value \
+set ui_fname .vpane.lower.diff.header.l2
+text $ui_fname \
        -background orange \
-       -anchor w \
-       -justify left \
+       -height 1 \
+       -relief flat \
+       -state disabled \
        -font font_ui
+menu $ui_fname.ctxm -tearoff 0
+$ui_fname.ctxm add command -label "Copy Only Selection" \
+       -font font_ui \
+       -command "tk_textCopy $ui_fname"
+$ui_fname.ctxm add command -label "Copy Complete Name" \
+       -font font_ui \
+       -command "
+               $ui_fname tag add sel 0.0 {end -1c}
+               tk_textCopy $ui_fname
+               $ui_fname tag remove sel 0.0 end
+       "
+bind_button3 $ui_fname "tk_popup $ui_fname.ctxm %X %Y"
+trace add variable ui_fname_value write $ui_fname.update
+proc $ui_fname.update {varname args} {
+       global ui_fname ui_fname_value
+       $ui_fname configure -state normal
+       $ui_fname delete 0.0 end
+       $ui_fname insert end [escape_path $ui_fname_value]
+       $ui_fname configure -state disabled
+}
 label .vpane.lower.diff.header.l3 -text {Status:} \
        -background orange \
        -font font_ui