// Exit the search mode
ExitSearch(v)
return
- case tcell.KeyCtrlQ, tcell.KeyCtrlC, tcell.KeyEnter:
+ case tcell.KeyEnter:
+ // If the user has pressed Enter, they want this to be the lastSearch
+ lastSearch = messenger.response
+ EndSearch()
+ return
+ case tcell.KeyCtrlQ, tcell.KeyCtrlC:
// Done
EndSearch()
return
}
func searchDown(r *regexp.Regexp, v *View, start, end Loc) bool {
+ if start.Y >= v.Buf.NumLines {
+ start.Y = v.Buf.NumLines - 1
+ }
+ if start.Y < 0 {
+ start.Y = 0
+ }
for i := start.Y; i <= end.Y; i++ {
var l []byte
var charPos int
if i == start.Y {
runes := []rune(string(v.Buf.lines[i].data))
+ if start.X >= len(runes) {
+ start.X = len(runes) - 1
+ }
+ if start.X < 0 {
+ start.X = 0
+ }
l = []byte(string(runes[start.X:]))
charPos = start.X
}
func searchUp(r *regexp.Regexp, v *View, start, end Loc) bool {
+ if start.Y >= v.Buf.NumLines {
+ start.Y = v.Buf.NumLines - 1
+ }
+ if start.Y < 0 {
+ start.Y = 0
+ }
for i := start.Y; i >= end.Y; i-- {
var l []byte
if i == start.Y {
runes := []rune(string(v.Buf.lines[i].data))
+ if start.X >= len(runes) {
+ start.X = len(runes) - 1
+ }
+ if start.X < 0 {
+ start.X = 0
+ }
l = []byte(string(runes[:start.X]))
if strings.Contains(r.String(), "$") && start.X != Count(string(l)) {
found = searchUp(r, v, v.Buf.End(), searchStart)
}
}
- if found {
- lastSearch = searchStr
- } else {
+ if !found {
v.Cursor.ResetSelection()
}
}