Skip to content

Commit 179dc58

Browse files
committed
Use pager for commands expected to return large output
1 parent e0c025c commit 179dc58

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

cmd/tags.go

+22-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cmd
22

33
import (
4-
"fmt"
4+
"log"
5+
6+
"github.com/msp301/zb/pager"
57
"github.com/spf13/cobra"
68
)
79

@@ -15,15 +17,27 @@ var tagsCmd = &cobra.Command{
1517
searchTag = args[0]
1618
}
1719

18-
if connections, err := cmd.Flags().GetBool("connections"); err == nil && connections {
19-
for _, tagConnection := range book().TagConnections(searchTag) {
20-
fmt.Printf("%d %s\n", tagConnection.Connections, tagConnection.Tag)
21-
}
22-
return
20+
pager, err := pager.Open()
21+
if err != nil {
22+
log.Fatal(err)
2323
}
2424

25-
for _, tag := range book().Tags(searchTag) {
26-
fmt.Println(tag)
25+
go func() {
26+
defer pager.Close()
27+
if connections, err := cmd.Flags().GetBool("connections"); err == nil && connections {
28+
for _, tagConnection := range book().TagConnections(searchTag) {
29+
pager.Writef("%d %s\n", tagConnection.Connections, tagConnection.Tag)
30+
}
31+
return
32+
}
33+
34+
for _, tag := range book().Tags(searchTag) {
35+
pager.Writeln(tag)
36+
}
37+
}()
38+
39+
if err := pager.Wait(); err != nil {
40+
log.Fatal(err)
2741
}
2842
},
2943
}

cmd/util.go

+25-11
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/msp301/zb/bookshelf"
88
"github.com/msp301/zb/graph"
99
"github.com/msp301/zb/notebook"
10+
"github.com/msp301/zb/pager"
1011
"github.com/msp301/zb/parser"
1112
"github.com/spf13/viper"
1213
)
@@ -35,19 +36,32 @@ func render(vertices []graph.Vertex) {
3536
}
3637

3738
func renderResults(results []notebook.Result) {
38-
for _, result := range results {
39-
switch val := result.Value.(type) {
40-
case graph.Vertex:
41-
switch vertex := val.Properties["Value"].(type) {
42-
case parser.Note:
43-
if len(result.Context) > 0 {
44-
fmt.Printf("%s:%d: - %s\n", vertex.File, result.Line, result.Context)
45-
} else {
46-
fmt.Printf("%s:%d: - %s\n", vertex.File, vertex.Start, vertex.Title)
39+
pager, err := pager.Open()
40+
if err != nil {
41+
log.Fatal(err)
42+
}
43+
44+
go func() {
45+
defer pager.Close()
46+
47+
for _, result := range results {
48+
switch val := result.Value.(type) {
49+
case graph.Vertex:
50+
switch vertex := val.Properties["Value"].(type) {
51+
case parser.Note:
52+
if len(result.Context) > 0 {
53+
pager.Writef("%s:%d: - %s\n", vertex.File, result.Line, result.Context)
54+
} else {
55+
pager.Writef("%s:%d: - %s\n", vertex.File, vertex.Start, vertex.Title)
56+
}
57+
case string:
58+
pager.Writef("%s\n", vertex)
4759
}
48-
case string:
49-
fmt.Printf("%s\n", vertex)
5060
}
5161
}
62+
}()
63+
64+
if err := pager.Wait(); err != nil {
65+
log.Fatal(err)
5266
}
5367
}

pager/pager.go

+4
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,7 @@ func (pager *Pager) Wait() error {
7070
func (pager *Pager) Writef(format string, args ...interface{}) (int, error) {
7171
return fmt.Fprintf(pager.pipe, format, args...)
7272
}
73+
74+
func (pager *Pager) Writeln(line string) (int, error) {
75+
return fmt.Fprintln(pager.pipe, line)
76+
}

0 commit comments

Comments
 (0)