diff --git a/cmd/micro/util.go b/cmd/micro/util.go index 069aff6f..858ae42f 100644 --- a/cmd/micro/util.go +++ b/cmd/micro/util.go @@ -75,3 +75,16 @@ func Contains(list []string, a string) bool { func Insert(str string, pos int, value string) string { return string([]rune(str)[:pos]) + value + string([]rune(str)[pos:]) } + +// GetLeadingWhitespace returns the leading whitespace of the given string +func GetLeadingWhitespace(str string) string { + ws := "" + for _, c := range str { + if c == ' ' || c == '\t' { + ws += string(c) + } else { + break + } + } + return ws +} diff --git a/cmd/micro/view.go b/cmd/micro/view.go index cbfe5227..31acf35d 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -377,8 +377,17 @@ func (v *View) HandleEvent(event tcell.Event) { v.cursor.DeleteSelection() v.cursor.ResetSelection() } + v.eh.Insert(v.cursor.Loc(), "\n") + ws := GetLeadingWhitespace(v.buf.lines[v.cursor.y]) v.cursor.Right() + + if settings.AutoIndent { + v.eh.Insert(v.cursor.Loc(), ws) + for i := 0; i < len(ws); i++ { + v.cursor.Right() + } + } v.cursor.lastVisualX = v.cursor.GetVisualX() case tcell.KeySpace: // Insert a space diff --git a/todolist.md b/todolist.md index 387e6370..6bfee213 100644 --- a/todolist.md +++ b/todolist.md @@ -14,14 +14,14 @@ - [ ] Persistent undo/redo (saved between open and closing micro) -- [ ] Auto indent - - [ ] More options - [ ] Tabs to spaces - [ ] Wrap lines ### Done +- [x] Auto indent + - [x] Line numbers - [x] Search and replace