Improve word movement behavior

This commit is contained in:
Zachary Yedidia
2016-04-27 10:44:36 -04:00
parent 957e97dfb0
commit 80755dcf31
2 changed files with 9 additions and 4 deletions

View File

@@ -218,10 +218,10 @@ func (c *Cursor) SelectTo(loc int) {
// WordRight moves the cursor one word to the right
func (c *Cursor) WordRight() {
c.Right()
for !IsWordChar(string(c.RuneUnder(c.x))) {
for IsWhitespace(c.RuneUnder(c.x)) {
c.Right()
}
for IsWordChar(string(c.RuneUnder(c.x))) {
for !IsWhitespace(c.RuneUnder(c.x)) {
c.Right()
}
}
@@ -229,10 +229,10 @@ func (c *Cursor) WordRight() {
// WordLeft moves the cursor one word to the left
func (c *Cursor) WordLeft() {
c.Left()
for !IsWordChar(string(c.RuneUnder(c.x))) {
for IsWhitespace(c.RuneUnder(c.x)) {
c.Left()
}
for IsWordChar(string(c.RuneUnder(c.x))) {
for !IsWhitespace(c.RuneUnder(c.x)) {
c.Left()
}
c.Right()

View File

@@ -62,6 +62,11 @@ func IsWordChar(str string) bool {
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c == '_')
}
// IsWhitespace returns true if the given rune is a space, tab, or newline
func IsWhitespace(c rune) bool {
return c == ' ' || c == '\t' || c == '\n'
}
// Contains returns whether or not a string array contains a given string
func Contains(list []string, a string) bool {
for _, b := range list {