public GoTo Parse(string argument)
        {
            var chunks = argument.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
            if (chunks.Length == 0)
                return null;

            var goTo = new GoTo();
            if (!File.Exists(chunks[0]))
                return null;
            goTo.File = chunks[0];
            if (chunks.Length == 1)
                return goTo;

            int line;
            if (!int.TryParse(chunks[1], out line))
                return goTo;
            goTo.Line = line;
            if (chunks.Length == 2)
                return goTo;

            int column;
            if (!int.TryParse(chunks[2], out column))
                return goTo;
            goTo.Column = column;
            if (chunks.Length == 3)
                return goTo;

            goTo.Window = chunks[3];
            return goTo;
        }
 public EditorInsertMessage(string text, GoTo destination, Position offset)
 {
     Text = text;
     Destination = destination;
     MoveOffset = offset;
 }
 public EditorReplaceMessage(string content, GoTo start, GoTo end)
 {
     Text = content;
     Start = start;
     End = end;
 }
 public EditorRemoveMessage(GoTo start, GoTo end)
 {
     Start = start;
     End = end;
 }