From: Keith Cascio <keith@cs.ucla.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
git@vger.kernel.org
Subject: [PATCH v1 3/3] git-gui hooks for new config variable "diff.primer"
Date: Sun, 25 Jan 2009 09:30:57 -0800 [thread overview]
Message-ID: <1232904657-31831-4-git-send-email-keith@cs.ucla.edu> (raw)
In-Reply-To: <1232904657-31831-3-git-send-email-keith@cs.ucla.edu>
git-gui hooks for new config variable "diff.primer".
Add three checkboxes to both sides of
options panel (local/global).
Add a sub-menu named "White Space" to
diff-panel right-click context menu, with
three checkboxes.
Signed-off-by: Keith Cascio <keith@cs.ucla.edu>
---
git-gui/git-gui.sh | 51 ++++++++++++++++++++++++++++++++++++++++++
git-gui/lib/option.tcl | 57 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 103 insertions(+), 5 deletions(-)
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index e018e07..5d93351 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -3075,10 +3075,43 @@ $ui_diff tag conf d>>>>>>> \
$ui_diff tag raise sel
+proc mirror_diff_state {} {
+ global diff__ignore_space_at_eol diff__ignore_space_change diff__ignore_all_space
+
+ set key "diff.primer"
+ set ddo [git config --get $key]
+ set diff__ignore_space_at_eol [expr {[string match "*--ignore-space-at-eol*" $ddo] ? "true" : "false"}]
+ set diff__ignore_space_change [expr {[string match "*--ignore-space-change*" $ddo] ? "true" : "false"}]
+ set diff__ignore_all_space [expr {[string match "*--ignore-all-space*" $ddo] ? "true" : "false"}]
+}
+
+proc adjust_command_line { flag value str } {
+ if {$value eq "true"} {
+ if { ! [string match "*$flag*" $str ] } {
+ set str [concat $str $flag] }
+ } else { regsub -- $flag $str "" str }
+ return $str
+}
+
+proc record_diff_state {} {
+ global diff__ignore_space_at_eol diff__ignore_space_change diff__ignore_all_space
+
+ set key "diff.primer"
+ set ddo [git config --get $key]
+ set ddo [adjust_command_line --ignore-space-at-eol $diff__ignore_space_at_eol $ddo]
+ set ddo [adjust_command_line --ignore-space-change $diff__ignore_space_change $ddo]
+ set ddo [adjust_command_line --ignore-all-space $diff__ignore_all_space $ddo]
+
+ git config $key $ddo
+ reshow_diff
+}
+
# -- Diff Body Context Menu
#
proc create_common_diff_popup {ctxm} {
+ global diff__ignore_space_at_eol diff__ignore_space_change diff__ignore_all_space
+
$ctxm add command \
-label [mc "Show Less Context"] \
-command show_less_context
@@ -3087,6 +3120,24 @@ proc create_common_diff_popup {ctxm} {
-label [mc "Show More Context"] \
-command show_more_context
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
+ mirror_diff_state
+ set whitespacemenu $ctxm.ws
+ menu $whitespacemenu -postcommand mirror_diff_state
+ $ctxm add cascade \
+ -label [mc "White Space"] \
+ -menu $whitespacemenu
+ $whitespacemenu add checkbutton \
+ -label [mc "--ignore-space-at-eol"] \
+ -variable diff__ignore_space_at_eol -onvalue "true" -offvalue "false" \
+ -command record_diff_state
+ $whitespacemenu add checkbutton \
+ -label [mc "--ignore-space-change"] \
+ -variable diff__ignore_space_change -onvalue "true" -offvalue "false" \
+ -command record_diff_state
+ $whitespacemenu add checkbutton \
+ -label [mc "--ignore-all-space" ] \
+ -variable diff__ignore_all_space -onvalue "true" -offvalue "false" \
+ -command record_diff_state
$ctxm add separator
$ctxm add command \
-label [mc Refresh] \
diff --git a/git-gui/lib/option.tcl b/git-gui/lib/option.tcl
index 1d55b49..fbdf4e8 100644
--- a/git-gui/lib/option.tcl
+++ b/git-gui/lib/option.tcl
@@ -28,6 +28,7 @@ proc save_config {} {
global repo_config global_config system_config
global repo_config_new global_config_new
global ui_comm_spell
+ global ddo diff_primer_global diff_primer_repo pseudovariables
foreach option $font_descs {
set name [lindex $option 0]
@@ -46,17 +47,40 @@ proc save_config {} {
unset global_config_new(gui.$font^^size)
}
+ foreach name [get_diff_primer] {
+ set diff_option [string range $name 8 [string length $name]]
+ set ifound [lsearch $diff_primer_global $diff_option]
+ if {$global_config_new($name) eq "true"} {
+ if {$ifound < 0} { lappend diff_primer_global $diff_option }
+ } else {
+ if {$ifound >= 0} { set diff_primer_global [lreplace $diff_primer_global $ifound $ifound]}
+ }
+ set ifound [lsearch $diff_primer_repo $diff_option]
+ if { $repo_config_new($name) eq "true"} {
+ if {$ifound < 0} { lappend diff_primer_repo $diff_option }
+ } else {
+ if {$ifound >= 0} { set diff_primer_repo [lreplace $diff_primer_repo $ifound $ifound]}
+ }
+ }
+ array unset default_config gui.diff--ignore-*
+ set default_config($ddo) ""
+ set global_config_new($ddo) [join $diff_primer_global]
+ set repo_config_new($ddo) [join $diff_primer_repo ]
+
foreach name [array names default_config] {
set value $global_config_new($name)
- if {$value ne $global_config($name)} {
- if {$value eq $system_config($name)} {
+ set value_global [expr {[info exists global_config($name)] ? $global_config($name) : ""}]
+ set value_system [expr {[info exists system_config($name)] ? $system_config($name) : ""}]
+ set value_repo [expr {[info exists repo_config($name)] ? $repo_config($name) : ""}]
+ if {$value ne $value_global} {
+ if {$value eq $value_system} {
catch {git config --global --unset $name}
} else {
regsub -all "\[{}\]" $value {"} value
git config --global $name $value
}
set global_config($name) $value
- if {$value eq $repo_config($name)} {
+ if {$value eq $value_repo} {
catch {git config --unset $name}
set repo_config($name) $value
}
@@ -65,8 +89,10 @@ proc save_config {} {
foreach name [array names default_config] {
set value $repo_config_new($name)
- if {$value ne $repo_config($name)} {
- if {$value eq $global_config($name)} {
+ set value_global [expr {[info exists global_config($name)] ? $global_config($name) : ""}]
+ set value_repo [expr {[info exists repo_config($name)] ? $repo_config($name) : ""}]
+ if {$value ne $value_repo} {
+ if {$value eq $value_global} {
catch {git config --unset $name}
} else {
regsub -all "\[{}\]" $value {"} value
@@ -88,10 +114,23 @@ proc save_config {} {
}
}
+proc get_diff_primer {} {
+ global repo_config global_config
+ global ddo diff_primer_global diff_primer_repo pseudovariables
+
+ set ddo "diff.primer"
+ set diff_primer_global [expr {[info exists global_config($ddo)] ? [split $global_config($ddo)] : [list]}]
+ set diff_primer_repo [expr {[info exists repo_config($ddo)] ? [split $repo_config($ddo)] : [list]}]
+ set pseudovariables [list "gui.diff--ignore-space-at-eol" "gui.diff--ignore-space-change" "gui.diff--ignore-all-space"]
+
+ return $pseudovariables
+}
+
proc do_options {} {
global repo_config global_config font_descs
global repo_config_new global_config_new
global ui_comm_spell
+ global ddo diff_primer_global diff_primer_repo pseudovariables
array unset repo_config_new
array unset global_config_new
@@ -108,6 +147,11 @@ proc do_options {} {
foreach name [array names global_config] {
set global_config_new($name) $global_config($name)
}
+ foreach name [get_diff_primer] {
+ set diff_option [string range $name 8 [string length $name]]
+ set global_config_new($name) [expr {[lsearch $diff_primer_global $diff_option] < 0 ? "false" : "true"}]
+ set repo_config_new($name) [expr {[lsearch $diff_primer_repo $diff_option] < 0 ? "false" : "true"}]
+ }
set w .options_editor
toplevel $w
@@ -150,6 +194,9 @@ proc do_options {} {
{i-20..200 gui.copyblamethreshold {mc "Minimum Letters To Blame Copy On"}}
{i-0..300 gui.blamehistoryctx {mc "Blame History Context Radius (days)"}}
{i-1..99 gui.diffcontext {mc "Number of Diff Context Lines"}}
+ {b gui.diff--ignore-space-at-eol {mc "Diff Ignore Trailing White Space" }}
+ {b gui.diff--ignore-space-change {mc "Diff Ignore Changes In Amount Of White Space"}}
+ {b gui.diff--ignore-all-space {mc "Diff Ignore All White Space" }}
{i-0..99 gui.commitmsgwidth {mc "Commit Message Text Width"}}
{t gui.newbranchtemplate {mc "New Branch Name Template"}}
{c gui.encoding {mc "Default File Contents Encoding"}}
--
1.6.1
next prev parent reply other threads:[~2009-01-25 17:44 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-25 17:30 [PATCH v1 0/3] Introduce config variable "diff.primer" Keith Cascio
2009-01-25 17:30 ` [PATCH v1 1/3] " Keith Cascio
2009-01-25 17:30 ` [PATCH v1 2/3] Test functionality of new " Keith Cascio
2009-01-25 17:30 ` Keith Cascio [this message]
2009-01-25 18:22 ` [PATCH v1 3/3] git-gui hooks for " Johannes Schindelin
2009-01-25 18:58 ` Keith Cascio
2009-01-25 18:17 ` [PATCH v1 1/3] Introduce " Johannes Schindelin
2009-01-25 18:44 ` Keith Cascio
2009-01-25 19:30 ` Johannes Schindelin
2009-01-25 20:14 ` Keith Cascio
2009-01-25 22:11 ` Jeff King
2009-01-25 22:58 ` Keith Cascio
2009-01-25 23:25 ` Jeff King
2009-01-25 20:34 ` Junio C Hamano
2009-01-26 2:30 ` Junio C Hamano
2009-01-26 2:37 ` Keith Cascio
2009-01-26 3:18 ` Jeff King
2009-01-26 3:38 ` Junio C Hamano
2009-01-26 2:40 ` Keith Cascio
2009-01-26 3:12 ` Jeff King
2009-01-26 3:42 ` Junio C Hamano
2009-01-26 3:45 ` Jeff King
2009-01-26 10:54 ` Johannes Schindelin
2009-01-26 11:06 ` Jeff King
2009-01-26 10:59 ` backwards compatibility, was " Johannes Schindelin
2009-01-26 11:16 ` Jeff King
2009-01-26 11:28 ` Johannes Schindelin
2009-01-26 11:59 ` Jeff King
2009-01-27 3:01 ` Keith Cascio
2009-01-26 15:29 ` Jay Soffian
2009-01-26 18:48 ` Jeff King
2009-01-26 19:49 ` Jay Soffian
2009-01-26 20:04 ` Junio C Hamano
2009-01-26 20:32 ` Jay Soffian
2009-01-26 20:35 ` Jeff King
2009-01-26 3:36 ` Junio C Hamano
2009-01-25 20:35 ` [PATCH v1 0/3] " Junio C Hamano
2009-01-25 20:41 ` Keith Cascio
2009-01-25 22:07 ` Jeff King
2009-01-27 1:47 ` Keith Cascio
2009-01-27 4:54 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1232904657-31831-4-git-send-email-keith@cs.ucla.edu \
--to=keith@cs.ucla.edu \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).