diff --git a/cmd/micro/buffer.go b/cmd/micro/buffer.go index 0a044341..8fa620f0 100644 --- a/cmd/micro/buffer.go +++ b/cmd/micro/buffer.go @@ -27,6 +27,7 @@ type Buffer struct { // Provide efficient and easy access to text and lines so the rope String does not // need to be constantly recalculated // These variables are updated in the update() function + Text string Lines []string NumLines int @@ -61,16 +62,17 @@ func (b *Buffer) UpdateRules() { } func (b *Buffer) String() string { - text := "" - if b.r.Len() != 0 { - text = b.r.String() - } - return text + return b.Text } // Update fetches the string from the rope and updates the `text` and `lines` in the buffer func (b *Buffer) Update() { - b.Lines = strings.Split(b.String(), "\n") + if b.r.Len() != 0 { + b.Text = b.r.String() + } else { + b.Text = "" + } + b.Lines = strings.Split(b.Text, "\n") b.NumLines = len(b.Lines) } @@ -123,7 +125,7 @@ func (b *Buffer) Remove(start, end int) string { if end > b.Len() { end = b.Len() } - removed := b.r.Report(start+1, end-start) + removed := b.Text[start:end] // The rope implenentation I am using wants indicies starting at 1 instead of 0 start++ end++ diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 1e41a7b2..e5565a37 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -141,7 +141,7 @@ func HandleCommand(input string, view *View) { found := false for { - match := regex.FindStringIndex(view.Buf.String()) + match := regex.FindStringIndex(view.Buf.Text) if match == nil { break } diff --git a/cmd/micro/cursor.go b/cmd/micro/cursor.go index e48abb7f..bba0f2ff 100644 --- a/cmd/micro/cursor.go +++ b/cmd/micro/cursor.go @@ -102,9 +102,9 @@ func (c *Cursor) DeleteSelection() { // GetSelection returns the cursor's selection func (c *Cursor) GetSelection() string { if c.curSelection[0] > c.curSelection[1] { - return c.v.Buf.r.Report(c.curSelection[1]+1, c.curSelection[0]-c.curSelection[1]) + return string([]rune(c.v.Buf.Text)[c.curSelection[1]:c.curSelection[0]]) } - return c.v.Buf.r.Report(c.curSelection[0]+1, c.curSelection[1]-c.curSelection[0]) + return string([]rune(c.v.Buf.Text)[c.curSelection[0]:c.curSelection[1]]) } // SelectLine selects the current line diff --git a/cmd/micro/search.go b/cmd/micro/search.go index 4253a316..041718ac 100644 --- a/cmd/micro/search.go +++ b/cmd/micro/search.go @@ -76,7 +76,7 @@ func Search(searchStr string, v *View, down bool) { } var str string var charPos int - text := v.Buf.String() + text := v.Buf.Text if down { str = text[searchStart:] charPos = searchStart