Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Option to change look of cursors in parent dirs, rename an option. #1106

Merged
merged 2 commits into from
Feb 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion complete.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ var (
"autoquit",
"noautoquit",
"autoquit!",
"cursorfmt",
"cursoractivefmt",
"cursorparentfmt",
"cursorpreviewfmt",
"dircache",
"nodircache",
Expand Down
14 changes: 9 additions & 5 deletions doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ The following options can be used to customize the behavior of lf:
anchorfind bool (default on)
autoquit bool (default off)
cleaner string (default '')
cursorfmt string (default "\033[7m")
cursoractivefmt string (default "\033[7m")
cursorparentfmt string (default "\033[7m")
cursorpreviewfmt string (default "\033[4m")
dircache bool (default on)
dircounts bool (default off)
Expand Down Expand Up @@ -608,15 +609,18 @@ This file is called if previewing is enabled, the previewer is set, and the prev
Five arguments are passed to the file, (1) current file name, (2) width, (3) height, (4) horizontal position, and (5) vertical position of preview pane respectively.
Preview clearing is disabled when the value of this option is left empty.

cursorfmt string (default "\033[7m")
cursoractivefmt string (default "\033[7m")
cursorparentfmt string (default "\033[7m")
cursorpreviewfmt string (default "\033[4m")

Format strings for highlighting the cursor.
`cursorpreviewfmt` applies in panes that preview directories, and `cursorfmt` applies in all other panes.
`cursoractivefmt` applies in the current directory pane,
`cursorparentfmt` applies in panes that show parents of the current directory,
and `cursorpreviewfmt` applies in panes that preview directories.

The default is to make the normal cursor inverted and the preview cursor underlined.
The default is to make the active cursor and the parent directory cursor inverted. The preview cursor is underlined.

Some other possibilities to consider for the preview cursor: an empty string for no cursor, "\033[7;2m" for dimmed inverted text (visibility varies by terminal), "\033[7;90m" for inverted text with grey (aka "brightblack") background.
Some other possibilities to consider for the preview or parent cursors: an empty string for no cursor, "\033[7;2m" for dimmed inverted text (visibility varies by terminal), "\033[7;90m" for inverted text with grey (aka "brightblack") background.

If the format string contains the characters `%s`, it is interpreted as a format string for `fmt.Sprintf`. Such a string should end with the terminal reset sequence.
For example, "\033[4m%s\033[0m" has the same effect as "\033[4m".
Expand Down
23 changes: 14 additions & 9 deletions docstring.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions eval.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ func (e *setExpr) eval(app *app, args []string) {
gOpts.autoquit = true
case "noautoquit":
gOpts.autoquit = false
case "cursorfmt":
gOpts.cursorfmt = e.val
case "cursoractivefmt":
gOpts.cursoractivefmt = e.val
case "cursorparentfmt":
gOpts.cursorparentfmt = e.val
case "cursorpreviewfmt":
gOpts.cursorpreviewfmt = e.val
case "autoquit!":
Expand Down
12 changes: 7 additions & 5 deletions lf.1
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ The following options can be used to customize the behavior of lf:
anchorfind bool (default on)
autoquit bool (default off)
cleaner string (default '')
cursorfmt string (default "\e033[7m")
cursoractivefmt string (default "\e033[7m")
cursorparentfmt string (default "\e033[7m")
cursorpreviewfmt string (default "\e033[4m")
dircache bool (default on)
dircounts bool (default off)
Expand Down Expand Up @@ -750,15 +751,16 @@ Automatically quit server when there are no clients left connected.
Set the path of a cleaner file. The file should be executable. This file is called if previewing is enabled, the previewer is set, and the previously selected file had its preview cache disabled. Five arguments are passed to the file, (1) current file name, (2) width, (3) height, (4) horizontal position, and (5) vertical position of preview pane respectively. Preview clearing is disabled when the value of this option is left empty.
.PP
.EX
cursorfmt string (default "\e033[7m")
cursoractivefmt string (default "\e033[7m")
cursorparentfmt string (default "\e033[7m")
cursorpreviewfmt string (default "\e033[4m")
.EE
.PP
Format strings for highlighting the cursor. `cursorpreviewfmt` applies in panes that preview directories, and `cursorfmt` applies in all other panes.
Format strings for highlighting the cursor. `cursoractivefmt` applies in the current directory pane, `cursorparentfmt` applies in panes that show parents of the current directory, and `cursorpreviewfmt` applies in panes that preview directories.
.PP
The default is to make the normal cursor inverted and the preview cursor underlined.
The default is to make the active cursor and the parent directory cursor inverted. The preview cursor is underlined.
.PP
Some other possibilities to consider for the preview cursor: an empty string for no cursor, "\e033[7;2m" for dimmed inverted text (visibility varies by terminal), "\e033[7;90m" for inverted text with grey (aka "brightblack") background.
Some other possibilities to consider for the preview or parent cursors: an empty string for no cursor, "\e033[7;2m" for dimmed inverted text (visibility varies by terminal), "\e033[7;90m" for inverted text with grey (aka "brightblack") background.
.PP
If the format string contains the characters `%s`, it is interpreted as a format string for `fmt.Sprintf`. Such a string should end with the terminal reset sequence. For example, "\e033[4m%s\e033[0m" has the same effect as "\e033[4m".
.PP
Expand Down
6 changes: 4 additions & 2 deletions opts.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ type sortType struct {
var gOpts struct {
anchorfind bool
autoquit bool
cursorfmt string
cursoractivefmt string
cursorparentfmt string
cursorpreviewfmt string
dircache bool
dircounts bool
Expand Down Expand Up @@ -91,7 +92,8 @@ func init() {
gOpts.dironly = false
gOpts.dirpreviews = false
gOpts.drawbox = false
gOpts.cursorfmt = "\033[7m"
gOpts.cursoractivefmt = "\033[7m"
gOpts.cursorparentfmt = "\033[7m"
gOpts.cursorpreviewfmt = "\033[4m"
gOpts.globsearch = false
gOpts.icons = false
Expand Down
35 changes: 25 additions & 10 deletions ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -330,10 +330,18 @@ type dirContext struct {
tags map[string]string
}

type dirRole byte

const (
Active dirRole = iota
Parent
Preview
)

type dirStyle struct {
colors styleMap
icons iconMap
previewing bool
colors styleMap
icons iconMap
role dirRole
}

// These colors are not currently customizeable
Expand All @@ -353,12 +361,12 @@ func (win *win) printDir(screen tcell.Screen, dir *dir, context *dirContext, dir
win.print(screen, 2, 0, messageStyle, "permission denied")
return
}
if (dir.loading && len(dir.files) == 0) || (dirStyle.previewing && dir.loading && gOpts.dirpreviews) {
if (dir.loading && len(dir.files) == 0) || (dirStyle.role == Preview && dir.loading && gOpts.dirpreviews) {
win.print(screen, 2, 0, messageStyle, "loading...")
return
}

if dirStyle.previewing && gOpts.dirpreviews && len(gOpts.previewer) > 0 {
if dirStyle.role == Preview && gOpts.dirpreviews && len(gOpts.previewer) > 0 {
// Print previewer result instead of default directory print operation.
st := tcell.StyleDefault
for i, l := range dir.lines {
Expand Down Expand Up @@ -475,10 +483,13 @@ func (win *win) printDir(screen tcell.Screen, dir *dir, context *dirContext, dir

ce := ""
if i == dir.pos {
if dirStyle.previewing {
switch dirStyle.role {
case Active:
ce = gOpts.cursoractivefmt
case Parent:
ce = gOpts.cursorparentfmt
case Preview:
ce = gOpts.cursorpreviewfmt
} else {
ce = gOpts.cursorfmt
}
}
cursorescapefmt := optionToFmtstr(ce)
Expand Down Expand Up @@ -920,9 +931,13 @@ func (ui *ui) draw(nav *nav) {
wins--
}
for i := 0; i < wins; i++ {
role := Parent
if i == wins-1 {
role = Active
}
if dir := ui.dirOfWin(nav, i); dir != nil {
ui.wins[i].printDir(ui.screen, dir, &context,
&dirStyle{colors: ui.styles, icons: ui.icons, previewing: false})
&dirStyle{colors: ui.styles, icons: ui.icons, role: role})
}
}

Expand Down Expand Up @@ -958,7 +973,7 @@ func (ui *ui) draw(nav *nav) {

if curr.IsDir() {
preview.printDir(ui.screen, ui.dirPrev, &context,
&dirStyle{colors: ui.styles, icons: ui.icons, previewing: true})
&dirStyle{colors: ui.styles, icons: ui.icons, role: Preview})
} else if curr.Mode().IsRegular() {
preview.printReg(ui.screen, ui.regPrev)
}
Expand Down