preserve mark order in f[sx] variables (#59)
* preserve mark order in f[sx] variables * Revert "preserve mark order in f[sx] variables" This reverts commit e02c5e8bb3ec58f7cefafc92419f14c51e6730ef. * preserve mark order in f[sx], but more efficiently credit to @gokcehan for the idea
This commit is contained in:
parent
79ca4cfe9d
commit
a704248696
4
eval.go
4
eval.go
@ -292,7 +292,7 @@ func (e *callExpr) eval(app *app, args []string) {
|
||||
log.Printf(msg)
|
||||
return
|
||||
}
|
||||
app.nav.marks = make(map[string]bool)
|
||||
app.nav.marks = make(map[string]int)
|
||||
if err := sendRemote("send sync"); err != nil {
|
||||
msg := fmt.Sprintf("yank: %s", err)
|
||||
app.ui.message = msg
|
||||
@ -305,7 +305,7 @@ func (e *callExpr) eval(app *app, args []string) {
|
||||
log.Printf(msg)
|
||||
return
|
||||
}
|
||||
app.nav.marks = make(map[string]bool)
|
||||
app.nav.marks = make(map[string]int)
|
||||
if err := sendRemote("send sync"); err != nil {
|
||||
msg := fmt.Sprintf("delete: %s", err)
|
||||
app.ui.message = msg
|
||||
|
40
nav.go
40
nav.go
@ -183,8 +183,9 @@ type nav struct {
|
||||
inds map[string]int
|
||||
poss map[string]int
|
||||
names map[string]string
|
||||
marks map[string]bool
|
||||
marks map[string]int
|
||||
saves map[string]bool
|
||||
markInd int
|
||||
height int
|
||||
search string
|
||||
}
|
||||
@ -225,8 +226,9 @@ func newNav(height int) *nav {
|
||||
inds: make(map[string]int),
|
||||
poss: make(map[string]int),
|
||||
names: make(map[string]string),
|
||||
marks: make(map[string]bool),
|
||||
marks: make(map[string]int),
|
||||
saves: make(map[string]bool),
|
||||
markInd: 0,
|
||||
height: height,
|
||||
}
|
||||
}
|
||||
@ -242,6 +244,9 @@ func (nav *nav) renew(height int) {
|
||||
delete(nav.marks, m)
|
||||
}
|
||||
}
|
||||
if len(nav.marks) == 0 {
|
||||
nav.markInd = 0
|
||||
}
|
||||
}
|
||||
|
||||
func (nav *nav) up(dist int) {
|
||||
@ -380,10 +385,14 @@ func (nav *nav) searchPrev() {
|
||||
}
|
||||
|
||||
func (nav *nav) toggleMark(path string) {
|
||||
if nav.marks[path] {
|
||||
if _, ok := nav.marks[path]; ok {
|
||||
delete(nav.marks, path)
|
||||
if len(nav.marks) == 0 {
|
||||
nav.markInd = 0
|
||||
}
|
||||
} else {
|
||||
nav.marks[path] = true
|
||||
nav.marks[path] = nav.markInd
|
||||
nav.markInd = nav.markInd + 1
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,10 +511,25 @@ func (nav *nav) currFile() (*file, error) {
|
||||
return last.fi[last.ind], nil
|
||||
}
|
||||
|
||||
type IndexedMarks struct {
|
||||
paths []string
|
||||
indices []int
|
||||
}
|
||||
|
||||
func (m IndexedMarks) Len() int { return len(m.paths) }
|
||||
func (m IndexedMarks) Swap(i, j int) {
|
||||
m.paths[i], m.paths[j] = m.paths[j], m.paths[i]
|
||||
m.indices[i], m.indices[j] = m.indices[j], m.indices[i]
|
||||
}
|
||||
func (m IndexedMarks) Less(i, j int) bool { return m.indices[i] < m.indices[j] }
|
||||
|
||||
func (nav *nav) currMarks() []string {
|
||||
marks := make([]string, 0, len(nav.marks))
|
||||
for m := range nav.marks {
|
||||
marks = append(marks, m)
|
||||
paths := make([]string, 0, len(nav.marks))
|
||||
indices := make([]int, 0, len(nav.marks))
|
||||
for path, index := range nav.marks {
|
||||
paths = append(paths, path)
|
||||
indices = append(indices, index)
|
||||
}
|
||||
return marks
|
||||
sort.Sort(IndexedMarks{paths: paths, indices: indices})
|
||||
return paths
|
||||
}
|
||||
|
4
ui.go
4
ui.go
@ -209,7 +209,7 @@ func (win *win) printl(x, y int, fg, bg termbox.Attribute, s string) {
|
||||
win.printf(x, y, fg, bg, "%s%*s", s, win.w-len(s), "")
|
||||
}
|
||||
|
||||
func (win *win) printd(dir *dir, marks, saves map[string]bool) {
|
||||
func (win *win) printd(dir *dir, marks map[string]int, saves map[string]bool) {
|
||||
if win.w < 3 {
|
||||
return
|
||||
}
|
||||
@ -254,7 +254,7 @@ func (win *win) printd(dir *dir, marks, saves map[string]bool) {
|
||||
|
||||
path := filepath.Join(dir.path, f.Name())
|
||||
|
||||
if marks[path] {
|
||||
if _, ok := marks[path]; ok {
|
||||
win.print(0, i, fg, termbox.ColorMagenta, " ")
|
||||
} else if copy, ok := saves[path]; ok {
|
||||
if copy {
|
||||
|
Loading…
Reference in New Issue
Block a user