{"thread":{"id":"18234","subject":"[RFC with a proof of concept PATCH] Add Bonsai-like query options to gitk","startedAt":"2009-03-09T19:42:27Z","lastAt":"2009-03-23T17:57:46Z","messageCount":4,"participants":["newren@gmail.com","Paul Mackerras","Elijah Newren"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"107495","messageId":"1236627747-32107-1-git-send-email-newren@gmail.com","threadId":"18234","inReplyTo":null,"subject":"[RFC with a proof of concept PATCH] Add Bonsai-like query options to gitk","fromName":"","fromEmail":"newren@gmail.com","sentAt":"2009-03-09T19:42:27Z","receivedAt":"2009-03-09T19:42:27Z","isPatch":true,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"From: Elijah Newren <newren@gmail.com>\n\nHi,\n\n(If you like screenshots, I've got some before & after ones up at\nhttp://www.gnome.org/~newren/temp/gitk/gitk-edit-view.html, but\nremember that this is just a proof of concept and call for comments.)\n\nI've talked a little bit with the Trilinos project[1] about git.  One\nissue that has come up is that they need a replacement for Bonsai (see\nhttp://bonsai.mozilla.org/cvsqueryform.cgi).  When I pointed out git\nlog and its many option, I was told that they wanted something that\nwould only be used infrequently by any given individual, and thus they\nwanted something that didn't require memorizing or looking up command\nline options.  gitk, particularly the View->Edit View menu option,\nlooks like a step in the right direction.  I'm guessing that with a\ntweak or two, it could probably satisfy this use case.  The issues I\nsee are:\n  * many important options (--author, --grep, -S, --pickaxe-regex) are\n    still selected in gitk by typing in command line options into the\n    appropriate box\n  * the format of some fields is not clear; examples: (1) it is not\n    clear which date format is acceptable, and (2) it is not clear\n    that the \"Skip\" field takes integers as input.\n\nMy below proof of concept patch:\n  * Adds options for selecting revisions based on branch/tag names,\n    author, committer, commit message, and patch contents (technically\n    this was all available before, but only if you were familiar with\n    the command line options to git log)\n  * Provides hints for input format (for example, lists some sample\n    date strings in a few different formats)\n  * Puts related query items into subsections, to make it easier to\n    digest the sheer number of options that now exist\n  * Rearranges the previous dialog options due to the above changes\n\nPotential issues with my patch:\n  * Maybe this is the wrong place to put Bonsai-like querying and I\n    should look at gitweb or cgit instead (while I personally like\n    client-side solutions, maybe others won't?)  Further, this may\n    push gitk in a way that others don't like.\n  * I'm pretty sure I broke the view remembering feature.  I can work\n    on fixing this up if people generally like the idea behind the\n    patch.\n  * Is this dialog too overwhelming or too large now?\n  * My lack of Tcl/Tk skills, and UI design skills.\n\n\nElijah\n\n[1] http://trilinos.sandia.gov/  I'm not part of the Trilinos project;\nI'm just a co-worker.\n---\n gitk-git/gitk |   95 +++++++++++++++++++++++++++++++++++++++++---------------\n 1 files changed, 69 insertions(+), 26 deletions(-)\n\ndiff --git a/gitk-git/gitk b/gitk-git/gitk\nindex 1773ae6..79f18b5 100644\n--- a/gitk-git/gitk\n+++ b/gitk-git/gitk\n@@ -3631,17 +3631,35 @@ proc newview {ishighlight} {\n }\n \n set known_view_options {\n-    {perm    b    . {}               {mc \"Remember this view\"}}\n-    {args    t50= + {}               {mc \"Commits to include (arguments to git log):\"}}\n-    {all     b    * \"--all\"          {mc \"Use all refs\"}}\n-    {dorder  b    . {\"--date-order\" \"-d\"}      {mc \"Strictly sort by date\"}}\n-    {lright  b    . \"--left-right\"   {mc \"Mark branch sides\"}}\n-    {since   t15  + {\"--since=*\" \"--after=*\"}  {mc \"Since date:\"}}\n-    {until   t15  . {\"--until=*\" \"--before=*\"} {mc \"Until date:\"}}\n-    {limit   t10  + \"--max-count=*\"  {mc \"Max count:\"}}\n-    {skip    t10  . \"--skip=*\"       {mc \"Skip:\"}}\n-    {first   b    . \"--first-parent\" {mc \"Limit to first parent\"}}\n-    {cmd     t50= + {}               {mc \"Command to generate more commits to include:\"}}\n+    {perm      b    .  {}               {mc \"Remember this view\"}}\n+    {reflabel  l    +  {}               {mc \"References (space separated list):\"}}\n+    {refs      t15  .. {}               {mc \"Branches & tags:\"}}\n+    {allrefs   b    *. \"--all\"          {mc \"All refs\"}}\n+    {branches  b    .  \"--branches\"     {mc \"All (local) branches\"}}\n+    {tags      b    .  \"--tags\"         {mc \"All tags\"}}\n+    {remotes   b    .  \"--remotes\"      {mc \"All remote-tracking branches\"}}\n+    {commitlbl l    +  {}               {mc \"Commit Info (regular expressions):\"}}\n+    {author    t15  .. \"--author=*\"     {mc \"Author:\"}}\n+    {committer t15  .  \"--committer=*\"  {mc \"Committer:\"}}\n+    {loginfo   t15  .. \"--grep=*\"       {mc \"Commit Message:\"}}\n+    {allmatch  b    .. \"--all-match\"    {mc \"Matches all Commit Info criteria\"}}\n+    {changes_l l    +  {}               {mc \"Changes to Files:\"}}\n+    {pickaxe_s r0   .  {}               {mc \"Fixed String\"}}\n+    {pickaxe_t r1   .  \"--pickaxe-regex\"  {mc \"Regular Expression\"}}\n+    {pickaxe   t15  .. \"-S*\"            {mc \"Search string:\"}}\n+    {datelabel l    +  {}               {mc \"Commit Dates (\\\"2 weeks ago\\\", \\\"2009-03-17 15:27:38\\\", \\\"March 17, 2009 15:27:38\\\"):\"}}\n+    {since     t15  ..  {\"--since=*\" \"--after=*\"}  {mc \"Since:\"}}\n+    {until     t15  .   {\"--until=*\" \"--before=*\"} {mc \"Until:\"}}\n+    {limit_lbl l    +  {}               {mc \"Limit and/or skip a number of revisions (positive integer):\"}}\n+    {limit     t10  *. \"--max-count=*\"  {mc \"Number to show:\"}}\n+    {skip      t10  .  \"--skip=*\"       {mc \"Number to skip:\"}}\n+    {misc_lbl  l    +  {}               {mc \"Miscellaneous options:\"}}\n+    {dorder    b    *. {\"--date-order\" \"-d\"}      {mc \"Strictly sort by date\"}}\n+    {lright    b    .  \"--left-right\"   {mc \"Mark branch sides\"}}\n+    {first     b    .  \"--first-parent\" {mc \"Limit to first parent\"}}\n+    {args      t50  *. {}               {mc \"Additional arguments to git log:\"}}\n+    {allpaths  path +  {}               {mc \"Enter files and directories to include, one per line:\"}}\n+    {cmd       t50= +  {}               {mc \"Command to generate more commits to include:\"}}\n     }\n \n proc encode_view_opts {n} {\n@@ -3659,6 +3677,11 @@ proc encode_view_opts {n} {\n \t    if {$val} {\n \t\tlappend rargs $pattern\n \t    }\n+\t} elseif {[regexp {^r(\\d+)$} [lindex $opt 1] type value]} {\n+            regexp {^(.*_)} [lindex $opt 0] uselessvar button_id\n+\t    if {$newviewopts($n,$button_id) eq $value} {\n+\t\tlappend rargs $pattern\n+\t    }\n \t} else {\n \t    set val [string trim $val]\n \t    if {$val ne {}} {\n@@ -3667,6 +3690,7 @@ proc encode_view_opts {n} {\n \t    }\n \t}\n     }\n+    set rargs [concat $rargs [shellsplit $newviewopts($n,refs)]]\n     return [concat $rargs [shellsplit $newviewopts($n,args)]]\n }\n \n@@ -3757,6 +3781,11 @@ proc vieweditor {top n title} {\n     pack $top.name -in $top.nfr -side left\n \n     # View options\n+    frame $top.ifr\n+    label $top.il -text [mc \"* Please specify criteria for selecting revisions to view * \"]\n+    pack $top.il -anchor center\n+\n+    # View options\n     set cframe $top.nfr\n     set cexpand 0\n     set cnt 0\n@@ -3773,14 +3802,29 @@ proc vieweditor {top n title} {\n \t    frame $cframe\n \t    pack $cframe -in $top -fill x -pady 3 -padx 3\n \t    set cexpand [expr {$flags eq \"*\"}]\n+        } elseif {$flags eq \"..\" || $flags eq \"*.\"} {\n+\t    set cframe $top.fr$cnt\n+\t    incr cnt\n+\t    frame $cframe\n+\t    pack $cframe -in $top -fill x -pady 3 -padx [list 15 3]\n+\t    set cexpand [expr {$flags eq \"*.\"}]\n \t} else {\n \t    set lxpad 5\n \t}\n \n-\tif {$type eq \"b\"} {\n+\tif {$type eq \"l\"} {\n+            label $cframe.l_$id -text $title\n+            pack $cframe.l_$id -in $cframe -side left -pady [list 3 0] -anchor w\n+\t} elseif {$type eq \"b\"} {\n \t    checkbutton $cframe.c_$id -text $title -variable newviewopts($n,$id)\n \t    pack $cframe.c_$id -in $cframe -side left \\\n \t\t-padx [list $lxpad 0] -expand $cexpand -anchor w\n+\t} elseif {[regexp {^r(\\d+)$} $type type sz]} {\n+            regexp {^(.*_)} $id uselessvar button_id\n+\t    set newviewopts($n,$button_id) 0\n+\t    radiobutton $cframe.c_$id -text $title -variable newviewopts($n,$button_id) -value $sz\n+\t    pack $cframe.c_$id -in $cframe -side left \\\n+\t\t-padx [list $lxpad 0] -expand $cexpand -anchor w\n \t} elseif {[regexp {^t(\\d+)$} $type type sz]} {\n \t    message $cframe.l_$id -aspect 1500 -text $title\n \t    entry $cframe.e_$id -width $sz -background $bgcolor \\\n@@ -3793,23 +3837,22 @@ proc vieweditor {top n title} {\n \t\t-textvariable newviewopts($n,$id)\n \t    pack $cframe.l_$id -in $cframe -side top -pady [list 3 0] -anchor w\n \t    pack $cframe.e_$id -in $cframe -side top -fill x\n+\t} elseif {$type eq \"path\"} {\n+\t    message $top.l -aspect 1500 -text $title\n+\t    pack $top.l -in $top -side top -pady [list 3 0] -anchor w -padx 3\n+\t    text $top.t -width 40 -height 5 -background $bgcolor -font uifont\n+\t    if {[info exists viewfiles($n)]} {\n+\t\tforeach f $viewfiles($n) {\n+\t\t    $top.t insert end $f\n+\t\t    $top.t insert end \"\\n\"\n+\t\t}\n+\t\t$top.t delete {end - 1c} end\n+\t\t$top.t mark set insert 0.0\n+\t    }\n+\t    pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3\n \t}\n     }\n \n-    # Path list\n-    message $top.l -aspect 1500 \\\n-\t-text [mc \"Enter files and directories to include, one per line:\"]\n-    pack $top.l -in $top -side top -pady [list 7 0] -anchor w -padx 3\n-    text $top.t -width 40 -height 5 -background $bgcolor -font uifont\n-    if {[info exists viewfiles($n)]} {\n-\tforeach f $viewfiles($n) {\n-\t    $top.t insert end $f\n-\t    $top.t insert end \"\\n\"\n-\t}\n-\t$top.t delete {end - 1c} end\n-\t$top.t mark set insert 0.0\n-    }\n-    pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3\n     frame $top.buts\n     button $top.buts.ok -text [mc \"OK\"] -command [list newviewok $top $n]\n     button $top.buts.apply -text [mc \"Apply (F5)\"] -command [list newviewok $top $n 1]\n-- \n1.6.2.95.g934f7\n"},{"id":"109037","messageId":"18887.24393.595519.320173@cargo.ozlabs.ibm.com","threadId":"18234","inReplyTo":"1236627747-32107-1-git-send-email-newren@gmail.com","subject":"Re: [RFC with a proof of concept PATCH] Add Bonsai-like query options to gitk","fromName":"Paul Mackerras","fromEmail":"paulus@samba.org","sentAt":"2009-03-23T10:07:05Z","receivedAt":"2009-03-23T10:07:05Z","isPatch":true,"sender":{"key":"paulus@samba.org","avatar":"https://avatars.githubusercontent.com/u/1606439?v=4"},"body":"Elijah Newren <newren@gmail.com> writes:\n\n> (If you like screenshots, I've got some before & after ones up at\n> http://www.gnome.org/~newren/temp/gitk/gitk-edit-view.html, but\n> remember that this is just a proof of concept and call for comments.)\n\nLooks reasonable... have you developed the patch any further?\n\nPaul.\n"},{"id":"109092","messageId":"51419b2c0903231056h4eef8d6cgef42f38bb21db1d5@mail.gmail.com","threadId":"18234","inReplyTo":"51419b2c0903231054g621787b6i8537b8e0d5bf121d@mail.gmail.com","subject":"Re: [RFC with a proof of concept PATCH] Add Bonsai-like query options to gitk","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2009-03-23T17:56:59Z","receivedAt":"2009-03-23T17:56:59Z","isPatch":true,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"(Sorry, resending my own email since I accidentally left of the cc's.)\n\nOn Mon, Mar 23, 2009 at 4:07 AM, Paul Mackerras <paulus@samba.org> wrote:\n> Elijah Newren <newren@gmail.com> writes:\n>\n>> (If you like screenshots, I've got some before & after ones up at\n>> http://www.gnome.org/~newren/temp/gitk/gitk-edit-view.html, but\n>> remember that this is just a proof of concept and call for comments.)\n>\n> Looks reasonable... have you developed the patch any further?\n\nYes, I have.  There was a cosmetic tweak or two, but the main change\nwas fixing the view remembering stuff that I noted I broke in the\noriginal patch.  I've also showed this modified dialog in two\ndifferent git presentations, to dozens of new and potential users of\ngit, and it seems to have been well received[1].  I'll send a\nfollow-up patch shortly (I'd copy it inline, but I'm afraid gmail will\nscrew it up).\n\nElijah\n\n\n[1] For one of the two groups, a lack of a Bonsai replacement actually\nderailed their conversion to svn about a year ago.  This group was\nvery interested in git after my presentation and seemed satisfied with\ngitk (with my proposed changes) as a replacement for Bonsai.  There\nwas one minor question that did come up each time -- one person in\neach presentation asked why it is that when you specify --author=smith\n(at the command line or via the equivalent box in the gui), you also\nsee commits authored by e.g. \"jones\" in gitk; however, once I\nmentioned the different colored dots in gitk and the fact that it's\nshowing the commits that the patches are relative to, there was no\nmore issue and everyone was happy.  I'm guessing it'd be slightly more\nintuitive to them to have gitk filter out these parent commits from\nthe graph unless they also meet the search criteria, but it's a pretty\nminor issue.\n"},{"id":"109093","messageId":"1237831066-23554-1-git-send-email-newren@gmail.com","threadId":"18234","inReplyTo":"18887.24393.595519.320173@cargo.ozlabs.ibm.com","subject":"[PATCH] gitk: Make more options easily accessible from Edit View dialog","fromName":"","fromEmail":"newren@gmail.com","sentAt":"2009-03-23T17:57:46Z","receivedAt":"2009-03-23T17:57:46Z","isPatch":true,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"From: Elijah Newren <newren@gmail.com>\n\nCommit 218a900bd8efd0d49f8a0d9491aa4786a998d4f4 added a number of new\nindividual fields for the Edit View dialog to make them more accessible\nto end users, while still allowing all options to be specified in the\n\"arguments to git log\" field.  This patch extends the dialog further,\nto include refs, author, committer, commit message, and patch contents.\nAs before everything still remains accessible from the \"arguments to\ngit log\" input field.\n\nAdditionally, this provides hints for the format of the various input\nfields (for example, listing some sample date strings in different\nformats), and puts related query items into subsections to make it\neasier to digest the number of options that exist.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\n---\n gitk-git/gitk |  131 +++++++++++++++++++++++++++++++++++++++++----------------\n 1 files changed, 94 insertions(+), 37 deletions(-)\n\ndiff --git a/gitk-git/gitk b/gitk-git/gitk\nindex 1773ae6..6c08031 100644\n--- a/gitk-git/gitk\n+++ b/gitk-git/gitk\n@@ -3631,17 +3631,35 @@ proc newview {ishighlight} {\n }\n \n set known_view_options {\n-    {perm    b    . {}               {mc \"Remember this view\"}}\n-    {args    t50= + {}               {mc \"Commits to include (arguments to git log):\"}}\n-    {all     b    * \"--all\"          {mc \"Use all refs\"}}\n-    {dorder  b    . {\"--date-order\" \"-d\"}      {mc \"Strictly sort by date\"}}\n-    {lright  b    . \"--left-right\"   {mc \"Mark branch sides\"}}\n-    {since   t15  + {\"--since=*\" \"--after=*\"}  {mc \"Since date:\"}}\n-    {until   t15  . {\"--until=*\" \"--before=*\"} {mc \"Until date:\"}}\n-    {limit   t10  + \"--max-count=*\"  {mc \"Max count:\"}}\n-    {skip    t10  . \"--skip=*\"       {mc \"Skip:\"}}\n-    {first   b    . \"--first-parent\" {mc \"Limit to first parent\"}}\n-    {cmd     t50= + {}               {mc \"Command to generate more commits to include:\"}}\n+    {perm      b    .  {}               {mc \"Remember this view\"}}\n+    {reflabel  l    +  {}               {mc \"References (space separated list):\"}}\n+    {refs      t15  .. {}               {mc \"Branches & tags:\"}}\n+    {allrefs   b    *. \"--all\"          {mc \"All refs\"}}\n+    {branches  b    .  \"--branches\"     {mc \"All (local) branches\"}}\n+    {tags      b    .  \"--tags\"         {mc \"All tags\"}}\n+    {remotes   b    .  \"--remotes\"      {mc \"All remote-tracking branches\"}}\n+    {commitlbl l    +  {}               {mc \"Commit Info (regular expressions):\"}}\n+    {author    t15  .. \"--author=*\"     {mc \"Author:\"}}\n+    {committer t15  .  \"--committer=*\"  {mc \"Committer:\"}}\n+    {loginfo   t15  .. \"--grep=*\"       {mc \"Commit Message:\"}}\n+    {allmatch  b    .. \"--all-match\"    {mc \"Matches all Commit Info criteria\"}}\n+    {changes_l l    +  {}               {mc \"Changes to Files:\"}}\n+    {pickaxe_s r0   .  {}               {mc \"Fixed String\"}}\n+    {pickaxe_t r1   .  \"--pickaxe-regex\"  {mc \"Regular Expression\"}}\n+    {pickaxe   t15  .. \"-S*\"            {mc \"Search string:\"}}\n+    {datelabel l    +  {}               {mc \"Commit Dates (\\\"2 weeks ago\\\", \\\"2009-03-17 15:27:38\\\", \\\"March 17, 2009 15:27:38\\\"):\"}}\n+    {since     t15  ..  {\"--since=*\" \"--after=*\"}  {mc \"Since:\"}}\n+    {until     t15  .   {\"--until=*\" \"--before=*\"} {mc \"Until:\"}}\n+    {limit_lbl l    +  {}               {mc \"Limit and/or skip a number of revisions (positive integer):\"}}\n+    {limit     t10  *. \"--max-count=*\"  {mc \"Number to show:\"}}\n+    {skip      t10  .  \"--skip=*\"       {mc \"Number to skip:\"}}\n+    {misc_lbl  l    +  {}               {mc \"Miscellaneous options:\"}}\n+    {dorder    b    *. {\"--date-order\" \"-d\"}      {mc \"Strictly sort by date\"}}\n+    {lright    b    .  \"--left-right\"   {mc \"Mark branch sides\"}}\n+    {first     b    .  \"--first-parent\" {mc \"Limit to first parent\"}}\n+    {args      t50  *. {}               {mc \"Additional arguments to git log:\"}}\n+    {allpaths  path +  {}               {mc \"Enter files and directories to include, one per line:\"}}\n+    {cmd       t50= +  {}               {mc \"Command to generate more commits to include:\"}}\n     }\n \n proc encode_view_opts {n} {\n@@ -3653,13 +3671,19 @@ proc encode_view_opts {n} {\n \tif {$patterns eq {}} continue\n \tset pattern [lindex $patterns 0]\n \n-\tset val $newviewopts($n,[lindex $opt 0])\n-\t\n \tif {[lindex $opt 1] eq \"b\"} {\n+\t    set val $newviewopts($n,[lindex $opt 0])\n \t    if {$val} {\n \t\tlappend rargs $pattern\n \t    }\n+\t} elseif {[regexp {^r(\\d+)$} [lindex $opt 1] type value]} {\n+\t    regexp {^(.*_)} [lindex $opt 0] uselessvar button_id\n+\t    set val $newviewopts($n,$button_id)\n+\t    if {$val eq $value} {\n+\t\tlappend rargs $pattern\n+\t    }\n \t} else {\n+\t    set val $newviewopts($n,[lindex $opt 0])\n \t    set val [string trim $val]\n \t    if {$val ne {}} {\n \t\tset pfix [string range $pattern 0 end-1]\n@@ -3667,6 +3691,7 @@ proc encode_view_opts {n} {\n \t    }\n \t}\n     }\n+    set rargs [concat $rargs [shellsplit $newviewopts($n,refs)]]\n     return [concat $rargs [shellsplit $newviewopts($n,args)]]\n }\n \n@@ -3674,14 +3699,22 @@ proc decode_view_opts {n view_args} {\n     global known_view_options newviewopts\n \n     foreach opt $known_view_options {\n+\tset id [lindex $opt 0]\n \tif {[lindex $opt 1] eq \"b\"} {\n+\t    # Checkboxes\n+\t    set val 0\n+        } elseif {[regexp {^r(\\d+)$} [lindex $opt 1]]} {\n+\t    # Radiobuttons\n+\t    regexp {^(.*_)} $id uselessvar id\n \t    set val 0\n \t} else {\n+\t    # Text fields\n \t    set val {}\n \t}\n-\tset newviewopts($n,[lindex $opt 0]) $val\n+\tset newviewopts($n,$id) $val\n     }\n     set oargs [list]\n+    set refargs [list]\n     foreach arg $view_args {\n \tif {[regexp -- {^-([0-9]+)$} $arg arg cnt]\n \t    && ![info exists found(limit)]} {\n@@ -3695,11 +3728,17 @@ proc decode_view_opts {n view_args} {\n \t    if {[info exists found($id)]} continue\n \t    foreach pattern [lindex $opt 3] {\n \t\tif {![string match $pattern $arg]} continue\n-\t\tif {[lindex $opt 1] ne \"b\"} {\n+\t\tif {[lindex $opt 1] eq \"b\"} {\n+\t\t    # Check buttons\n+\t\t    set val 1\n+\t\t} elseif {[regexp {^r(\\d+)$} [lindex $opt 1] match num]} {\n+\t\t    # Radio buttons\n+\t\t    regexp {^(.*_)} $id uselessvar id\n+\t\t    set val $num\n+\t\t} else {\n+\t\t    # Text input fields\n \t\t    set size [string length $pattern]\n \t\t    set val [string range $arg [expr {$size-1}] end]\n-\t\t} else {\n-\t\t    set val 1\n \t\t}\n \t\tset newviewopts($n,$id) $val\n \t\tset found($id) 1\n@@ -3708,8 +3747,13 @@ proc decode_view_opts {n view_args} {\n \t    if {[info exists val]} break\n \t}\n \tif {[info exists val]} continue\n-\tlappend oargs $arg\n+\tif {[regexp {^-} $arg]} {\n+\t    lappend oargs $arg\n+\t} else {\n+\t    lappend refargs $arg\n+\t}\n     }\n+    set newviewopts($n,refs) [shellarglist $refargs]\n     set newviewopts($n,args) [shellarglist $oargs]\n }\n \n@@ -3745,16 +3789,16 @@ proc vieweditor {top n title} {\n     global known_view_options\n \n     toplevel $top\n-    wm title $top $title\n+    wm title $top [concat $title \"-- criteria for selecting revisions\"]\n     make_transient $top .\n \n     # View name\n     frame $top.nfr\n-    label $top.nl -text [mc \"Name\"]\n+    label $top.nl -text [mc \"View Name:\"]\n     entry $top.name -width 20 -textvariable newviewname($n)\n     pack $top.nfr -in $top -fill x -pady 5 -padx 3\n-    pack $top.nl -in $top.nfr -side left -padx {0 30}\n-    pack $top.name -in $top.nfr -side left\n+    pack $top.nl -in $top.nfr -side left -padx {0 5}\n+    pack $top.name -in $top.nfr -side left -padx {0 25}\n \n     # View options\n     set cframe $top.nfr\n@@ -3773,14 +3817,28 @@ proc vieweditor {top n title} {\n \t    frame $cframe\n \t    pack $cframe -in $top -fill x -pady 3 -padx 3\n \t    set cexpand [expr {$flags eq \"*\"}]\n+        } elseif {$flags eq \"..\" || $flags eq \"*.\"} {\n+\t    set cframe $top.fr$cnt\n+\t    incr cnt\n+\t    frame $cframe\n+\t    pack $cframe -in $top -fill x -pady 3 -padx [list 15 3]\n+\t    set cexpand [expr {$flags eq \"*.\"}]\n \t} else {\n \t    set lxpad 5\n \t}\n \n-\tif {$type eq \"b\"} {\n+\tif {$type eq \"l\"} {\n+            label $cframe.l_$id -text $title\n+            pack $cframe.l_$id -in $cframe -side left -pady [list 3 0] -anchor w\n+\t} elseif {$type eq \"b\"} {\n \t    checkbutton $cframe.c_$id -text $title -variable newviewopts($n,$id)\n \t    pack $cframe.c_$id -in $cframe -side left \\\n \t\t-padx [list $lxpad 0] -expand $cexpand -anchor w\n+\t} elseif {[regexp {^r(\\d+)$} $type type sz]} {\n+\t    regexp {^(.*_)} $id uselessvar button_id\n+\t    radiobutton $cframe.c_$id -text $title -variable newviewopts($n,$button_id) -value $sz\n+\t    pack $cframe.c_$id -in $cframe -side left \\\n+\t\t-padx [list $lxpad 0] -expand $cexpand -anchor w\n \t} elseif {[regexp {^t(\\d+)$} $type type sz]} {\n \t    message $cframe.l_$id -aspect 1500 -text $title\n \t    entry $cframe.e_$id -width $sz -background $bgcolor \\\n@@ -3793,23 +3851,22 @@ proc vieweditor {top n title} {\n \t\t-textvariable newviewopts($n,$id)\n \t    pack $cframe.l_$id -in $cframe -side top -pady [list 3 0] -anchor w\n \t    pack $cframe.e_$id -in $cframe -side top -fill x\n+\t} elseif {$type eq \"path\"} {\n+\t    message $top.l -aspect 1500 -text $title\n+\t    pack $top.l -in $top -side top -pady [list 3 0] -anchor w -padx 3\n+\t    text $top.t -width 40 -height 5 -background $bgcolor -font uifont\n+\t    if {[info exists viewfiles($n)]} {\n+\t\tforeach f $viewfiles($n) {\n+\t\t    $top.t insert end $f\n+\t\t    $top.t insert end \"\\n\"\n+\t\t}\n+\t\t$top.t delete {end - 1c} end\n+\t\t$top.t mark set insert 0.0\n+\t    }\n+\t    pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3\n \t}\n     }\n \n-    # Path list\n-    message $top.l -aspect 1500 \\\n-\t-text [mc \"Enter files and directories to include, one per line:\"]\n-    pack $top.l -in $top -side top -pady [list 7 0] -anchor w -padx 3\n-    text $top.t -width 40 -height 5 -background $bgcolor -font uifont\n-    if {[info exists viewfiles($n)]} {\n-\tforeach f $viewfiles($n) {\n-\t    $top.t insert end $f\n-\t    $top.t insert end \"\\n\"\n-\t}\n-\t$top.t delete {end - 1c} end\n-\t$top.t mark set insert 0.0\n-    }\n-    pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3\n     frame $top.buts\n     button $top.buts.ok -text [mc \"OK\"] -command [list newviewok $top $n]\n     button $top.buts.apply -text [mc \"Apply (F5)\"] -command [list newviewok $top $n 1]\n-- \n1.6.0.6\n"}]}