Implemented line numbers (#133)

This commit is contained in:
Tomáš Martiček 2019-01-27 15:31:29 +01:00 committed by gokcehan
parent e0e5977008
commit 90f0339fa9
7 changed files with 173 additions and 120 deletions

View File

@ -106,6 +106,12 @@ var (
"wrapscan",
"nowrapscan",
"wrapscan!",
"number",
"nonumber",
"number!",
"relativenumber",
"norelativenumber",
"relativenumber!",
"findlen",
"period",
"scrolloff",

60
doc.go
View File

@ -94,35 +94,37 @@ keybindings:
The following options can be used to customize the behavior of lf:
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\n")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\033[32;1m%u@%h\033[0m:\033[34;1m%w/\033[0m\033[1m%f\033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
number boolean (default off)
relativenumber boolean (default off)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\n")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\033[32;1m%u@%h\033[0m:\033[34;1m%w/\033[0m\033[1m%f\033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
The following variables are exported for shell commands:

View File

@ -97,35 +97,37 @@ keybindings:
The following options can be used to customize the behavior of lf:
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\n")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\033[32;1m%u@%h\033[0m:\033[34;1m%w/\033[0m\033[1m%f\033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
number boolean (default off)
relativenumber boolean (default off)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\n")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\033[32;1m%u@%h\033[0m:\033[34;1m%w/\033[0m\033[1m%f\033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
The following variables are exported for shell commands:

12
eval.go
View File

@ -143,6 +143,18 @@ func (e *setExpr) eval(app *app, args []string) {
gOpts.wrapscan = false
case "wrapscan!":
gOpts.wrapscan = !gOpts.wrapscan
case "number":
gOpts.number = true
case "nonumber":
gOpts.number = false
case "number!":
gOpts.number = !gOpts.number
case "relativenumber":
gOpts.relativenumber = true
case "norelativenumber":
gOpts.relativenumber = false
case "relativenumber!":
gOpts.relativenumber = !gOpts.relativenumber
case "findlen":
n, err := strconv.Atoi(e.val)
if err != nil {

60
lf.1
View File

@ -109,35 +109,37 @@ The following command line commands are provided by lf with default keybindings:
The following options can be used to customize the behavior of lf:
.PP
.EX
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\en")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\e033[32;1m%u@%h\e033[0m:\e033[34;1m%w/\e033[0m\e033[1m%f\e033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
anchorfind boolean (default on)
color256 boolean (default off)
dircounts boolean (default off)
dirfirst boolean (default on)
drawbox boolean (default off)
globsearch boolean (default off)
hidden boolean (default off)
ignorecase boolean (default on)
ignoredia boolean (default off)
incsearch boolean (default off)
preview boolean (default on)
reverse boolean (default off)
smartcase boolean (default on)
smartdia boolean (default off)
wrapscan boolean (default on)
number boolean (default off)
relativenumber boolean (default off)
findlen integer (default 1) (zero to prompt until single match)
period integer (default 0) (zero to disable periodic loading)
scrolloff integer (default 0)
tabstop integer (default 8)
filesep string (default "\en")
ifs string (default '') (not exported if empty)
previewer string (default '') (not filtered if empty)
promptfmt string (default "\e033[32;1m%u@%h\e033[0m:\e033[34;1m%w/\e033[0m\e033[1m%f\e033[0m")
shell string (default 'sh')
sortby string (default 'natural')
timefmt string (default 'Mon Jan _2 15:04:05 2006')
ratios string (default '1:2:3')
info string (default '')
shellopts string (default '')
.EE
.PP
The following variables are exported for shell commands:

60
opts.go
View File

@ -25,35 +25,37 @@ type sortType struct {
}
var gOpts struct {
anchorfind bool
color256 bool
dircounts bool
drawbox bool
globsearch bool
ignorecase bool
incsearch bool
preview bool
smartcase bool
ignoredia bool
smartdia bool
wrapscan bool
findlen int
period int
scrolloff int
tabstop int
filesep string
ifs string
previewer string
promptfmt string
shell string
timefmt string
ratios []int
info []string
shellopts []string
keys map[string]expr
cmdkeys map[string]expr
cmds map[string]expr
sortType sortType
anchorfind bool
color256 bool
dircounts bool
drawbox bool
globsearch bool
ignorecase bool
incsearch bool
preview bool
smartcase bool
ignoredia bool
smartdia bool
wrapscan bool
number bool
relativenumber bool
findlen int
period int
scrolloff int
tabstop int
filesep string
ifs string
previewer string
promptfmt string
shell string
timefmt string
ratios []int
info []string
shellopts []string
keys map[string]expr
cmdkeys map[string]expr
cmds map[string]expr
sortType sortType
}
func init() {

35
ui.go
View File

@ -267,18 +267,45 @@ func (win *win) printDir(dir *dir, selections map[string]int, saves map[string]b
return
}
var lnwidth int = 0;
var lnformat string = "";
if (gOpts.number || gOpts.relativenumber) {
lnwidth = 1;
for j := 10; j < len(dir.files); j *= 10 {
lnwidth++
}
lnformat = fmt.Sprintf("%%%d.d ", lnwidth)
}
for i, f := range dir.files[beg:end] {
fg, bg = colors.get(f)
if (lnwidth > 0) {
var ln string
if (gOpts.number && (!gOpts.relativenumber || i == dir.pos)) {
ln = fmt.Sprintf(lnformat, i + 1 + beg)
} else if (gOpts.relativenumber) {
if (i < dir.pos) {
ln = fmt.Sprintf(lnformat, dir.pos - i)
} else {
ln = fmt.Sprintf(lnformat, i - dir.pos)
}
}
win.print(0, i, termbox.ColorYellow, bg, ln)
}
path := filepath.Join(dir.path, f.Name())
if _, ok := selections[path]; ok {
win.print(0, i, fg, termbox.ColorMagenta, " ")
win.print(lnwidth, i, fg, termbox.ColorMagenta, " ")
} else if cp, ok := saves[path]; ok {
if cp {
win.print(0, i, fg, termbox.ColorYellow, " ")
win.print(lnwidth, i, fg, termbox.ColorYellow, " ")
} else {
win.print(0, i, fg, termbox.ColorRed, " ")
win.print(lnwidth, i, fg, termbox.ColorRed, " ")
}
}
@ -321,7 +348,7 @@ func (win *win) printDir(dir *dir, selections map[string]int, saves map[string]b
s = append(s, ' ')
win.print(1, i, fg, bg, string(s))
win.print(lnwidth+1, i, fg, bg, string(s))
}
}