<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>plugins/edit_tab/commands/change_indent_command.rb</filename>
    </added>
    <added>
      <filename>plugins/edit_tab/commands/indent_left_command.rb</filename>
    </added>
    <added>
      <filename>plugins/edit_tab/commands/indent_right_command.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,438 +1 @@
-
-require 'lib/redcar'
-require 'test/unit'
-require File.dirname(__FILE__) + '/test_helper'
-
-class TestTheme &lt; Test::Unit::TestCase
-  include Redcar
-  
-  def setup
-    startup
-    @theme_twilight = {
-      &quot;name&quot;=&gt;&quot;Twilight&quot;,
-      &quot;uuid&quot;=&gt;&quot;766026CB-703D-4610-B070-8DE07D967C5F&quot;,
-      &quot;settings&quot;=&gt;
-      [{&quot;settings&quot;=&gt;
-         {&quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-           &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-           &quot;background&quot;=&gt;&quot;#141414&quot;,
-           &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-           &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-           &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;Comment&quot;,
-         &quot;scope&quot;=&gt;&quot;comment&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#5F5A60&quot;}},
-       {&quot;name&quot;=&gt;&quot;Constant&quot;,
-         &quot;scope&quot;=&gt;&quot;constant&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#CF6A4C&quot;}},
-       {&quot;name&quot;=&gt;&quot;Entity&quot;,
-         &quot;scope&quot;=&gt;&quot;entity&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#9B703F&quot;}},
-       {&quot;name&quot;=&gt;&quot;Keyword&quot;,
-         &quot;scope&quot;=&gt;&quot;keyword&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-       {&quot;name&quot;=&gt;&quot;Storage&quot;,
-         &quot;scope&quot;=&gt;&quot;storage&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#F9EE98&quot;}},
-       {&quot;name&quot;=&gt;&quot;String&quot;,
-         &quot;scope&quot;=&gt;&quot;string&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#8F9D6A&quot;}},
-       {&quot;name&quot;=&gt;&quot;Support&quot;,
-         &quot;scope&quot;=&gt;&quot;support&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#9B859D&quot;}},
-       {&quot;name&quot;=&gt;&quot;Variable&quot;,
-         &quot;scope&quot;=&gt;&quot;variable&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#7587A6&quot;}},
-       {&quot;name&quot;=&gt;&quot;Invalid &#8211; Deprecated&quot;,
-         &quot;scope&quot;=&gt;&quot;invalid.deprecated&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic underline&quot;, &quot;foreground&quot;=&gt;&quot;#D2A8A1&quot;}},
        {&quot;name&quot;=&gt;&quot;Invalid &#8211; Illegal&quot;,
-         &quot;scope&quot;=&gt;&quot;invalid.illegal&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#562D56BF&quot;, &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;-----------------------------------&quot;, &quot;settings&quot;=&gt;{}},
-       {&quot;name&quot;=&gt;&quot;Embedded Source&quot;,
-         &quot;scope&quot;=&gt;&quot;text source&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#B0B3BA14&quot;}},
-       {&quot;name&quot;=&gt;&quot;Embedded Source (Bright)&quot;,
-         &quot;scope&quot;=&gt;&quot;text.html.ruby source&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#B1B3BA21&quot;}},
-       {&quot;name&quot;=&gt;&quot;Entity inherited-class&quot;,
-         &quot;scope&quot;=&gt;&quot;entity.other.inherited-class&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#9B5C2E&quot;}},
-       {&quot;name&quot;=&gt;&quot;String embedded-source&quot;,
-         &quot;scope&quot;=&gt;&quot;string source&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#DAEFA3&quot;}},
-       {&quot;name&quot;=&gt;&quot;String constant&quot;,
-         &quot;scope&quot;=&gt;&quot;string constant&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#DDF2A4&quot;}},
-       {&quot;name&quot;=&gt;&quot;String.regexp&quot;,
-         &quot;scope&quot;=&gt;&quot;string.regexp&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#E9C062&quot;}},
-       {&quot;name&quot;=&gt;&quot;String.regexp.&#171;special&#187;&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#CF7D34&quot;}},
-       {&quot;name&quot;=&gt;&quot;String variable&quot;,
-         &quot;scope&quot;=&gt;&quot;string variable&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8A9A95&quot;}},
-       {&quot;name&quot;=&gt;&quot;Support.function&quot;,
-         &quot;scope&quot;=&gt;&quot;support.function&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#DAD085&quot;}},
-       {&quot;name&quot;=&gt;&quot;Support.constant&quot;,
-         &quot;scope&quot;=&gt;&quot;support.constant&quot;,
-         &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CF6A4C&quot;}},
-       {&quot;name&quot;=&gt;&quot;c C/C++ Preprocessor Line&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.preprocessor.c&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8996A8&quot;}},
-       {&quot;name&quot;=&gt;&quot;c C/C++ Preprocessor Directive&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.preprocessor.c keyword&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#AFC4DB&quot;}},
-       {&quot;name&quot;=&gt;&quot;Doctype/XML Processing&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#494949&quot;}},
-       {&quot;name&quot;=&gt;&quot;Meta.tag.&#171;all&#187;&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;declaration.tag, declaration.tag entity, meta.tag, meta.tag entity&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#AC885B&quot;}},
-       {&quot;name&quot;=&gt;&quot;Meta.tag.inline&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#E0C589&quot;}},
-       {&quot;name&quot;=&gt;&quot;css tag-name&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.selector.css entity.name.tag&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-       {&quot;name&quot;=&gt;&quot;css:pseudo-class&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.selector.css entity.other.attribute-name.tag.pseudo-class&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8F9D6A&quot;}},
-       {&quot;name&quot;=&gt;&quot;css#id&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.selector.css entity.other.attribute-name.id&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8B98AB&quot;}},
-       {&quot;name&quot;=&gt;&quot;css.class&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.selector.css entity.other.attribute-name.class&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#9B703F&quot;}},
-       {&quot;name&quot;=&gt;&quot;css property-name:&quot;,
-         &quot;scope&quot;=&gt;&quot;support.type.property-name.css&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#C5AF75&quot;}},
-       {&quot;name&quot;=&gt;&quot;css property-value;&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#F9EE98&quot;}},
-       {&quot;name&quot;=&gt;&quot;css @at-rule&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.preprocessor.at-rule keyword.control.at-rule&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8693A5&quot;}},
-       {&quot;name&quot;=&gt;&quot;css additional-constants&quot;,
-         &quot;scope&quot;=&gt;
-         &quot;meta.property-value support.constant.named-color.css, meta.property-value constant&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#CA7840&quot;}},
-       {&quot;name&quot;=&gt;&quot;css constructor.argument&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.constructor.argument.css&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#8F9D6A&quot;}},
-       {&quot;name&quot;=&gt;&quot;diff.header&quot;,
-         &quot;scope&quot;=&gt;&quot;meta.diff, meta.diff.header, meta.separator&quot;,
-         &quot;settings&quot;=&gt;
-         {&quot;fontStyle&quot;=&gt;&quot;italic&quot;,
-           &quot;background&quot;=&gt;&quot;#0E2231&quot;,
-           &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;diff.deleted&quot;,
-         &quot;scope&quot;=&gt;&quot;markup.deleted&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#420E09&quot;, &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;diff.changed&quot;,
-         &quot;scope&quot;=&gt;&quot;markup.changed&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#4A410D&quot;, &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;diff.inserted&quot;,
-         &quot;scope&quot;=&gt;&quot;markup.inserted&quot;,
-         &quot;settings&quot;=&gt;{&quot;background&quot;=&gt;&quot;#253B22&quot;, &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-       {&quot;name&quot;=&gt;&quot;Markup: List&quot;,
-         &quot;scope&quot;=&gt;&quot;markup.list&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#F9EE98&quot;}},
-       {&quot;name&quot;=&gt;&quot;Markup: Heading&quot;,
-         &quot;scope&quot;=&gt;&quot;markup.heading&quot;,
-         &quot;settings&quot;=&gt;{&quot;foreground&quot;=&gt;&quot;#CF6A4C&quot;}}]}
-    
-  end
-  
-  def teardown
-    shutdown
-  end
-  
-  def test_load_theme
-    th = Theme.new(@theme_twilight)
-    assert th
-    assert_equal &quot;Twilight&quot;, th.name
-    assert_equal &quot;766026CB-703D-4610-B070-8DE07D967C5F&quot;, th.uuid
-  end
-  
-  def test_theme_global_settings
-    th = Theme.new(@theme_twilight)
-    assert_equal({ &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-                   &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-                   &quot;background&quot;=&gt;&quot;#141414&quot;,
-                   &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-                   &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-                   &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}, th.global_settings)
-  end
-
-  def test_theme_scopes_with_simple_lookup
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;Comment&quot;,
-           &quot;scope&quot;=&gt;&quot;comment&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#5F5A60&quot;}},
-         { &quot;name&quot;=&gt;&quot;Keyword&quot;,
-           &quot;scope&quot;=&gt;&quot;keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    sc1 = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    sc2 = Syntax::Scope.new :name =&gt; &quot;comment&quot;
-    assert_equal 1, th.settings_for_scope(sc1).length
-    assert_equal 1, th.settings_for_scope(sc2).length
-  end
-  
-  def test_theme_scopes_with_ors
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;Comment&quot;,
-           &quot;scope&quot;=&gt;&quot;comment, keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#5F5A60&quot;}},
-         { &quot;name&quot;=&gt;&quot;Keyword&quot;,
-           &quot;scope&quot;=&gt;&quot;keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    sc1 = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    sc2 = Syntax::Scope.new :name =&gt; &quot;comment&quot;
-    assert_equal 2, th.settings_for_scope(sc1).length
-    assert_equal 1, th.settings_for_scope(sc2).length
-  end
-  
-  def test_theme_scopes_with_ands
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;Comment&quot;,
-           &quot;scope&quot;=&gt;&quot;comment keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#5F5A60&quot;}},
-         { &quot;name&quot;=&gt;&quot;Keyword&quot;,
-           &quot;scope&quot;=&gt;&quot;keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    sc1 = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    sc2 = Syntax::Scope.new :name =&gt; &quot;comment&quot;
-    sc3 = Syntax::Scope.new :name =&gt; &quot;comment.foobar.keyword&quot;
-    assert_equal 1, th.settings_for_scope(sc1).length
-    assert_equal 0, th.settings_for_scope(sc2).length
-    # 'comment keyword' matches comment.foobar.keyword?? don't think so.
-  #  assert_equal 2, th.settings_for_scope(sc3).length
-  end
-  
-  def test_theme_scopes_from_hierarchy
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;Comment&quot;,
-           &quot;scope&quot;=&gt;&quot;source.ruby keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;&quot;italic&quot;, &quot;foreground&quot;=&gt;&quot;#5F5A60&quot;}},
-         { &quot;name&quot;=&gt;&quot;Keyword&quot;,
-           &quot;scope&quot;=&gt;&quot;keyword&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-         { &quot;name&quot;=&gt;&quot;Keyword&quot;,
-           &quot;scope&quot;=&gt;&quot;source.ruby keyword.if&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    sck = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    scki = Syntax::Scope.new :name =&gt; &quot;keyword.if&quot;
-    
-    scrk = Syntax::Scope.new :name =&gt; &quot;source.ruby&quot;
-    scrki = Syntax::Scope.new :name =&gt; &quot;source.ruby&quot;
-    sc1 = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    scrk.add_child(sc1)
-    sc2 = Syntax::Scope.new :name =&gt; &quot;keyword.if&quot;
-    scrki.add_child(sc2)
-    
-    sckf = Syntax::Scope.new :name =&gt; &quot;keyword&quot;
-    scrl = Syntax::Scope.new :name =&gt; &quot;source.ruby&quot;
-    sckf.add_child(scrl)
-    assert_equal 1, th.settings_for_scope(sck).length
-    assert_equal 1, th.settings_for_scope(scki).length
-    assert_equal 2, th.settings_for_scope(sc1).length
-    assert_equal 3, th.settings_for_scope(sc2).length
-    
-    # this is 'keyword source.ruby' and should not 
-    # match 'source.ruby keyword'
-    assert_equal 1, th.settings_for_scope(scrl).length
-  end
-  
-  def test_difference
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;string-source&quot;,
-           &quot;scope&quot;=&gt;&quot;source string - string source&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    s1 = Syntax::Scope.new :name =&gt; &quot;source&quot;
-    s1.add_child(s2 = Syntax::Scope.new(:name =&gt; &quot;string&quot;))
-    # 'source string'
-    assert_equal 1, th.settings_for_scope(s2).length
-    s2.add_child(s3 = Syntax::Scope.new(:name =&gt; &quot;source&quot;))
-    # 'source string source'
-    assert_equal 0, th.settings_for_scope(s3).length
-    s3.add_child(s4 = Syntax::Scope.new(:name =&gt; &quot;string&quot;))
-    # 'source string source string'
-    assert_equal 1, th.settings_for_scope(s4).length
-    s4.add_child(s5 = Syntax::Scope.new(:name =&gt; &quot;source&quot;))
-    # 'source string source string source'
-    assert_equal 0, th.settings_for_scope(s3).length
-  end
-  
-  def test_tie_breaking
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;source.php&quot;,
-           &quot;scope&quot;=&gt;&quot;source.php&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-         { &quot;name&quot;=&gt;&quot;string&quot;,
-           &quot;scope&quot;=&gt;&quot;string&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    s1 = Syntax::Scope.new :name =&gt; &quot;source.php&quot;
-    s1.add_child(s2 = Syntax::Scope.new(:name =&gt; &quot;string.quoted&quot;))
-    # 1. Match the element deepest down in the scope e.g. 'string'
-    # wins over 'source.php' when the scope is 'source.php string.quoted'.
-    assert_equal &quot;string&quot;, th.settings_for_scope(s2)[0][&quot;name&quot;]
-    
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;string&quot;,
-           &quot;scope&quot;=&gt;&quot;string&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-         { &quot;name&quot;=&gt;&quot;string.quoted&quot;,
-           &quot;scope&quot;=&gt;&quot;string.quoted&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-         { &quot;name&quot;=&gt;&quot;source.php&quot;,
-           &quot;scope&quot;=&gt;&quot;source.php&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    s1 = Syntax::Scope.new :name =&gt; &quot;source.php&quot;
-    s1.add_child(s2 = Syntax::Scope.new(:name =&gt; &quot;string.quoted&quot;))
-    # 2. Match most of the deepest element e.g. 'string.quoted' wins 
-    # over 'string'.
-    assert_equal &quot;string.quoted&quot;, th.settings_for_scope(s2)[0][&quot;name&quot;]
-    
-    theme_example = {
-      &quot;name&quot; =&gt; &quot;example&quot;,
-      &quot;settings&quot; =&gt; 
-        [
-         {&quot;settings&quot; =&gt; {
-             &quot;lineHighlight&quot;=&gt;&quot;#FFFFFF08&quot;,
-             &quot;caret&quot;=&gt;&quot;#A7A7A7&quot;,
-             &quot;background&quot;=&gt;&quot;#141414&quot;,
-             &quot;selection&quot;=&gt;&quot;#DDF0FF33&quot;,
-             &quot;invisibles&quot;=&gt;&quot;#FFFFFF40&quot;,
-             &quot;foreground&quot;=&gt;&quot;#F8F8F8&quot;}},
-         { &quot;name&quot;=&gt;&quot;source string&quot;,
-           &quot;scope&quot;=&gt;&quot;source string&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}},
-         { &quot;name&quot;=&gt;&quot;text source string&quot;,
-           &quot;scope&quot;=&gt;&quot;text source string&quot;,
-           &quot;settings&quot;=&gt;{&quot;fontStyle&quot;=&gt;nil, &quot;foreground&quot;=&gt;&quot;#CDA869&quot;}}
-        ]}
-    th = Theme.new(theme_example)
-    s1 = Syntax::Scope.new :name =&gt; &quot;text&quot;
-    s1.add_child(s2 = Syntax::Scope.new(:name =&gt; &quot;source.php&quot;))
-    s2.add_child(s3 = Syntax::Scope.new(:name =&gt; &quot;string.quoted&quot;))
-    # Rules 1 and 2 applied again to the scope selector 
-    # when removing the deepest element (in the case of a tie), 
-    # e.g. text source string wins over source string.
-    assert_equal &quot;text source string&quot;, th.settings_for_scope(s3)[0][&quot;name&quot;]
-  end
-  
-  def test_applicable
-    th = Theme.new(@theme_twilight)
-    scopes = [ &quot;source.ruby&quot;,
-               &quot;string.unquoted.embedded.html.ruby&quot;,
-               &quot;text.html.embedded.ruby&quot;,
-               &quot;meta.tag.block.any.html&quot;,
-               &quot;string.quoted.double.html&quot;,
-               &quot;punctuation.definition.tag.html&quot;]
-    v1 = th.applicable?(&quot;declaration.tag, declaration.tag entity, meta.tag, meta.tag entity&quot;,
-                        scopes)
-    v2 = th.applicable?(&quot;string&quot;, scopes)
-    assert v2[0] &gt; v1[0]
-    scopes = [ &quot;text.html.basic&quot;,
-               &quot;meta.tag.inline.any.html&quot;,
-               &quot;string.quoted.double.html&quot;,
-               &quot;source.ruby.embedded.html&quot;,
-               &quot;punctuation.section.embedded.ruby&quot;]
-    assert_equal [3, [0, 1, 0, 0, 1]], th.applicable?(&quot;text source&quot;, scopes)
-    assert_equal [2, [0, 0, 1, 0, 0]], th.applicable?(&quot;string&quot;, scopes)
-    assert_equal [3, [0, 1, 1, 0, 0]], th.applicable?(&quot;string source - string&quot;, scopes)
-  end
-end</diff>
      <filename>oldtest/theme_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -59,6 +59,7 @@ module Redcar
       Dir[File.dirname(__FILE__) + &quot;/lib/*&quot;].each {|f| Kernel.load f}
       Dir[File.dirname(__FILE__) + &quot;/tabs/*&quot;].each {|f| Kernel.load f}
       Kernel.load File.dirname(__FILE__) + &quot;/commands/edit_tab.rb&quot;
+      Kernel.load File.dirname(__FILE__) + &quot;/commands/change_indent_command.rb&quot;
       Kernel.load File.dirname(__FILE__) + &quot;/commands/ruby.rb&quot;
       Dir[File.dirname(__FILE__) + &quot;/commands/*&quot;].each {|f| Kernel.load f}
       Kernel.load File.dirname(__FILE__) + &quot;/widgets/font_chooser_button.rb&quot;</diff>
      <filename>plugins/edit_tab/edit_tab.rb</filename>
    </modified>
    <modified>
      <diff>@@ -202,7 +202,7 @@ module Redcar
       delete_selection
       if text == nil
         if block_given?
-          new_text = yield(current_text.chars)
+          new_text = yield(current_text.to_s)
         end
       else
         new_text = text
@@ -219,9 +219,9 @@ module Redcar
       endsel   = enditer.offset
       delete(line_start(cursor_line),
              line_end(cursor_line))
-      if text==nil
+      unless text
         if block_given?
-          new_text = yield(current_text.chars)
+          new_text = yield(current_text.to_s)
         end
       else
         new_text = text
@@ -231,10 +231,19 @@ module Redcar
       select(startsel, endsel)
     end
 
-    def replace_range(start, finish, text)
+    def replace_range(start, finish, text=nil)
       pre_cursor_offset = cursor_offset
-      delete(iter(start), iter(finish))
-      insert(iter(start), text)
+      start, finish = iter(start), iter(finish)
+      current_text = get_text(start, finish)
+      delete(start, finish)
+      unless text
+        if block_given?
+          new_text = yield(current_text.to_s)
+        end
+      else
+        new_text = text
+      end
+      insert(start, new_text)
       place_cursor(iter(pre_cursor_offset))
     end
 </diff>
      <filename>plugins/edit_view/lib/document.rb</filename>
    </modified>
    <modified>
      <diff>@@ -39,7 +39,11 @@ module Redcar
         end
         item &quot;Kill Line&quot;, KillLine
         separator
-        item &quot;Indent Line&quot;,    IndentLine
+        submenu &quot;Indent&quot; do
+          item &quot;Auto&quot;,  IndentLine
+          item &quot;Left&quot;,  IndentLeftCommand
+          item &quot;Right&quot;, IndentRightCommand
+        end
         separator
         submenu &quot;Select&quot; do
           item &quot;Line&quot;,            SelectLine</diff>
      <filename>plugins/redcar/redcar.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ff68ed06f8f692760e023eb60854002cbbe4c373</id>
    </parent>
  </parents>
  <author>
    <name>Daniel Lucraft</name>
    <email>dan@fluentradical.com</email>
  </author>
  <url>http://github.com/danlucraft/redcar/commit/a8c14ba5113e6e30643fba9908e66d84086f1101</url>
  <id>a8c14ba5113e6e30643fba9908e66d84086f1101</id>
  <committed-date>2009-03-05T23:43:33-08:00</committed-date>
  <authored-date>2009-03-05T23:43:33-08:00</authored-date>
  <message>Added Indent Left and Indent Right commands</message>
  <tree>6318b5cefbdc1f8819dbe0022b28244de3ae07ab</tree>
  <committer>
    <name>Daniel Lucraft</name>
    <email>dan@fluentradical.com</email>
  </committer>
</commit>
