anchor.diff:              // insert a space after the character that will be deleted by the delete
               _element.setRangeText(" ",
                   start: _element.selectionStart + 1,
  -                end: _element.selectionStart + 1);
  +                end: _element.selectionStart + 1,
  +                selectionMode: "preserve");
               return true;
             }
           }
  
positive.code:     _pressSub =
          _element.onKeyPress.listen(_changeEventFunction((KeyboardEvent e) {
        // ignore arrow keys that fire this on firefox
        if (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) {
          return false;
        }
        // ignore when meta|ctrl that we get on firefox
  
negative.code:             _logger.fine('cursor not at the beginning of the line');
              _logger.fine('adding space to replace whatever we\'re backspacing');
              // insert a space after the character that will be removed by the backspace
              _element.setRangeText(" ",
                  start: _element.selectionStart,
                  end: _element.selectionStart,
                  selectionMode: "preserve");
              return true;
            }
          } else if (e.which == 46) {
  