| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Command mc prints in multiple columns.
- //
- // Usage: mc [-] [-N] [file...]
- //
- // Mc splits the input into as many columns as will fit in N
- // print positions. If the output is a tty, the default N is
- // the number of characters in a terminal line; otherwise the
- // default N is 80. Under option - each input line ending in
- // a colon ':' is printed separately.
- package main
- import (
- "github.com/kr/pty"
- "github.com/kr/text/colwriter"
- "io"
- "log"
- "os"
- "strconv"
- )
- func main() {
- var width int
- var flag uint
- args := os.Args[1:]
- for len(args) > 0 && len(args[0]) > 0 && args[0][0] == '-' {
- if len(args[0]) > 1 {
- width, _ = strconv.Atoi(args[0][1:])
- } else {
- flag |= colwriter.BreakOnColon
- }
- args = args[1:]
- }
- if width < 1 {
- _, width, _ = pty.Getsize(os.Stdout)
- }
- if width < 1 {
- width = 80
- }
- w := colwriter.NewWriter(os.Stdout, width, flag)
- if len(args) > 0 {
- for _, s := range args {
- if f, err := os.Open(s); err == nil {
- copyin(w, f)
- f.Close()
- } else {
- log.Println(err)
- }
- }
- } else {
- copyin(w, os.Stdin)
- }
- }
- func copyin(w *colwriter.Writer, r io.Reader) {
- if _, err := io.Copy(w, r); err != nil {
- log.Println(err)
- }
- if err := w.Flush(); err != nil {
- log.Println(err)
- }
- }
|