]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/search.go
Small fix to redraw location
[micro.git] / cmd / micro / search.go
index 98e80758bad8b3016d1b6d86e22fbe303a6c7ca6..a0233c4a60d650d12538ea99f6d4da9bdadfec82 100644 (file)
@@ -15,10 +15,15 @@ var (
 
        // Is there currently a search in progress
        searching bool
+
+       // Stores the history for searching
+       searchHistory []string
 )
 
 // BeginSearch starts a search
 func BeginSearch() {
+       searchHistory = append(searchHistory, "")
+       messenger.historyNum = len(searchHistory) - 1
        searching = true
        messenger.hasPrompt = true
        messenger.Message("Find: ")
@@ -26,6 +31,7 @@ func BeginSearch() {
 
 // EndSearch stops the current search
 func EndSearch() {
+       searchHistory[len(searchHistory)-1] = messenger.response
        searching = false
        messenger.hasPrompt = false
        messenger.Clear()
@@ -48,7 +54,7 @@ func HandleSearchEvent(event tcell.Event, v *View) {
                }
        }
 
-       messenger.HandleEvent(event)
+       messenger.HandleEvent(event, searchHistory)
 
        if messenger.cursorx < 0 {
                // Done
@@ -78,10 +84,10 @@ func Search(searchStr string, v *View, down bool) {
        var charPos int
        text := v.Buf.String()
        if down {
-               str = text[searchStart:]
+               str = string([]rune(text)[searchStart:])
                charPos = searchStart
        } else {
-               str = text[:searchStart]
+               str = string([]rune(text)[:searchStart])
        }
        r, err := regexp.Compile(searchStr)
        if settings["ignorecase"].(bool) {
@@ -119,9 +125,9 @@ func Search(searchStr string, v *View, down bool) {
                return
        }
 
-       v.Cursor.CurSelection[0] = charPos + runePos(match[0], str)
-       v.Cursor.CurSelection[1] = charPos + runePos(match[1], str)
-       v.Cursor.X, v.Cursor.Y = FromCharPos(charPos+match[1]-1, v.Buf)
+       v.Cursor.CurSelection[0] = FromCharPos(charPos+runePos(match[0], str), v.Buf)
+       v.Cursor.CurSelection[1] = FromCharPos(charPos+runePos(match[1], str), v.Buf)
+       v.Cursor.Loc = v.Cursor.CurSelection[1]
        if v.Relocate() {
                v.matches = Match(v)
        }