Merge git://repo.or.cz/git-gui
* git://repo.or.cz/git-gui: git-gui: update french translation git-gui: update Japanese translation git-gui: fix shortcut for menu "Commit/Revert Changes" git-gui: Quote git path when starting another gui in a submodule git-gui: update Italian translation git-gui: Update Swedish translation (520t0f0u) git-gui: use themed tk widgets with Tk 8.5 git-gui: Update German translation (12 new or changed strings). git-gui: Update translation template git-gui: Remove unused icon file_parttick git-gui: use different icon for new and modified files in the index git-gui: set GIT_DIR and GIT_WORK_TREE after setup git-gui: update shortcut tools to use _gitworktree git-gui: handle bare repos correctly git-gui: handle non-standard worktree locations git-gui: Support applying a range of changes at once git-gui: Add a special diff popup menu for submodules git-gui: Use git diff --submodule when available
This commit is contained in:
@ -121,6 +121,8 @@ unset oguimsg
|
||||
|
||||
set _appname {Git Gui}
|
||||
set _gitdir {}
|
||||
set _gitworktree {}
|
||||
set _isbare {}
|
||||
set _gitexec {}
|
||||
set _githtmldir {}
|
||||
set _reponame {}
|
||||
@ -276,6 +278,32 @@ proc get_config {name} {
|
||||
}
|
||||
}
|
||||
|
||||
proc is_bare {} {
|
||||
global _isbare
|
||||
global _gitdir
|
||||
global _gitworktree
|
||||
|
||||
if {$_isbare eq {}} {
|
||||
if {[catch {
|
||||
set _bare [git rev-parse --is-bare-repository]
|
||||
switch -- $_bare {
|
||||
true { set _isbare 1 }
|
||||
false { set _isbare 0}
|
||||
default { throw }
|
||||
}
|
||||
}]} {
|
||||
if {[is_config_true core.bare]
|
||||
|| ($_gitworktree eq {}
|
||||
&& [lindex [file split $_gitdir] end] ne {.git})} {
|
||||
set _isbare 1
|
||||
} else {
|
||||
set _isbare 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return $_isbare
|
||||
}
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## handy utils
|
||||
@ -649,12 +677,17 @@ if {[is_Windows]} {
|
||||
## config defaults
|
||||
|
||||
set cursor_ptr arrow
|
||||
font create font_diff -family Courier -size 10
|
||||
font create font_ui
|
||||
catch {
|
||||
label .dummy
|
||||
eval font configure font_ui [font actual [.dummy cget -font]]
|
||||
destroy .dummy
|
||||
if {[lsearch -exact [font names] TkDefaultFont] != -1} {
|
||||
eval [linsert [font actual TkDefaultFont] 0 font configure font_ui]
|
||||
eval [linsert [font actual TkFixedFont] 0 font create font_diff]
|
||||
} else {
|
||||
font create font_diff -family Courier -size 10
|
||||
catch {
|
||||
label .dummy
|
||||
eval font configure font_ui [font actual [.dummy cget -font]]
|
||||
destroy .dummy
|
||||
}
|
||||
}
|
||||
|
||||
font create font_uiitalic
|
||||
@ -669,6 +702,9 @@ foreach class {Button Checkbutton Entry Label
|
||||
}
|
||||
if {![is_MacOSX]} {
|
||||
option add *Menu.font font_ui
|
||||
option add *Entry.borderWidth 1 startupFile
|
||||
option add *Entry.relief sunken startupFile
|
||||
option add *RadioButton.anchor w startupFile
|
||||
}
|
||||
unset class
|
||||
|
||||
@ -721,6 +757,18 @@ proc apply_config {} {
|
||||
font configure ${font}bold -weight bold
|
||||
font configure ${font}italic -slant italic
|
||||
}
|
||||
|
||||
global use_ttk NS
|
||||
set use_ttk 0
|
||||
set NS {}
|
||||
if {$repo_config(gui.usettk)} {
|
||||
set use_ttk [package vsatisfies [package provide Tk] 8.5]
|
||||
if {$use_ttk} {
|
||||
set NS ttk
|
||||
bind [winfo class .] <<ThemeChanged>> [list InitTheme]
|
||||
pave_toplevel .
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set default_config(branch.autosetupmerge) true
|
||||
@ -747,6 +795,7 @@ set default_config(gui.fontui) [font configure font_ui]
|
||||
set default_config(gui.fontdiff) [font configure font_diff]
|
||||
# TODO: this option should be added to the git-config documentation
|
||||
set default_config(gui.maxfilesdisplayed) 5000
|
||||
set default_config(gui.usettk) 1
|
||||
set font_descs {
|
||||
{fontui font_ui {mc "Main Font"}}
|
||||
{fontdiff font_diff {mc "Diff/Console Font"}}
|
||||
@ -1100,25 +1149,41 @@ if {![file isdirectory $_gitdir]} {
|
||||
error_popup [strcat [mc "Git directory not found:"] "\n\n$_gitdir"]
|
||||
exit 1
|
||||
}
|
||||
# _gitdir exists, so try loading the config
|
||||
load_config 0
|
||||
apply_config
|
||||
# try to set work tree from environment, falling back to core.worktree
|
||||
if {[catch { set _gitworktree $env(GIT_WORK_TREE) }]} {
|
||||
set _gitworktree [get_config core.worktree]
|
||||
}
|
||||
if {$_prefix ne {}} {
|
||||
regsub -all {[^/]+/} $_prefix ../ cdup
|
||||
if {$_gitworktree eq {}} {
|
||||
regsub -all {[^/]+/} $_prefix ../ cdup
|
||||
} else {
|
||||
set cdup $_gitworktree
|
||||
}
|
||||
if {[catch {cd $cdup} err]} {
|
||||
catch {wm withdraw .}
|
||||
error_popup [strcat [mc "Cannot move to top of working directory:"] "\n\n$err"]
|
||||
exit 1
|
||||
}
|
||||
set _gitworktree [pwd]
|
||||
unset cdup
|
||||
} elseif {![is_enabled bare]} {
|
||||
if {[lindex [file split $_gitdir] end] ne {.git}} {
|
||||
if {[is_bare]} {
|
||||
catch {wm withdraw .}
|
||||
error_popup [strcat [mc "Cannot use funny .git directory:"] "\n\n$_gitdir"]
|
||||
error_popup [strcat [mc "Cannot use bare repository:"] "\n\n$_gitdir"]
|
||||
exit 1
|
||||
}
|
||||
if {[catch {cd [file dirname $_gitdir]} err]} {
|
||||
if {$_gitworktree eq {}} {
|
||||
set _gitworktree [file dirname $_gitdir]
|
||||
}
|
||||
if {[catch {cd $_gitworktree} err]} {
|
||||
catch {wm withdraw .}
|
||||
error_popup [strcat [mc "No working directory"] " [file dirname $_gitdir]:\n\n$err"]
|
||||
error_popup [strcat [mc "No working directory"] " $_gitworktree:\n\n$err"]
|
||||
exit 1
|
||||
}
|
||||
set _gitworktree [pwd]
|
||||
}
|
||||
set _reponame [file split [file normalize $_gitdir]]
|
||||
if {[lindex $_reponame end] eq {.git}} {
|
||||
@ -1127,6 +1192,9 @@ if {[lindex $_reponame end] eq {.git}} {
|
||||
set _reponame [lindex $_reponame end]
|
||||
}
|
||||
|
||||
set env(GIT_DIR) $_gitdir
|
||||
set env(GIT_WORK_TREE) $_gitworktree
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## global init
|
||||
@ -1808,15 +1876,6 @@ static unsigned char file_fulltick_bits[] = {
|
||||
0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f};
|
||||
} -maskdata $filemask
|
||||
|
||||
image create bitmap file_parttick -background white -foreground "#005050" -data {
|
||||
#define parttick_width 14
|
||||
#define parttick_height 15
|
||||
static unsigned char parttick_bits[] = {
|
||||
0xfe, 0x01, 0x02, 0x03, 0x7a, 0x05, 0x02, 0x09, 0x7a, 0x1f, 0x02, 0x10,
|
||||
0x7a, 0x14, 0x02, 0x16, 0x02, 0x13, 0x8a, 0x11, 0xda, 0x10, 0x72, 0x10,
|
||||
0x22, 0x10, 0x02, 0x10, 0xfe, 0x1f};
|
||||
} -maskdata $filemask
|
||||
|
||||
image create bitmap file_question -background white -foreground black -data {
|
||||
#define file_question_width 14
|
||||
#define file_question_height 15
|
||||
@ -1857,7 +1916,7 @@ set ui_index .vpane.files.index.list
|
||||
set ui_workdir .vpane.files.workdir.list
|
||||
|
||||
set all_icons(_$ui_index) file_plain
|
||||
set all_icons(A$ui_index) file_fulltick
|
||||
set all_icons(A$ui_index) file_plain
|
||||
set all_icons(M$ui_index) file_fulltick
|
||||
set all_icons(D$ui_index) file_removed
|
||||
set all_icons(U$ui_index) file_merge
|
||||
@ -1933,7 +1992,10 @@ proc incr_font_size {font {amt 1}} {
|
||||
|
||||
set starting_gitk_msg [mc "Starting gitk... please wait..."]
|
||||
|
||||
proc do_gitk {revs} {
|
||||
proc do_gitk {revs {is_submodule false}} {
|
||||
global current_diff_path file_states current_diff_side ui_index
|
||||
global _gitdir _gitworktree
|
||||
|
||||
# -- Always start gitk through whatever we were loaded with. This
|
||||
# lets us bypass using shell process on Windows systems.
|
||||
#
|
||||
@ -1944,23 +2006,78 @@ proc do_gitk {revs} {
|
||||
} else {
|
||||
global env
|
||||
|
||||
if {[info exists env(GIT_DIR)]} {
|
||||
set old_GIT_DIR $env(GIT_DIR)
|
||||
} else {
|
||||
set old_GIT_DIR {}
|
||||
}
|
||||
|
||||
set pwd [pwd]
|
||||
cd [file dirname [gitdir]]
|
||||
set env(GIT_DIR) [file tail [gitdir]]
|
||||
|
||||
if {!$is_submodule} {
|
||||
if {![is_bare]} {
|
||||
cd $_gitworktree
|
||||
}
|
||||
} else {
|
||||
cd $current_diff_path
|
||||
if {$revs eq {--}} {
|
||||
set s $file_states($current_diff_path)
|
||||
set old_sha1 {}
|
||||
set new_sha1 {}
|
||||
switch -glob -- [lindex $s 0] {
|
||||
M_ { set old_sha1 [lindex [lindex $s 2] 1] }
|
||||
_M { set old_sha1 [lindex [lindex $s 3] 1] }
|
||||
MM {
|
||||
if {$current_diff_side eq $ui_index} {
|
||||
set old_sha1 [lindex [lindex $s 2] 1]
|
||||
set new_sha1 [lindex [lindex $s 3] 1]
|
||||
} else {
|
||||
set old_sha1 [lindex [lindex $s 3] 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
set revs $old_sha1...$new_sha1
|
||||
}
|
||||
# GIT_DIR and GIT_WORK_TREE for the submodule are not the ones
|
||||
# we've been using for the main repository, so unset them.
|
||||
# TODO we could make life easier (start up faster?) for gitk
|
||||
# by setting these to the appropriate values to allow gitk
|
||||
# to skip the heuristics to find their proper value
|
||||
unset env(GIT_DIR)
|
||||
unset env(GIT_WORK_TREE)
|
||||
}
|
||||
eval exec $cmd $revs "--" "--" &
|
||||
|
||||
if {$old_GIT_DIR eq {}} {
|
||||
unset env(GIT_DIR)
|
||||
} else {
|
||||
set env(GIT_DIR) $old_GIT_DIR
|
||||
set env(GIT_DIR) $_gitdir
|
||||
set env(GIT_WORK_TREE) $_gitworktree
|
||||
cd $pwd
|
||||
|
||||
ui_status $::starting_gitk_msg
|
||||
after 10000 {
|
||||
ui_ready $starting_gitk_msg
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc do_git_gui {} {
|
||||
global current_diff_path
|
||||
|
||||
# -- Always start git gui through whatever we were loaded with. This
|
||||
# lets us bypass using shell process on Windows systems.
|
||||
#
|
||||
set exe [list [_which git]]
|
||||
if {$exe eq {}} {
|
||||
error_popup [mc "Couldn't find git gui in PATH"]
|
||||
} else {
|
||||
global env
|
||||
global _gitdir _gitworktree
|
||||
|
||||
# see note in do_gitk about unsetting these vars when
|
||||
# running tools in a submodule
|
||||
unset env(GIT_DIR)
|
||||
unset env(GIT_WORK_TREE)
|
||||
|
||||
set pwd [pwd]
|
||||
cd $current_diff_path
|
||||
|
||||
eval exec $exe gui &
|
||||
|
||||
set env(GIT_DIR) $_gitdir
|
||||
set env(GIT_WORK_TREE) $_gitworktree
|
||||
cd $pwd
|
||||
|
||||
ui_status $::starting_gitk_msg
|
||||
@ -1971,6 +2088,7 @@ proc do_gitk {revs} {
|
||||
}
|
||||
|
||||
proc do_explore {} {
|
||||
global _gitworktree
|
||||
set explorer {}
|
||||
if {[is_Cygwin] || [is_Windows]} {
|
||||
set explorer "explorer.exe"
|
||||
@ -1980,7 +2098,7 @@ proc do_explore {} {
|
||||
# freedesktop.org-conforming system is our best shot
|
||||
set explorer "xdg-open"
|
||||
}
|
||||
eval exec $explorer [list [file nativename [file dirname [gitdir]]]] &
|
||||
eval exec $explorer $_gitworktree &
|
||||
}
|
||||
|
||||
set is_quitting 0
|
||||
@ -1996,7 +2114,7 @@ proc do_quit {{rc {1}}} {
|
||||
global ui_comm is_quitting repo_config commit_type
|
||||
global GITGUI_BCK_exists GITGUI_BCK_i
|
||||
global ui_comm_spell
|
||||
global ret_code
|
||||
global ret_code use_ttk
|
||||
|
||||
if {$is_quitting} return
|
||||
set is_quitting 1
|
||||
@ -2054,8 +2172,13 @@ proc do_quit {{rc {1}}} {
|
||||
}
|
||||
set cfg_geometry [list]
|
||||
lappend cfg_geometry [wm geometry .]
|
||||
lappend cfg_geometry [lindex [.vpane sash coord 0] 0]
|
||||
lappend cfg_geometry [lindex [.vpane.files sash coord 0] 1]
|
||||
if {$use_ttk} {
|
||||
lappend cfg_geometry [.vpane sashpos 0]
|
||||
lappend cfg_geometry [.vpane.files sashpos 0]
|
||||
} else {
|
||||
lappend cfg_geometry [lindex [.vpane sash coord 0] 0]
|
||||
lappend cfg_geometry [lindex [.vpane.files sash coord 0] 1]
|
||||
}
|
||||
if {[catch {set rc_geometry $repo_config(gui.geometry)}]} {
|
||||
set rc_geometry {}
|
||||
}
|
||||
@ -2344,8 +2467,6 @@ proc show_less_context {} {
|
||||
##
|
||||
## ui construction
|
||||
|
||||
load_config 0
|
||||
apply_config
|
||||
set ui_comm {}
|
||||
|
||||
# -- Menu Bar
|
||||
@ -2377,10 +2498,12 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
|
||||
#
|
||||
menu .mbar.repository
|
||||
|
||||
.mbar.repository add command \
|
||||
-label [mc "Explore Working Copy"] \
|
||||
-command {do_explore}
|
||||
.mbar.repository add separator
|
||||
if {![is_bare]} {
|
||||
.mbar.repository add command \
|
||||
-label [mc "Explore Working Copy"] \
|
||||
-command {do_explore}
|
||||
.mbar.repository add separator
|
||||
}
|
||||
|
||||
.mbar.repository add command \
|
||||
-label [mc "Browse Current Branch's Files"] \
|
||||
@ -2822,14 +2945,13 @@ default {
|
||||
|
||||
# -- Branch Control
|
||||
#
|
||||
frame .branch \
|
||||
-borderwidth 1 \
|
||||
-relief sunken
|
||||
label .branch.l1 \
|
||||
${NS}::frame .branch
|
||||
if {!$use_ttk} {.branch configure -borderwidth 1 -relief sunken}
|
||||
${NS}::label .branch.l1 \
|
||||
-text [mc "Current Branch:"] \
|
||||
-anchor w \
|
||||
-justify left
|
||||
label .branch.cb \
|
||||
${NS}::label .branch.cb \
|
||||
-textvariable current_branch \
|
||||
-anchor w \
|
||||
-justify left
|
||||
@ -2839,15 +2961,20 @@ pack .branch -side top -fill x
|
||||
|
||||
# -- Main Window Layout
|
||||
#
|
||||
panedwindow .vpane -orient horizontal
|
||||
panedwindow .vpane.files -orient vertical
|
||||
.vpane add .vpane.files -sticky nsew -height 100 -width 200
|
||||
${NS}::panedwindow .vpane -orient horizontal
|
||||
${NS}::panedwindow .vpane.files -orient vertical
|
||||
if {$use_ttk} {
|
||||
.vpane add .vpane.files
|
||||
} else {
|
||||
.vpane add .vpane.files -sticky nsew -height 100 -width 200
|
||||
}
|
||||
pack .vpane -anchor n -side top -fill both -expand 1
|
||||
|
||||
# -- Index File List
|
||||
#
|
||||
frame .vpane.files.index -height 100 -width 200
|
||||
label .vpane.files.index.title -text [mc "Staged Changes (Will Commit)"] \
|
||||
${NS}::frame .vpane.files.index -height 100 -width 200
|
||||
tlabel .vpane.files.index.title \
|
||||
-text [mc "Staged Changes (Will Commit)"] \
|
||||
-background lightgreen -foreground black
|
||||
text $ui_index -background white -foreground black \
|
||||
-borderwidth 0 \
|
||||
@ -2857,8 +2984,8 @@ text $ui_index -background white -foreground black \
|
||||
-xscrollcommand {.vpane.files.index.sx set} \
|
||||
-yscrollcommand {.vpane.files.index.sy set} \
|
||||
-state disabled
|
||||
scrollbar .vpane.files.index.sx -orient h -command [list $ui_index xview]
|
||||
scrollbar .vpane.files.index.sy -orient v -command [list $ui_index yview]
|
||||
${NS}::scrollbar .vpane.files.index.sx -orient h -command [list $ui_index xview]
|
||||
${NS}::scrollbar .vpane.files.index.sy -orient v -command [list $ui_index yview]
|
||||
pack .vpane.files.index.title -side top -fill x
|
||||
pack .vpane.files.index.sx -side bottom -fill x
|
||||
pack .vpane.files.index.sy -side right -fill y
|
||||
@ -2866,8 +2993,8 @@ pack $ui_index -side left -fill both -expand 1
|
||||
|
||||
# -- Working Directory File List
|
||||
#
|
||||
frame .vpane.files.workdir -height 100 -width 200
|
||||
label .vpane.files.workdir.title -text [mc "Unstaged Changes"] \
|
||||
${NS}::frame .vpane.files.workdir -height 100 -width 200
|
||||
tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \
|
||||
-background lightsalmon -foreground black
|
||||
text $ui_workdir -background white -foreground black \
|
||||
-borderwidth 0 \
|
||||
@ -2877,15 +3004,19 @@ text $ui_workdir -background white -foreground black \
|
||||
-xscrollcommand {.vpane.files.workdir.sx set} \
|
||||
-yscrollcommand {.vpane.files.workdir.sy set} \
|
||||
-state disabled
|
||||
scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview]
|
||||
scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview]
|
||||
${NS}::scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview]
|
||||
${NS}::scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview]
|
||||
pack .vpane.files.workdir.title -side top -fill x
|
||||
pack .vpane.files.workdir.sx -side bottom -fill x
|
||||
pack .vpane.files.workdir.sy -side right -fill y
|
||||
pack $ui_workdir -side left -fill both -expand 1
|
||||
|
||||
.vpane.files add .vpane.files.workdir -sticky nsew
|
||||
.vpane.files add .vpane.files.index -sticky nsew
|
||||
.vpane.files add .vpane.files.workdir
|
||||
.vpane.files add .vpane.files.index
|
||||
if {!$use_ttk} {
|
||||
.vpane.files paneconfigure .vpane.files.workdir -sticky news
|
||||
.vpane.files paneconfigure .vpane.files.index -sticky news
|
||||
}
|
||||
|
||||
foreach i [list $ui_index $ui_workdir] {
|
||||
rmsel_tag $i
|
||||
@ -2895,68 +3026,69 @@ unset i
|
||||
|
||||
# -- Diff and Commit Area
|
||||
#
|
||||
frame .vpane.lower -height 300 -width 400
|
||||
frame .vpane.lower.commarea
|
||||
frame .vpane.lower.diff -relief sunken -borderwidth 1
|
||||
${NS}::frame .vpane.lower -height 300 -width 400
|
||||
${NS}::frame .vpane.lower.commarea
|
||||
${NS}::frame .vpane.lower.diff -relief sunken -borderwidth 1
|
||||
pack .vpane.lower.diff -fill both -expand 1
|
||||
pack .vpane.lower.commarea -side bottom -fill x
|
||||
.vpane add .vpane.lower -sticky nsew
|
||||
.vpane add .vpane.lower
|
||||
if {!$use_ttk} {.vpane paneconfigure .vpane.lower -sticky nsew}
|
||||
|
||||
# -- Commit Area Buttons
|
||||
#
|
||||
frame .vpane.lower.commarea.buttons
|
||||
label .vpane.lower.commarea.buttons.l -text {} \
|
||||
${NS}::frame .vpane.lower.commarea.buttons
|
||||
${NS}::label .vpane.lower.commarea.buttons.l -text {} \
|
||||
-anchor w \
|
||||
-justify left
|
||||
pack .vpane.lower.commarea.buttons.l -side top -fill x
|
||||
pack .vpane.lower.commarea.buttons -side left -fill y
|
||||
|
||||
button .vpane.lower.commarea.buttons.rescan -text [mc Rescan] \
|
||||
${NS}::button .vpane.lower.commarea.buttons.rescan -text [mc Rescan] \
|
||||
-command ui_do_rescan
|
||||
pack .vpane.lower.commarea.buttons.rescan -side top -fill x
|
||||
lappend disable_on_lock \
|
||||
{.vpane.lower.commarea.buttons.rescan conf -state}
|
||||
|
||||
button .vpane.lower.commarea.buttons.incall -text [mc "Stage Changed"] \
|
||||
${NS}::button .vpane.lower.commarea.buttons.incall -text [mc "Stage Changed"] \
|
||||
-command do_add_all
|
||||
pack .vpane.lower.commarea.buttons.incall -side top -fill x
|
||||
lappend disable_on_lock \
|
||||
{.vpane.lower.commarea.buttons.incall conf -state}
|
||||
|
||||
if {![is_enabled nocommitmsg]} {
|
||||
button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \
|
||||
${NS}::button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \
|
||||
-command do_signoff
|
||||
pack .vpane.lower.commarea.buttons.signoff -side top -fill x
|
||||
}
|
||||
|
||||
button .vpane.lower.commarea.buttons.commit -text [commit_btn_caption] \
|
||||
${NS}::button .vpane.lower.commarea.buttons.commit -text [commit_btn_caption] \
|
||||
-command do_commit
|
||||
pack .vpane.lower.commarea.buttons.commit -side top -fill x
|
||||
lappend disable_on_lock \
|
||||
{.vpane.lower.commarea.buttons.commit conf -state}
|
||||
|
||||
if {![is_enabled nocommit]} {
|
||||
button .vpane.lower.commarea.buttons.push -text [mc Push] \
|
||||
${NS}::button .vpane.lower.commarea.buttons.push -text [mc Push] \
|
||||
-command do_push_anywhere
|
||||
pack .vpane.lower.commarea.buttons.push -side top -fill x
|
||||
}
|
||||
|
||||
# -- Commit Message Buffer
|
||||
#
|
||||
frame .vpane.lower.commarea.buffer
|
||||
frame .vpane.lower.commarea.buffer.header
|
||||
${NS}::frame .vpane.lower.commarea.buffer
|
||||
${NS}::frame .vpane.lower.commarea.buffer.header
|
||||
set ui_comm .vpane.lower.commarea.buffer.t
|
||||
set ui_coml .vpane.lower.commarea.buffer.header.l
|
||||
|
||||
if {![is_enabled nocommit]} {
|
||||
radiobutton .vpane.lower.commarea.buffer.header.new \
|
||||
${NS}::radiobutton .vpane.lower.commarea.buffer.header.new \
|
||||
-text [mc "New Commit"] \
|
||||
-command do_select_commit_type \
|
||||
-variable selected_commit_type \
|
||||
-value new
|
||||
lappend disable_on_lock \
|
||||
[list .vpane.lower.commarea.buffer.header.new conf -state]
|
||||
radiobutton .vpane.lower.commarea.buffer.header.amend \
|
||||
${NS}::radiobutton .vpane.lower.commarea.buffer.header.amend \
|
||||
-text [mc "Amend Last Commit"] \
|
||||
-command do_select_commit_type \
|
||||
-variable selected_commit_type \
|
||||
@ -2965,7 +3097,7 @@ if {![is_enabled nocommit]} {
|
||||
[list .vpane.lower.commarea.buffer.header.amend conf -state]
|
||||
}
|
||||
|
||||
label $ui_coml \
|
||||
${NS}::label $ui_coml \
|
||||
-anchor w \
|
||||
-justify left
|
||||
proc trace_commit_type {varname args} {
|
||||
@ -2997,7 +3129,7 @@ text $ui_comm -background white -foreground black \
|
||||
-width $repo_config(gui.commitmsgwidth) -height 9 -wrap none \
|
||||
-font font_diff \
|
||||
-yscrollcommand {.vpane.lower.commarea.buffer.sby set}
|
||||
scrollbar .vpane.lower.commarea.buffer.sby \
|
||||
${NS}::scrollbar .vpane.lower.commarea.buffer.sby \
|
||||
-command [list $ui_comm yview]
|
||||
pack .vpane.lower.commarea.buffer.header -side top -fill x
|
||||
pack .vpane.lower.commarea.buffer.sby -side right -fill y
|
||||
@ -3063,19 +3195,19 @@ proc trace_current_diff_path {varname args} {
|
||||
}
|
||||
trace add variable current_diff_path write trace_current_diff_path
|
||||
|
||||
frame .vpane.lower.diff.header -background gold
|
||||
label .vpane.lower.diff.header.status \
|
||||
gold_frame .vpane.lower.diff.header
|
||||
tlabel .vpane.lower.diff.header.status \
|
||||
-background gold \
|
||||
-foreground black \
|
||||
-width $max_status_desc \
|
||||
-anchor w \
|
||||
-justify left
|
||||
label .vpane.lower.diff.header.file \
|
||||
tlabel .vpane.lower.diff.header.file \
|
||||
-background gold \
|
||||
-foreground black \
|
||||
-anchor w \
|
||||
-justify left
|
||||
label .vpane.lower.diff.header.path \
|
||||
tlabel .vpane.lower.diff.header.path \
|
||||
-background gold \
|
||||
-foreground black \
|
||||
-anchor w \
|
||||
@ -3099,7 +3231,7 @@ bind_button3 .vpane.lower.diff.header.path "tk_popup $ctxm %X %Y"
|
||||
|
||||
# -- Diff Body
|
||||
#
|
||||
frame .vpane.lower.diff.body
|
||||
${NS}::frame .vpane.lower.diff.body
|
||||
set ui_diff .vpane.lower.diff.body.t
|
||||
text $ui_diff -background white -foreground black \
|
||||
-borderwidth 0 \
|
||||
@ -3108,9 +3240,9 @@ text $ui_diff -background white -foreground black \
|
||||
-xscrollcommand {.vpane.lower.diff.body.sbx set} \
|
||||
-yscrollcommand {.vpane.lower.diff.body.sby set} \
|
||||
-state disabled
|
||||
scrollbar .vpane.lower.diff.body.sbx -orient horizontal \
|
||||
${NS}::scrollbar .vpane.lower.diff.body.sbx -orient horizontal \
|
||||
-command [list $ui_diff xview]
|
||||
scrollbar .vpane.lower.diff.body.sby -orient vertical \
|
||||
${NS}::scrollbar .vpane.lower.diff.body.sby -orient vertical \
|
||||
-command [list $ui_diff yview]
|
||||
pack .vpane.lower.diff.body.sbx -side bottom -fill x
|
||||
pack .vpane.lower.diff.body.sby -side right -fill y
|
||||
@ -3154,15 +3286,6 @@ $ui_diff tag raise sel
|
||||
#
|
||||
|
||||
proc create_common_diff_popup {ctxm} {
|
||||
$ctxm add command \
|
||||
-label [mc "Show Less Context"] \
|
||||
-command show_less_context
|
||||
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
||||
$ctxm add command \
|
||||
-label [mc "Show More Context"] \
|
||||
-command show_more_context
|
||||
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
||||
$ctxm add separator
|
||||
$ctxm add command \
|
||||
-label [mc Refresh] \
|
||||
-command reshow_diff
|
||||
@ -3214,10 +3337,19 @@ set ui_diff_applyhunk [$ctxm index last]
|
||||
lappend diff_actions [list $ctxm entryconf $ui_diff_applyhunk -state]
|
||||
$ctxm add command \
|
||||
-label [mc "Apply/Reverse Line"] \
|
||||
-command {apply_line $cursorX $cursorY; do_rescan}
|
||||
-command {apply_range_or_line $cursorX $cursorY; do_rescan}
|
||||
set ui_diff_applyline [$ctxm index last]
|
||||
lappend diff_actions [list $ctxm entryconf $ui_diff_applyline -state]
|
||||
$ctxm add separator
|
||||
$ctxm add command \
|
||||
-label [mc "Show Less Context"] \
|
||||
-command show_less_context
|
||||
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
||||
$ctxm add command \
|
||||
-label [mc "Show More Context"] \
|
||||
-command show_more_context
|
||||
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
||||
$ctxm add separator
|
||||
create_common_diff_popup $ctxm
|
||||
|
||||
set ctxmmg .vpane.lower.diff.body.ctxmmg
|
||||
@ -3240,9 +3372,40 @@ $ctxmmg add command \
|
||||
-command {merge_resolve_one 1}
|
||||
lappend diff_actions [list $ctxmmg entryconf [$ctxmmg index last] -state]
|
||||
$ctxmmg add separator
|
||||
$ctxmmg add command \
|
||||
-label [mc "Show Less Context"] \
|
||||
-command show_less_context
|
||||
lappend diff_actions [list $ctxmmg entryconf [$ctxmmg index last] -state]
|
||||
$ctxmmg add command \
|
||||
-label [mc "Show More Context"] \
|
||||
-command show_more_context
|
||||
lappend diff_actions [list $ctxmmg entryconf [$ctxmmg index last] -state]
|
||||
$ctxmmg add separator
|
||||
create_common_diff_popup $ctxmmg
|
||||
|
||||
proc popup_diff_menu {ctxm ctxmmg x y X Y} {
|
||||
set ctxmsm .vpane.lower.diff.body.ctxmsm
|
||||
menu $ctxmsm -tearoff 0
|
||||
$ctxmsm add command \
|
||||
-label [mc "Visualize These Changes In The Submodule"] \
|
||||
-command {do_gitk -- true}
|
||||
lappend diff_actions [list $ctxmsm entryconf [$ctxmsm index last] -state]
|
||||
$ctxmsm add command \
|
||||
-label [mc "Visualize Current Branch History In The Submodule"] \
|
||||
-command {do_gitk {} true}
|
||||
lappend diff_actions [list $ctxmsm entryconf [$ctxmsm index last] -state]
|
||||
$ctxmsm add command \
|
||||
-label [mc "Visualize All Branch History In The Submodule"] \
|
||||
-command {do_gitk --all true}
|
||||
lappend diff_actions [list $ctxmsm entryconf [$ctxmsm index last] -state]
|
||||
$ctxmsm add separator
|
||||
$ctxmsm add command \
|
||||
-label [mc "Start git gui In The Submodule"] \
|
||||
-command {do_git_gui}
|
||||
lappend diff_actions [list $ctxmsm entryconf [$ctxmsm index last] -state]
|
||||
$ctxmsm add separator
|
||||
create_common_diff_popup $ctxmsm
|
||||
|
||||
proc popup_diff_menu {ctxm ctxmmg ctxmsm x y X Y} {
|
||||
global current_diff_path file_states
|
||||
set ::cursorX $x
|
||||
set ::cursorY $y
|
||||
@ -3253,15 +3416,26 @@ proc popup_diff_menu {ctxm ctxmmg x y X Y} {
|
||||
}
|
||||
if {[string first {U} $state] >= 0} {
|
||||
tk_popup $ctxmmg $X $Y
|
||||
} elseif {$::is_submodule_diff} {
|
||||
tk_popup $ctxmsm $X $Y
|
||||
} else {
|
||||
set has_range [expr {[$::ui_diff tag nextrange sel 0.0] != {}}]
|
||||
if {$::ui_index eq $::current_diff_side} {
|
||||
set l [mc "Unstage Hunk From Commit"]
|
||||
set t [mc "Unstage Line From Commit"]
|
||||
if {$has_range} {
|
||||
set t [mc "Unstage Lines From Commit"]
|
||||
} else {
|
||||
set t [mc "Unstage Line From Commit"]
|
||||
}
|
||||
} else {
|
||||
set l [mc "Stage Hunk For Commit"]
|
||||
set t [mc "Stage Line For Commit"]
|
||||
if {$has_range} {
|
||||
set t [mc "Stage Lines For Commit"]
|
||||
} else {
|
||||
set t [mc "Stage Line For Commit"]
|
||||
}
|
||||
}
|
||||
if {$::is_3way_diff || $::is_submodule_diff
|
||||
if {$::is_3way_diff
|
||||
|| $current_diff_path eq {}
|
||||
|| {__} eq $state
|
||||
|| {_O} eq $state
|
||||
@ -3276,7 +3450,7 @@ proc popup_diff_menu {ctxm ctxmmg x y X Y} {
|
||||
tk_popup $ctxm $X $Y
|
||||
}
|
||||
}
|
||||
bind_button3 $ui_diff [list popup_diff_menu $ctxm $ctxmmg %x %y %X %Y]
|
||||
bind_button3 $ui_diff [list popup_diff_menu $ctxm $ctxmmg $ctxmsm %x %y %X %Y]
|
||||
|
||||
# -- Status Bar
|
||||
#
|
||||
@ -3289,12 +3463,17 @@ $main_status show [mc "Initializing..."]
|
||||
catch {
|
||||
set gm $repo_config(gui.geometry)
|
||||
wm geometry . [lindex $gm 0]
|
||||
.vpane sash place 0 \
|
||||
[lindex $gm 1] \
|
||||
[lindex [.vpane sash coord 0] 1]
|
||||
.vpane.files sash place 0 \
|
||||
[lindex [.vpane.files sash coord 0] 0] \
|
||||
[lindex $gm 2]
|
||||
if {$use_ttk} {
|
||||
.vpane sashpos 0 [lindex $gm 1]
|
||||
.vpane.files sashpos 0 [lindex $gm 2]
|
||||
} else {
|
||||
.vpane sash place 0 \
|
||||
[lindex $gm 1] \
|
||||
[lindex [.vpane sash coord 0] 1]
|
||||
.vpane.files sash place 0 \
|
||||
[lindex [.vpane.files sash coord 0] 0] \
|
||||
[lindex $gm 2]
|
||||
}
|
||||
unset gm
|
||||
}
|
||||
|
||||
@ -3371,6 +3550,8 @@ bind . <$M1B-Key-s> do_signoff
|
||||
bind . <$M1B-Key-S> do_signoff
|
||||
bind . <$M1B-Key-t> do_add_selection
|
||||
bind . <$M1B-Key-T> do_add_selection
|
||||
bind . <$M1B-Key-j> do_revert_selection
|
||||
bind . <$M1B-Key-J> do_revert_selection
|
||||
bind . <$M1B-Key-i> do_add_all
|
||||
bind . <$M1B-Key-I> do_add_all
|
||||
bind . <$M1B-Key-minus> {show_less_context;break}
|
||||
@ -3389,7 +3570,7 @@ unset i
|
||||
set file_lists($ui_index) [list]
|
||||
set file_lists($ui_workdir) [list]
|
||||
|
||||
wm title . "[appname] ([reponame]) [file normalize [file dirname [gitdir]]]"
|
||||
wm title . "[appname] ([reponame]) [file normalize $_gitworktree]"
|
||||
focus -force $ui_comm
|
||||
|
||||
# -- Warn the user about environmental problems. Cygwin's Tcl
|
||||
@ -3562,3 +3743,9 @@ if {[is_enabled retcode]} {
|
||||
if {$picked && [is_config_true gui.autoexplore]} {
|
||||
do_explore
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# mode: tcl
|
||||
# indent-tabs-mode: t
|
||||
# tab-width: 4
|
||||
# End:
|
||||
|
||||
Reference in New Issue
Block a user