Add retab

This commit is contained in:
Zachary Yedidia
2019-01-14 22:44:06 -05:00
parent 467d384789
commit 3380170af8
3 changed files with 28 additions and 23 deletions

View File

@@ -309,29 +309,7 @@ func (h *BufHandler) ParagraphNext() bool {
// Retab changes all tabs to spaces or all spaces to tabs depending // Retab changes all tabs to spaces or all spaces to tabs depending
// on the user's settings // on the user's settings
func (h *BufHandler) Retab() bool { func (h *BufHandler) Retab() bool {
// b := h.Buf h.Buf.Retab()
// toSpaces := b.Settings["tabstospaces"].(bool)
// tabsize := util.IntOpt(b.Settings["tabsize"])
// dirty := false
//
// for i := 0; i < b.LinesNum(); i++ {
// l := b.LineBytes(i)
//
// ws := util.GetLeadingWhitespace(l)
// if len(ws) != 0 {
// if toSpaces {
// ws = bytes.Replace(ws, []byte("\t"), []byte(util.Spaces(tabsize)), -1)
// } else {
// ws = bytes.Replace(ws, []byte(util.Spaces(tabsize)), []byte("\t"), -1)
// }
// }
//
// l = bytes.TrimLeft(l, " \t")
// b.lines[i].data = append(ws, l...)
// dirty = true
// }
//
// b.IsModified = dirty
return true return true
} }

View File

@@ -150,6 +150,7 @@ func (h *BufHandler) PluginCmd(args []string) {
// RetabCmd changes all spaces to tabs or all tabs to spaces // RetabCmd changes all spaces to tabs or all tabs to spaces
// depending on the user's settings // depending on the user's settings
func (h *BufHandler) RetabCmd(args []string) { func (h *BufHandler) RetabCmd(args []string) {
h.Buf.Retab()
} }
// RawCmd opens a new raw view which displays the escape sequences micro // RawCmd opens a new raw view which displays the escape sequences micro

View File

@@ -601,3 +601,29 @@ func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) Loc {
} }
return start return start
} }
// Retab changes all tabs to spaces or vice versa
func (b *Buffer) Retab() {
toSpaces := b.Settings["tabstospaces"].(bool)
tabsize := IntOpt(b.Settings["tabsize"])
dirty := false
for i := 0; i < b.LinesNum(); i++ {
l := b.LineBytes(i)
ws := GetLeadingWhitespace(l)
if len(ws) != 0 {
if toSpaces {
ws = bytes.Replace(ws, []byte{'\t'}, bytes.Repeat([]byte{' '}, tabsize), -1)
} else {
ws = bytes.Replace(ws, bytes.Repeat([]byte{' '}, tabsize), []byte{'\t'}, -1)
}
}
l = bytes.TrimLeft(l, " \t")
b.lines[i].data = append(ws, l...)
dirty = true
}
b.isModified = dirty
}