diff --git a/.gitignore b/.gitignore index 27d1535..b5e8157 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.java +.* +*.txt diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..2bc084e --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -xe + +go build -o gls main.go diff --git a/gls b/gls new file mode 100755 index 0000000..15526cd Binary files /dev/null and b/gls differ diff --git a/go-ls b/go-ls deleted file mode 100755 index 6c21ee2..0000000 Binary files a/go-ls and /dev/null differ diff --git a/main.go b/main.go index ced6b83..2b29b2f 100644 --- a/main.go +++ b/main.go @@ -11,13 +11,14 @@ import ( ) func usage() { + //TODO: Fill this out fmt.Fprintf(os.Stderr, "Usage:\n") os.Exit(1) } -func formatFileSize(fi fs.FileInfo) (size string) { - switch fileSizeFloat := float64(fi.Size()); { - +func FormatFileSize(fi fs.FileInfo) (size string) { + fileSizeFloat := float64(fi.Size()) + switch { case fileSizeFloat > (1024 * 1024 * 1024): //GB fileSizeFloat /= (1024 * 1024 * 1024) size = strconv.FormatFloat(fileSizeFloat, 'f', 1, 64) @@ -42,7 +43,7 @@ func formatFileSize(fi fs.FileInfo) (size string) { } } -func getFileMod(fi fs.FileInfo) (mod string) { +func GetFileMod(fi fs.FileInfo) (mod string) { //day month short time HH:MM day := strconv.Itoa(fi.ModTime().Day()) month := fi.ModTime().Month().String() @@ -68,10 +69,14 @@ func PrintHeaders() { headersOutput.Printf("%11s\n", "Name") } +func GetDir() { + +} + func main() { var flagNoColor = flag.Bool("no-colour", false, "Disable color output") - var flagNoList = flag.Bool("no-l", false, "Disable ls -l output") - var dir string + var flagEnableL = flag.Bool("l", false, "Enable ls -l output") + var flagEnableA = flag.Bool("a", true, "Enable ls -a output") flag.Parse() @@ -79,52 +84,48 @@ func main() { color.NoColor = true } - dirOutput := color.New(color.FgCyan, color.Bold) - fileOutput := color.New(color.FgWhite, color.Bold) - - if len(os.Args) == 1 { - dir = "." - } else { - dir = os.Args[1] + if *flagEnableL { + PrintHeaders() } - files, err := os.ReadDir(dir) + dirOutput := color.New(color.FgCyan, color.Bold) + fileOutput := color.New(color.FgWhite, color.Bold) + files, err := os.ReadDir(".") if err != nil { - usage() - } - if !*flagNoList { - PrintHeaders() + fmt.Fprintf(os.Stderr, "%s\n", err) } for _, file := range files { fileName := file.Name() - fileType := file.Type() - dirSize := "-" + dirDash := "-" fileSize := "" fileModTime := "" fi, err := os.Stat(fileName) if err != nil { - usage() + fmt.Fprintf(os.Stderr, "%s\n", err) } - fileSize = formatFileSize(fi) - fileModTime = getFileMod(fi) - if !*flagNoList { - if file.IsDir() { - dirOutput.Printf("%s %7s %7s\t%s\n", fileType, dirSize, fileModTime, fileName) //leave this + fileSize = FormatFileSize(fi) + fileModTime = GetFileMod(fi) + fileType := fi.Mode() + + if *flagEnableL { //PRINT JUST FILE FORMAT + if file.IsDir() && (*flagEnableA && file.Name()[:1] == ".") { + dirOutput.Printf("%s ", fileName) } else { - fmt.Printf("%7s %7s %4s", fileType, fileSize, fileModTime) - fileOutput.Printf("\t%s\n", fileName) + fileOutput.Printf("%s ", fileName) } - } else { - if file.IsDir() { - dirOutput.Printf("%s\n", fileName) + + } else { //PRINT LIST FORMAT + if file.IsDir() && (*flagEnableA && file.Name()[:1] == ".") { //print -l + dirOutput.Printf("%s %7s %7s\t%s\n", fileType, dirDash, fileModTime, fileName) } else { - fileOutput.Printf("%s\n", fileName) + fmt.Printf("%7s %7s %4s", fileType, fileSize, fileModTime) + fileOutput.Printf("\t%s\n", fileName) } } - } + fmt.Println() }