Compare commits

..

3 commits

Author SHA1 Message Date
Lilian Jónsdóttir e57afe835d make model.header() less gross
model.showHelp() too
2024-07-30 21:30:06 -07:00
Lilian Jónsdóttir cf82990925 update readme to be more inline with manpage 2024-07-30 21:07:48 -07:00
Lilian Jónsdóttir a6a62f74d1 add package commands to justfile
and remove the old windows binary boilerplate I had forgotten about
2024-07-30 21:06:32 -07:00
5 changed files with 126 additions and 38 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
bin/
dist/

View file

@ -15,15 +15,102 @@ Run with no command and only filename(s) as argument(s) to skip displaying files
Files are displayed in an interactive table, allowing them to be sorted, filtered, and selectively operated on.
### trash / tr
Find files on the filesystem based on the filter flags and any filename args.
#### flags
*--recursive*, *-r*
operate on files recursively
*--work-dir* dir, *-w* dir
operate on files in this directory
*--hidden*, *-h*
operate on hidden files
### list / ls
Find files in the trash based on the filter flags and any filename args.
#### flags
*--non-interactive*, *-n*
list files and quit
*--original-path* dir, *-O* dir
list files trashed from this directory
### restore / re
Find files in the trash based on the filter flags and any filename args.
#### flags
*--all*, *-a*
operate on all files in trash
*--original-path* dir, *-O* dir
restore files trashed from this directory
### clean / cl
Find files in the trash based on the filter flags and any filename args.
See gt(1) or `gt --help` for more in depth information on all command line flags.
#### flags
*--all*, *-a*
operate on all files in trash
*--original-path* dir, *-O* dir
remove files trashed from this directory
## Flags
### Global flags
*--confirm*, *-c*
ask for confirmation before executing any action
*--log* level, *-l* level
set log level
### Filter flags (usable with all commands)
*--match* pattern, *-m* pattern
operate on files matching regex pattern
*--glob* pattern, *-m* pattern
operate on files matching glob
*--not-match* pattern, *-M* pattern
operate on files not matching regex pattern
*--not-glob* pattern, *-G* pattern
operate on files not matching glob
*--on* date, *-O* date
operate on files modified on date
*--before* date, *-B* date
operate on files modified before date
*--after* date, *-A* date
operate on files modified after date
*--files-only*, *-F*
operate on files only
*--dirs-only*, *-D*
operate on directories only
*--min-size* size, *-N* size
operate on files larger than size
*--max-size* size, *-X* size
operate on files smaller than size
*--mode* mode, *-x* mode
operate on files matching mode mode
See also gt(1) or `gt --help`.

View file

@ -51,7 +51,7 @@ _flags_:
operate on files recursively
*--work-dir* dir, *-w* dir
operate on files in this `DIRECTORY`
operate on files in this directory
*--hidden*, *-h*
operate on hidden files

View file

@ -326,19 +326,14 @@ func (m model) showHelp() string {
if !m.readonly {
if m.mode != modes.Interactive {
keys = append([]string{
styleKey(m.keys.doit),
}, keys...)
keys = append([]string{styleKey(m.keys.doit)}, keys...)
}
keys = append([]string{
styleKey(m.keys.mark),
}, keys...)
keys = append([]string{styleKey(m.keys.mark)}, keys...)
}
return strings.Join(keys, darkesttext.Render(" • "))
}
func (m model) header() string {
// TODO: clean this ugly thing up
var (
right, left string
spacerWidth int
@ -355,35 +350,32 @@ func (m model) header() string {
styleKey(m.keys.clfl),
styleKey(m.keys.apfl),
}
dot = darkesttext.Render("•")
wideDot = darkesttext.Render(" • ")
dot = darkesttext.Render("•")
wideDot = darkesttext.Render(" • ")
keysFmt = strings.Join(keys, wideDot)
selectFmt = strings.Join(selectKeys, wideDot)
filterFmt = strings.Join(filterKeys, wideDot)
)
right = " " // to offset from the table border
switch m.mode {
case modes.Interactive:
right += strings.Join(keys, wideDot)
default:
right += m.mode.String()
if m.workdir != "" {
right += fmt.Sprintf(" in %s", dirs.UnExpand(m.workdir, ""))
}
}
right += fmt.Sprintf(" %s %s", dot, strings.Join(selectKeys, wideDot))
left = fmt.Sprintf("%d/%d %s %s", len(m.selected), len(m.fltrfiles), dot, humanize.Bytes(uint64(m.selectsize)))
if m.mode == modes.Listing {
title := "Showing"
switch {
case m.filtering:
right = fmt.Sprintf(" Filtering %s %s", dot, filterFmt)
case m.mode == modes.Interactive:
right = fmt.Sprintf(" %s %s %s", keysFmt, dot, selectFmt)
left = fmt.Sprintf("%d/%d %s %s", len(m.selected), len(m.fltrfiles), dot, humanize.Bytes(uint64(m.selectsize)))
case m.mode == modes.Listing:
var filtered string
if m.filter != "" || m.filtering {
title += " (filtered)"
filtered = " (filtered)"
}
right = fmt.Sprintf(" %s %d files in trash", title, len(m.fltrfiles))
left = ""
}
if m.filtering {
right = fmt.Sprintf(" Filtering %s %s", dot, strings.Join(filterKeys, wideDot))
right = fmt.Sprintf(" Showing%s %d files in trash", filtered, len(m.fltrfiles))
default:
var wd string
if m.workdir != "" {
wd = " in " + dirs.UnExpand(m.workdir, "")
}
right = fmt.Sprintf(" %s%s %s %s", m.mode.String(), wd, dot, selectFmt)
left = fmt.Sprintf("%d/%d %s %s", len(m.selected), len(m.fltrfiles), dot, humanize.Bytes(uint64(m.selectsize)))
}
// offset of 2 again because of table border

View file

@ -1,7 +1,10 @@
binary := "gt"
version := "0.0.1"
build_dir := "bin"
dist_dir := "dist"
cmd := "."
output := "." / build_dir / binary
dist := "." / dist_dir / binary
# do the thing
default: test check install
@ -10,9 +13,12 @@ default: test check install
build:
go build -o {{output}} {{cmd}}
# build windows binary
build-windows:
GOOS=windows GOARCH=amd64 go build -o {{output}}.exe {{cmd}}
package:
go build -o {{binary}}
distrobox enter alpine -- go build -o {{binary}}-musl {{cmd}}
tar cafv {{dist_dir}}/{{binary}}-{{version}}-x86_64.tar.gz {{binary}} README.md LICENSE
tar cafv {{dist_dir}}/{{binary}}-{{version}}-x86_64-musl.tar.gz {{binary}}-musl README.md LICENSE
rm {{binary}} {{binary}}-musl
# run from source
run:
@ -37,7 +43,9 @@ install-man:
# clean up after yourself
clean:
rm {{output}}
-rm {{output}}
-rm {{output}}-musl
-rm {{dist_dir}}/*
# run go tests
test: