diff --git a/README.md b/README.md index cc2cb17..b312f91 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ listed in [FORK.md](https://gitlab.com/tslocum/cview/blob/master/FORK.md). `ssh cview.rocketnine.space -p 20000` -[![Recording of presentation demo](https://gitlab.com/tslocum/cview/-/raw/master/cview.gif)](https://gitlab.com/tslocum/cview/tree/master/demos/presentation) +[![Recording of presentation demo](https://gitlab.com/tslocum/cview/-/raw/master/cview.svg)](https://gitlab.com/tslocum/cview/tree/master/demos/presentation) Additional examples are listed on [pkg.go.dev](https://pkg.go.dev/gitlab.com/tslocum/cview?tab=importedby). diff --git a/cview.gif b/cview.gif deleted file mode 100644 index 0583d7b..0000000 Binary files a/cview.gif and /dev/null differ diff --git a/cview.svg b/cview.svg new file mode 100644 index 0000000..7d0a9b5 --- /dev/null +++ b/cview.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + Start ║ Introduction ║ Colors ║ TextView 1 ║ TextView 2 ║ InputField ║ Slider ║ Form ║ Table ║ TreeView ║ Flex ║ Grid ║ Window ║ End │ ======= === === === ======== === === === === === === === === === === === === === === === ====== === === === === ====== === === =========== ======= == === ======== ==== ==== Terminal-based user interface toolkit Navigate with your keyboard or mouse. Next slide: Ctrl-N Previous: Ctrl-P Exit: Ctrl-C (1) A Go package for terminal based UIs with a special focus on rich interactive widgets (2) Based on github.com/gdamore/tcell Like termbox but better (see tcell docs) (3) Designed to be simple "Hello world" is 5 lines of code (4) Good for data entry For charts, use "termui" - for low-level views, use "gocui" - ... (5) Supports context menus Right click on one of these items or press Alt+Enter (6) Extensive documentation Demo code is available for each widget (1) A Go package for terminal based UIs (2) Based on github.com/gdamore/tcell (3) Designed to be simple (4) Good for data entry (5) Supports context menus (6) Extensive documentation ╔════════A colorful colorful title═════════╗ ║You can use color tags almost everywhere ║to partially change the color of a string.║ ║Simply put a color name or hex string in ║square brackets to change the following ║characters' color. ║Here is an example. ║The tags look like this: [cyan] [blue:yellow:u] [#00ff00] ╚══════════════════════════════════════════╝ func main() { app := cview.NewApplication() textView := cview.NewTextView(). SetTextColor(tcell.ColorYellow.TrueColor()). SetScrollable(false). SetChangedFunc(func() { app.Draw() }) ╔══TextView implements io.Writer═══╗ go func() { 15 16 17 18 19 20 21 22 23 24 25 ▒║ var n int 26 27 28 29 30 31 32 33 34 35 36 ▒║ for { 37 38 39 40 41 42 43 44 45 46 47 ▒║ n++ 48 49 50 51 52 53 54 55 56 57 58 ▒║ fmt.Fprintf(textView, "%d ", n) 59 60 61 62 63 64 65 66 67 68 69 ▒║ time.Sleep(200 * time.Millisecond) 70 71 72 73 74 75 76 77 78 79 80 ▒║ } 81 82 83 84 85 86 87 88 89 90 91 ▒║ }() 92 93 94 95 96 97 98 99 100 101 1▒║ app.SetRoot(textView, true). 02 103 104 105 106 107 108 109 11▒║ Run() 0 111 112 113 114 115 116 117 118▒║ } 119 120 121 122 ╚══════════════════════════════════╝ 119 120 121 122 123 124 119 120 121 122 123 124 125 126 26 27 28 29 30 31 32 33 34 35 36 ▒║ var n int 37 38 39 40 41 42 43 44 45 46 47 ▒║ for { 48 49 50 51 52 53 54 55 56 57 58 ▒║ n++ 59 60 61 62 63 64 65 66 67 68 69 ▒║ fmt.Fprintf(textView, "%d ", n) 70 71 72 73 74 75 76 77 78 79 80 ▒║ time.Sleep(200 * time.Millisecond) 81 82 83 84 85 86 87 88 89 90 91 ▒║ } 92 93 94 95 96 97 98 99 100 101 1▒║ }() 02 103 104 105 106 107 108 109 11▒║ app.SetRoot(textView, true). 0 111 112 113 114 115 116 117 118▒║ Run() 119 120 121 122 123 124 125 126 ▒║ } 127 128 127 128 129 130 127 128 129 130 131 132 127 128 129 130 131 132 133 134 37 38 39 40 41 42 43 44 45 46 47 ▒║ var n int 48 49 50 51 52 53 54 55 56 57 58 ▒║ for { 59 60 61 62 63 64 65 66 67 68 69 ▒║ n++ 70 71 72 73 74 75 76 77 78 79 80 ▒║ fmt.Fprintf(textView, "%d ", n) 81 82 83 84 85 86 87 88 89 90 91 ▒║ time.Sleep(200 * time.Millisecond) 92 93 94 95 96 97 98 99 100 101 1▒║ } 02 103 104 105 106 107 108 109 11▒║ }() 0 111 112 113 114 115 116 117 118▒║ app.SetRoot(textView, true). 119 120 121 122 123 124 125 126 ▒║ Run() 127 128 129 130 131 132 133 134 1▒║ } 35 136 35 136 137 138 35 136 137 138 139 140 35 136 137 138 139 140 141 142 48 49 50 51 52 53 54 55 56 57 58 ▒║ var n int 59 60 61 62 63 64 65 66 67 68 69 ▒║ for { 70 71 72 73 74 75 76 77 78 79 80 ▒║ n++ 81 82 83 84 85 86 87 88 89 90 91 ▒║ fmt.Fprintf(textView, "%d ", n) 92 93 94 95 96 97 98 99 100 101 1▒║ time.Sleep(200 * time.Millisecond) 02 103 104 105 106 107 108 109 11▒║ } 0 111 112 113 114 115 116 117 118▒║ }() 119 120 121 122 123 124 125 126 ▒║ app.SetRoot(textView, true). 127 128 129 130 131 132 133 134 1▒║ Run() 35 136 137 138 139 140 141 142 14▒║ } 3 144 3 144 145 146 3 144 145 146 147 148 3 144 145 146 147 148 149 150 59 60 61 62 63 64 65 66 67 68 69 ▒║ var n int 70 71 72 73 74 75 76 77 78 79 80 ▒║ for { 81 82 83 84 85 86 87 88 89 90 91 ▒║ n++ 92 93 94 95 96 97 98 99 100 101 1▒║ fmt.Fprintf(textView, "%d ", n) 02 103 104 105 106 107 108 109 11▒║ time.Sleep(200 * time.Millisecond) 0 111 112 113 114 115 116 117 118▒║ } 119 120 121 122 123 124 125 126 ▒║ }() 127 128 129 130 131 132 133 134 1▒║ app.SetRoot(textView, true). 35 136 137 138 139 140 141 142 14▒║ Run() 3 144 145 146 147 148 149 150 151▒║ } 152 152 153 154 152 153 154 155 156 152 153 154 155 156 157 158 70 71 72 73 74 75 76 77 78 79 80 ▒║ var n int 81 82 83 84 85 86 87 88 89 90 91 ▒║ for { 92 93 94 95 96 97 98 99 100 101 1▒║ n++ 02 103 104 105 106 107 108 109 11▒║ fmt.Fprintf(textView, "%d ", n) 0 111 112 113 114 115 116 117 118▒║ time.Sleep(200 * time.Millisecond) 119 120 121 122 123 124 125 126 ▒║ } 127 128 129 130 131 132 133 134 1▒║ }() 35 136 137 138 139 140 141 142 14▒║ app.SetRoot(textView, true). 3 144 145 146 147 148 149 150 151▒║ Run() 152 153 154 155 156 157 158 159 ▒║ } 160 160 161 162 160 161 162 163 164 160 161 162 163 164 165 166 81 82 83 84 85 86 87 88 89 90 91 ▒║ var n int 92 93 94 95 96 97 98 99 100 101 1▒║ for { 02 103 104 105 106 107 108 109 11▒║ n++ 0 111 112 113 114 115 116 117 118▒║ fmt.Fprintf(textView, "%d ", n) 119 120 121 122 123 124 125 126 ▒║ time.Sleep(200 * time.Millisecond) 127 128 129 130 131 132 133 134 1▒║ } 35 136 137 138 139 140 141 142 14▒║ }() 3 144 145 146 147 148 149 150 151▒║ app.SetRoot(textView, true). 152 153 154 155 156 157 158 159 ▒║ Run() 160 161 162 163 164 165 166 167 1▒║ } 68 68 169 170 68 169 170 171 172 ╔═════════════════════════TextView output═════════════════════════╗┌──────────────────────────Buffer content──────────────────────────┐package main ║│[green]package[white] main ▓│ ▒║│ ░│import ( ▒║│[green]import[white] ( ░│"strconv" ▒║│ [red]"strconv"[white] ░│"github.com/gdamore/tcell/v2" ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│"gitlab.com/tslocum/cview" ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│║) ▒║│) ░│func main() { ▒║│[green]func[white] [yellow]main[white]() { ░│║ textView := cview.NewTextView() ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ textView.SetDynamicColors(true). ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│SetWrap(false). ▒║│ [yellow]SetWrap[white](false). ░│SetRegions(true). ▒║│ [yellow]SetRegions[white](true). ░│SetDoneFunc(func(key tcell.Key) { ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│║ highlights := textView.GetHighlights() ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│║ hasHighlights := len(highlights) > 0 ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│ switch key { ▒║│ [yellow]switch[white] key { ░│case tcell.KeyEnter: ▒║│ [yellow]case[white] tcell.KeyEnter: ░│if hasHighlights { ▒║│ [yellow]if[white] hasHighlights { ░│║ textView.Highlight() ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│║ } else { ▒║│ } [yellow]else[white] { ░│║ textView.Highlight("0"). ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│ScrollToHighlight() ▒║│ [yellow]ScrollToHighlight[white]() ░│║ } ▒║│ } ░│case tcell.KeyTab: ▒║│ [yellow]case[white] tcell.KeyTab: ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ next := (current + 1) % 9 ▒║│ next := (current + [red]1[white]) % [red]9 ░│╚═════════════════════════════════════════════════════════════════╝└──────────────────────────────────────────────────────────────────┘ ▒║│[green]package[white] main ▓│"github.com/gdamore/tcell/v2" ▒║│ ░│"gitlab.com/tslocum/cview" ▒║│[green]import[white] ( ░│║) ▒║│ [red]"strconv"[white] ░│func main() { ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│║ textView := cview.NewTextView() ║│ [red]"gitlab.com/tslocum/cview"[white] ░│║ textView.SetDynamicColors(true). ▒║│) ░│SetWrap(false). ▒║│ ░│SetRegions(true). ▒║│[green]func[white] [yellow]main[white]() { ░│SetDoneFunc(func(key tcell.Key) { ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ highlights := textView.GetHighlights() ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│║ hasHighlights := len(highlights) > 0 ▒║│ [yellow]SetWrap[white](false). ░│ switch key { ▒║│ [yellow]SetRegions[white](true). ░│case tcell.KeyEnter: ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│if hasHighlights { ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│║ textView.Highlight() ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│║ } else { ▒║│ [yellow]switch[white] key { ░│║ textView.Highlight("0"). ▒║│ [yellow]case[white] tcell.KeyEnter: ░│ScrollToHighlight() ▒║│ [yellow]if[white] hasHighlights { ░│║ } ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│case tcell.KeyTab: ▒║│ } [yellow]else[white] { ░│if hasHighlights { ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ [yellow]ScrollToHighlight[white]() ░│║ next := (current + 1) % 9 ▒║│ } ░│ textView.Highlight(strconv.Itoa(next)). ▒║│ [yellow]case[white] tcell.KeyTab: ░│║ } ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│case tcell.KeyBacktab: ▒║│ next := (current + [red]1[white]) % [red]9 ░│"github.com/gdamore/tcell/v2" ▒║│[green]package[white] main ▓│"gitlab.com/tslocum/cview" ▒║│ ░│║) ▒║│[green]import[white] ( ░│ ▒║│ [red]"strconv"[white] ░│func main() { ▒║│ ░│║ textView := cview.NewTextView() ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│║ textView.SetDynamicColors(true). ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│SetWrap(false). ▒║│) ░│SetRegions(true). ║│ ░│SetDoneFunc(func(key tcell.Key) { ▒║│[green]func[white] [yellow]main[white]() { ░│║ highlights := textView.GetHighlights() ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ hasHighlights := len(highlights) > 0 ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│ switch key { ▒║│ [yellow]SetWrap[white](false). ░│case tcell.KeyEnter: ▒║│ [yellow]SetRegions[white](true). ░│if hasHighlights { ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│║ textView.Highlight() ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│║ } else { ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│║ textView.Highlight("0"). ▒║│ [yellow]switch[white] key { ░│ScrollToHighlight() ▒║│ [yellow]case[white] tcell.KeyEnter: ░│║ } ▒║│ [yellow]if[white] hasHighlights { ░│case tcell.KeyTab: ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│if hasHighlights { ▒║│ } [yellow]else[white] { ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│║ next := (current + 1) % 9 ▒║│ [yellow]ScrollToHighlight[white]() ░│ textView.Highlight(strconv.Itoa(next)). ▒║│ } ░│ScrollToHighlight() ▒║│ [yellow]case[white] tcell.KeyTab: ░│case tcell.KeyBacktab: ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│if hasHighlights { ▒║│ next := (current + [red]1[white]) % [red]9 ░│║ textView := cview.NewTextView() ▒║│[green]package[white] main ▓│║ textView.SetDynamicColors(true). ▒║│ ░│SetWrap(false). ▒║│[green]import[white] ( ░│SetRegions(true). ▒║│ [red]"strconv"[white] ░│SetDoneFunc(func(key tcell.Key) { ▒║│ ░│║ highlights := textView.GetHighlights() ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│║ hasHighlights := len(highlights) > 0 ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│ switch key { ▒║│) ░│case tcell.KeyEnter: ▒║│ ░│if hasHighlights { ▒║│[green]func[white] [yellow]main[white]() { ░│║ textView.Highlight() ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ } else { ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│║ textView.Highlight("0"). ▒║│ [yellow]SetWrap[white](false). ░│ScrollToHighlight() ▒║│ [yellow]SetRegions[white](true). ░│║ } ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│case tcell.KeyTab: ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│if hasHighlights { ║│ hasHighlights := [yellow]len[white](highlights) > [re░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ [yellow]switch[white] key { ░│║ next := (current + 1) % 9 ▒║│ [yellow]case[white] tcell.KeyEnter: ░│ textView.Highlight(strconv.Itoa(next)). ▒║│ [yellow]if[white] hasHighlights { ░│ScrollToHighlight() ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│║ } ▒║│ } [yellow]else[white] { ░│case tcell.KeyBacktab: ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│if hasHighlights { ▒║│ [yellow]ScrollToHighlight[white]() ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ } ░│║ next := (current - 1 + 9) % 9 ▒║│ [yellow]case[white] tcell.KeyTab: ░│ScrollToHighlight() ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ } ▒║│ next := (current + [red]1[white]) % [red]9 ░│SetWrap(false). ▒║│[green]package[white] main ▓│SetRegions(true). ▒║│ ░│SetDoneFunc(func(key tcell.Key) { ▒║│[green]import[white] ( ░│║ highlights := textView.GetHighlights() ▒║│ [red]"strconv"[white] ░│║ hasHighlights := len(highlights) > 0 ▒║│ ░│ switch key { ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│case tcell.KeyEnter: ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│if hasHighlights { ▒║│) ░│║ textView.Highlight() ▒║│ ░│║ } else { ▒║│[green]func[white] [yellow]main[white]() { ░│║ textView.Highlight("0"). ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│ScrollToHighlight() ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│║ } ▒║│ [yellow]SetWrap[white](false). ░│case tcell.KeyTab: ▒║│ [yellow]SetRegions[white](true). ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│║ next := (current + 1) % 9 ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│ textView.Highlight(strconv.Itoa(next)). ▒║│ [yellow]switch[white] key { ░│║ } ║│ [yellow]if[white] hasHighlights { ░│case tcell.KeyBacktab: ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│║ next := (current - 1 + 9) % 9 ▒║│ [yellow]ScrollToHighlight[white]() ░│║ } ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ }) ▒║│ next := (current + [red]1[white]) % [red]9 ░│SetDoneFunc(func(key tcell.Key) { ▒║│[green]package[white] main ▓│║ highlights := textView.GetHighlights() ▒║│ ░│║ hasHighlights := len(highlights) > 0 ▒║│[green]import[white] ( ░│ switch key { ▒║│ [red]"strconv"[white] ░│if hasHighlights { ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│║ textView.Highlight() ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│║ } else { ▒║│) ░│║ textView.Highlight("0"). ▒║│ ░│ScrollToHighlight() ▒║│[green]func[white] [yellow]main[white]() { ░│║ } ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│case tcell.KeyTab: ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│if hasHighlights { ▒║│ [yellow]SetWrap[white](false). ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ [yellow]SetRegions[white](true). ░│║ next := (current + 1) % 9 ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│ textView.Highlight(strconv.Itoa(next)). ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│ScrollToHighlight() ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│║ } ▒║│ [yellow]switch[white] key { ░│case tcell.KeyBacktab: ▒║│ [yellow]case[white] tcell.KeyEnter: ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│║ next := (current - 1 + 9) % 9 ▒║│ } [yellow]else[white] { ░│ textView.Highlight(strconv.Itoa(next)). ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│ScrollToHighlight() ║│ [yellow]ScrollToHighlight[white]() ░│║ } ▒║│ [yellow]case[white] tcell.KeyTab: ░│║ }) ▒║│ [yellow]if[white] hasHighlights { ░│║ fmt.Fprint(textView, content) ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ cview.NewApplication(). ▒║│ next := (current + [red]1[white]) % [red]9 ░│ switch key { ▒║│[green]package[white] main ▓│if hasHighlights { ▒║│[green]import[white] ( ░│║ textView.Highlight() ▒║│ [red]"strconv"[white] ░│║ } else { ▒║│ ░│║ textView.Highlight("0"). ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│ScrollToHighlight() ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│║ } ▒║│) ░│case tcell.KeyTab: ▒║│ ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ next := (current + 1) % 9 ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│ textView.Highlight(strconv.Itoa(next)). ▒║│ [yellow]SetWrap[white](false). ░│case tcell.KeyBacktab: ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│if hasHighlights { ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│║ next := (current - 1 + 9) % 9 ▒║│ [yellow]case[white] tcell.KeyEnter: ░│║ } ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│║ }) ▒║│ [yellow]ScrollToHighlight[white]() ░│║ fmt.Fprint(textView, content) ▒║│ } ░│║ cview.NewApplication(). ▒║│ [yellow]case[white] tcell.KeyTab: ░│SetRoot(textView, true). ▒║│ [yellow]if[white] hasHighlights { ░│Run() ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║} ║│ next := (current + [red]1[white]) % [red]9 ░│SetRegions(true). ▒║│[green]package[white] main ▓│║ highlights := textView.GetHighlights() ▒║│[green]import[white] ( ░│║ hasHighlights := len(highlights) > 0 ▒║│ [red]"strconv"[white] ░│ switch key { ▒║│ ░│case tcell.KeyEnter: ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│if hasHighlights { ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│║ textView.Highlight() ▒║│) ░│║ textView.Highlight("0"). ▒║│[green]func[white] [yellow]main[white]() { ░│ScrollToHighlight() ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│║ } ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│case tcell.KeyTab: ▒║│ [yellow]SetWrap[white](false). ░│if hasHighlights { ▒║│ [yellow]SetRegions[white](true). ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│║ next := (current + 1) % 9 ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│ textView.Highlight(strconv.Itoa(next)). ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│ScrollToHighlight() ▒║│ [yellow]switch[white] key { ░│║ } ▒║│ [yellow]case[white] tcell.KeyEnter: ░│case tcell.KeyBacktab: ▒║│ [yellow]if[white] hasHighlights { ░│if hasHighlights { ▒║│ ["3"]textView[""].[yellow]Highlight[white]() ░│║ current, _ := strconv.Atoi(highlights[0]) ║│ } [yellow]else[white] { ░│║ next := (current - 1 + 9) % 9 ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│ textView.Highlight(strconv.Itoa(next)). ▒║│ [yellow]ScrollToHighlight[white]() ░│ScrollToHighlight() ▒║│ } ░│║ } ▒║│ [yellow]case[white] tcell.KeyTab: ░│║ } ▒║│ [yellow]if[white] hasHighlights { ░│║ }) ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ fmt.Fprint(textView, content) ▒║│ next := (current + [red]1[white]) % [red]9 ░│║) ▒║│[green]package[white] main ▓│func main() { ▒║│[green]import[white] ( ░│║ textView := cview.NewTextView() ▒║│ [red]"strconv"[white] ░│SetWrap(false). ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│SetRegions(true). ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│SetDoneFunc(func(key tcell.Key) { ▒║│) ░│║ hasHighlights := len(highlights) > 0 ▒║│[green]func[white] [yellow]main[white]() { ░│ switch key { ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│case tcell.KeyEnter: ║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│║ textView.Highlight() ▒║│ [yellow]SetRegions[white](true). ░│║ } else { ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│║ textView.Highlight("0"). ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│case tcell.KeyTab: ▒║│ [yellow]case[white] tcell.KeyEnter: ░│║ next := (current + 1) % 9 ▒║│ } [yellow]else[white] { ░│case tcell.KeyBacktab: ▒║│ [yellow]case[white] tcell.KeyTab: ░│║ next := (current - 1 + 9) % 9 ▒║│ next := (current + [red]1[white]) % [red]9 ░│"gitlab.com/tslocum/cview" ▒║│[green]package[white] main ▓│║) ▒║│ ░│ ▒║│[green]import[white] ( ░│func main() { ▒║│ [red]"strconv"[white] ░│║ textView := cview.NewTextView() ▒║│ ░│║ textView.SetDynamicColors(true). ▒║│ [red]"github.com/gdamore/tcell/v2"[white] ░│SetWrap(false). ▒║│ [red]"gitlab.com/tslocum/cview"[white] ░│SetRegions(true). ▒║│) ░│║ highlights := textView.GetHighlights() ║│[green]func[white] [yellow]main[white]() { ░│║ hasHighlights := len(highlights) > 0 ▒║│ ["0"]textView[""] := cview.[yellow]NewTextView[white]() ░│ switch key { ▒║│ ["1"]textView[""].[yellow]SetDynamicColors[white](true). ░│case tcell.KeyEnter: ▒║│ [yellow]SetWrap[white](false). ░│║ textView.Highlight() ▒║│ [yellow]SetDoneFunc[white]([yellow]func[white](key tcell.░│║ } else { ▒║│ highlights := ["2"]textView[""].[yellow]GetHighlights░│║ textView.Highlight("0"). ▒║│ hasHighlights := [yellow]len[white](highlights) > [re░│case tcell.KeyTab: ▒║│ [yellow]if[white] hasHighlights { ░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ } [yellow]else[white] { ░│║ next := (current + 1) % 9 ▒║│ ["4"]textView[""].[yellow]Highlight[white]([r░│if hasHighlights { ▒║│ current, _ := strconv.[yellow]Atoi[white](hig░│║ current, _ := strconv.Atoi(highlights[0]) ▒║│ next := (current + [red]1[white]) % [red]9 ░│ package main import ( "strconv" "github.com/gdamore/tcell/v2" "gitlab.com/tslocum/cview" ) input := cview.NewInputField(). SetLabel("Enter a number: "). SetAcceptanceFunc( cview.InputFieldInteger, Enter a number: ).SetDoneFunc(func(key tcell.Key) { text := input.GetText() n, _ := strconv.Atoi(text) // We have a number. cview.NewApplication(). SetRoot(input, true). Run() } Enter a number: 42 ).SetDoneFunc(func(key tcell.Key) { "fmt" slider := cview.NewSlider() slider.SetLabel("Volume: 0%") slider.SetChangedFunc(func(key tcell.Key) { label := fmt.Sprintf("Volume: %3d%%", value) Volume: 0% █████████████████ slider.SetLabel(label) }) slider.SetDoneFunc(func(key tcell.Key) { nextSlide() app.SetRoot(slider, true) app.Run() Volume: 10% █████████████████ slider.SetLabel(label) Volume: 20% █████████████████ slider.SetLabel(label) Volume: 30% █████████████████ slider.SetLabel(label) Volume: 40% █████████████████ slider.SetLabel(label) Volume: 50% █████████████████ slider.SetLabel(label) Volume: 60% █████████████████ slider.SetLabel(label) Volume: 70% █████████████████ slider.SetLabel(label) ╔═══════Employee Information═══════╗ form := cview.NewForm(). AddInputField("First name:", "", 20, nil, nil) First name: AddInputField("Last name:", "", 20, nil, nil). AddDropDown("Role:", []string{ Last name: "Engineer", "Manager", Role: Engineer "Administration", }, 0, nil). Password: AddCheckBox("On vacation:", false, nil). AddPasswordField("Password:", "", 10, '*', nil On vacation AddButton("Save", func() { /* Save data */ }). AddButton("Cancel", func() { /* Cancel */ }) Save Cancel cview.NewApplication(). SetRoot(form, true). ╚══════════════════════════════════╝ Run() First name: A AddInputField("Last name:", "", 20, nil, nil). First name: Ag AddInputField("Last name:", "", 20, nil, nil). First name: Age AddInputField("Last name:", "", 20, nil, nil). First name: Agen AddInputField("Last name:", "", 20, nil, nil). First name: Agent AddInputField("Last name:", "", 20, nil, nil). First name: Agent AddInputField("Last name:", "", 20, nil, nil). Last name: "Engineer", Last name: S "Engineer", Last name: Sm "Engineer", Last name: Smi "Engineer", Last name: Smit "Engineer", Last name: Smith "Engineer", Last name: Smith "Engineer", Engineer }, 0, nil). Password: Manager AddCheckBox("On vacation:", false, nil). Administration AddPasswordField("Password:", "", 10, '*', nil Role: Administration "Administration", Password: AddCheckBox("On vacation:", false, nil). Password: * AddCheckBox("On vacation:", false, nil). Password: ** AddCheckBox("On vacation:", false, nil). Password: *** AddCheckBox("On vacation:", false, nil). Password: ***** AddCheckBox("On vacation:", false, nil). Password: ****** AddCheckBox("On vacation:", false, nil). Password: ****** AddCheckBox("On vacation:", false, nil). Save Cancel cview.NewApplication(). (b) Basic table func main() { (s) Table with separator table := cview.NewTable(). (o) Table with borders SetFixed(1, 1) (r) Selectable rows for row := 0; row < 40; row++ { (c) Selectable columns for column := 0; column < 7; column++ { (l) Selectable cells color := tcell.ColorWhite.TrueColor() (n) Navigate if row == 0 { (x) Next slide color = tcell.ColorYellow.TrueColor()░ } else if column == 0 { ┌────────────────────────────────────Table────────────────────────────────────┐ color = tcell.ColorDarkCyan.TrueColor░OrderDate Region Rep Item Units UnitCost Total } 1/6/2017 East Jones Pencil 95 1.99 189.05 ▓│ align := cview.AlignLeft 1/23/2017 Central Kivell Binder 50 19.99 999.50 ░│ if row == 0 { 2/9/2017 Central Jardine Pencil 36 4.99 179.64 ░│ align = cview.AlignCenter 2/26/2017 Central Gill Pen 27 19.99 539.73 ░│ } else if column == 0 || column >= 4 { 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ░│ align = cview.AlignRight 4/1/2017 East Jones Binder 60 4.99 299.40 ░│ } 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ░│ table.SetCell(row, 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ░│ column, 5/22/2017 West Thompson Pencil 32 1.99 63.68 ░│ &cview.TableCell{ 6/8/2017 East Jones Binder 60 8.99 539.40 ░│ Text: "...", 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ░│ Color: color, 7/12/2017 East Howard Binder 29 1.99 57.71 ░│ Align: align, 7/29/2017 East Parent Binder 81 19.99 1,619.19 ░│ }) 8/15/2017 East Jones Pencil 35 4.99 174.65 ░│ } 9/1/2017 Central Smith Desk 2 125.00 250.00 ░│ } 9/18/2017 East Jones Pen Set 16 15.99 255.84 ░│ cview.NewApplication(). 10/5/2017 Central Morgan Binder 28 8.99 251.72 ░│ SetRoot(table, true). 10/22/2017 East Jones Pen 64 8.99 575.36 ░│ Run() └─────────────────────────────────────────────────────────────────────────────┘ (b) Basic table func main() { (s) Table with separator table := cview.NewTable(). (o) Table with borders SetFixed(1, 1) (r) Selectable rows for row := 0; row < 40; row++ { (c) Selectable columns for column := 0; column < 7; column++ { (l) Selectable cells color := tcell.ColorWhite.TrueColor() (n) Navigate if row == 0 { (o) Table with borders SetFixed(1, 1). (r) Selectable rows SetSelectable(true, true) (c) Selectable columns for row := 0; row < 40; row++ { (l) Selectable cells for column := 0; column < 7; column++ { (n) Navigate color := tcell.ColorWhite.TrueColor() (x) Next slide if row == 0 { color = tcell.ColorYellow.TrueColor()░┌────────────────────────────────────Table────────────────────────────────────┐ } else if column == 0 { OrderDate Region Rep Item Units UnitCost Total color = tcell.ColorDarkCyan.TrueColor░ 1/6/2017 East Jones Pencil 95 1.99 189.05 ▓│ } 1/23/2017 Central Kivell Binder 50 19.99 999.50 ░│ align := cview.AlignLeft 2/9/2017 Central Jardine Pencil 36 4.99 179.64 ░│ if row == 0 { 2/26/2017 Central Gill Pen 27 19.99 539.73 ░│ align = cview.AlignCenter 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ░│ } else if column == 0 || column >= 4 { 4/1/2017 East Jones Binder 60 4.99 299.40 ░│ align = cview.AlignRight 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ░│ } 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ░│ table.SetCell(row, 5/22/2017 West Thompson Pencil 32 1.99 63.68 ░│ column, 6/8/2017 East Jones Binder 60 8.99 539.40 ░│ &cview.TableCell{ 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ░│ Text: "...", 7/12/2017 East Howard Binder 29 1.99 57.71 ░│ Color: color, 7/29/2017 East Parent Binder 81 19.99 1,619.19 ░│ Align: align, 8/15/2017 East Jones Pencil 35 4.99 174.65 ░│ NotSelectable: row == 0 || column░ 9/1/2017 Central Smith Desk 2 125.00 250.00 ░│ }) 9/18/2017 East Jones Pen Set 16 15.99 255.84 ░│ } 10/5/2017 Central Morgan Binder 28 8.99 251.72 ░│ } 10/22/2017 East Jones Pen 64 8.99 575.36 ░│ cview.NewApplication(). (l) Selectable cells for column := 0; column < 7; column++ { (n) Navigate color := tcell.ColorWhite.TrueColor() ╔════════════════════════════════════Table════════════════════════════════════╗ } else if column == 0 { OrderDate Region Rep Item Units UnitCost Total color = tcell.ColorDarkCyan.TrueColor░ 1/6/2017 East Jones Pencil 95 1.99 189.05 } 1/23/2017 Central Kivell Binder 50 19.99 999.50 ▒║ align := cview.AlignLeft 2/9/2017 Central Jardine Pencil 36 4.99 179.64 ▒║ if row == 0 { 2/26/2017 Central Gill Pen 27 19.99 539.73 ▒║ align = cview.AlignCenter 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ▒║ } else if column == 0 || column >= 4 { 4/1/2017 East Jones Binder 60 4.99 299.40 ▒║ align = cview.AlignRight 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ▒║ } 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 5/22/2017 West Thompson Pencil 32 1.99 63.68 ▒║ column, 6/8/2017 East Jones Binder 60 8.99 539.40 ▒║ &cview.TableCell{ 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ▒║ Text: "...", 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ Color: color, 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ Align: align, 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ NotSelectable: row == 0 || column░ 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ }) 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ } 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ } 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ cview.NewApplication(). ╚═════════════════════════════════════════════════════════════════════════════╝ 1/6/2017 East Jones Pencil 95 1.99 189.05 } 1/23/2017 Central Kivell Binder 50 19.99 999.50 ▒║ align := cview.AlignLeft 2/9/2017 Central Jardine Pencil 36 4.99 179.64 ▒║ if row == 0 { 2/26/2017 Central Gill Pen 27 19.99 539.73 ▒║ align = cview.AlignCenter 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ▒║ } else if column == 0 || column >= 4 { 4/1/2017 East Jones Binder 60 4.99 299.40 ▒║ align = cview.AlignRight 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ▒║ } 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 5/22/2017 West Thompson Pencil 32 1.99 63.68 ▒║ column, 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ Color: color, 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ }) 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ cview.NewApplication(). 2/26/2017 Central Gill Pen 27 19.99 539.73 ▒║ } 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ▒║ align := cview.AlignLeft 4/1/2017 East Jones Binder 60 4.99 299.40 if row == 0 { 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ▒║ align = cview.AlignCenter 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ } else if column == 0 || column >= 4 { 5/22/2017 West Thompson Pencil 32 1.99 63.68 ▒║ align = cview.AlignRight 6/8/2017 East Jones Binder 60 8.99 539.40 ▒║ } 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ▒║ table.SetCell(row, 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ column, 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ &cview.TableCell{ 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ Text: "...", 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ Color: color, 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ Align: align, 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ NotSelectable: row == 0 || column░10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ }) 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ } 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ } 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ cview.NewApplication(). 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ align := cview.AlignLeft 5/22/2017 West Thompson Pencil 32 1.99 63.68 ▒║ if row == 0 { 6/8/2017 East Jones Binder 60 8.99 539.40 ▒║ align = cview.AlignCenter 6/25/2017 Central Morgan Pencil 90 4.99 449.10 } else if column == 0 || column >= 4 { 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ align = cview.AlignRight 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ } 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ table.SetCell(row, 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ column, 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ &cview.TableCell{ 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ Text: "...", 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ Color: color, 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ Align: align, 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ NotSelectable: row == 0 || column░12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ }) 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ } 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ } 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ cview.NewApplication(). 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ▒║ align := cview.AlignLeft 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ if row == 0 { 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ align = cview.AlignCenter 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ } else if column == 0 || column >= 4 { 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ align = cview.AlignRight 9/18/2017 East Jones Pen Set 16 15.99 255.84 } 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ table.SetCell(row, 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ column, 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ &cview.TableCell{ 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ Text: "...", 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ Color: color, 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ Align: align, 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ NotSelectable: row == 0 || column░ 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ }) 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ } 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ } 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ cview.NewApplication(). 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ align := cview.AlignLeft 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ if row == 0 { 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ align = cview.AlignCenter 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ } else if column == 0 || column >= 4 { 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ align = cview.AlignRight 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ } 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ table.SetCell(row, 12/12/2017 Central Smith Pencil 67 1.29 86.43 column, 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ &cview.TableCell{ 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ Text: "...", 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ Color: color, 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ Align: align, 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ NotSelectable: row == 0 || column░ 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ }) 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ } 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ } 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ cview.NewApplication(). 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ } 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ align := cview.AlignLeft 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ if row == 0 { 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ align = cview.AlignCenter 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ } else if column == 0 || column >= 4 { 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ align = cview.AlignRight 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ } 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ table.SetCell(row, 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 column, 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ &cview.TableCell{ 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ Text: "...", 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ Color: color, 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ Align: align, 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ NotSelectable: row == 0 || column░ 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ }) 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ } 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ } 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ cview.NewApplication(). 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ cview.NewApplication(). 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ cview.NewApplication(). 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ cview.NewApplication(). 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ } 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ align := cview.AlignLeft 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ if row == 0 { 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ align = cview.AlignCenter 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ } else if column == 0 || column >= 4 { 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ align = cview.AlignRight 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ } 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ table.SetCell(row, 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ column, 2/1/2018 Central Smith Binder 87 15.00 1,305.00 &cview.TableCell{ 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ Text: "...", 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ Color: color, 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ Align: align, 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ NotSelectable: row == 0 || column░ 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ }) 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ } 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ } 6/17/2018 Central Kivell Desk 5 125.00 625.00 ▒║ cview.NewApplication(). 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ } 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ align := cview.AlignLeft 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ if row == 0 { 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ align = cview.AlignCenter 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ } else if column == 0 || column >= 4 { 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ align = cview.AlignRight 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ } 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ table.SetCell(row, 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ column, 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ &cview.TableCell{ 3/7/2018 West Sorvino Binder 7 19.99 139.93 Text: "...", 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ Color: color, 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ Align: align, 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ NotSelectable: row == 0 || column░ 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ }) 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ } 6/17/2018 Central Kivell Desk 5 125.00 625.00 ▒║ } 7/4/2018 East Jones Pen Set 62 4.99 309.38 ▒║ cview.NewApplication(). 11/25/2017 Central Kivell Pen Set 96 4.99 479.04 ▒║ align := cview.AlignLeft 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ if row == 0 { 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ align = cview.AlignCenter 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ } else if column == 0 || column >= 4 { 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ align = cview.AlignRight 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ } 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ table.SetCell(row, 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ column, 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ &cview.TableCell{ 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ Text: "...", 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ Color: color, 5/31/2018 Central Gill Binder 80 8.99 719.20 Align: align, 6/17/2018 Central Kivell Desk 5 125.00 625.00 ▒║ NotSelectable: row == 0 || column░ 7/4/2018 East Jones Pen Set 62 4.99 309.38 ▒║ }) 7/21/2018 Central Morgan Pen Set 55 12.49 686.95 ▒║ } 8/7/2018 Central Kivell Pen Set 42 23.95 1,005.90 ▒║ } 8/24/2018 West Sorvino Desk 3 275.00 825.00 ▒║ cview.NewApplication(). 1/15/2018 Central Gill Binder 46 8.99 413.54 ▒║ align := cview.AlignLeft 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ if row == 0 { 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ align = cview.AlignCenter 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ } else if column == 0 || column >= 4 { 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ align = cview.AlignRight 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ } 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ table.SetCell(row, 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ column, 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ &cview.TableCell{ 6/17/2018 Central Kivell Desk 5 125.00 625.00 ▒║ Text: "...", 7/4/2018 East Jones Pen Set 62 4.99 309.38 ▒║ Color: color, 7/21/2018 Central Morgan Pen Set 55 12.49 686.95 ▒║ Align: align, 8/7/2018 Central Kivell Pen Set 42 23.95 1,005.90 ▒║ NotSelectable: row == 0 || column░ 8/24/2018 West Sorvino Desk 3 275.00 825.00 }) 9/10/2018 Central Gill Pencil 7 1.29 9.03 ▒║ } 9/27/2018 West Sorvino Pen 76 1.99 151.24 ▒║ } 10/14/2018 West Thompson Binder 57 19.99 1,139.43 ▒║ cview.NewApplication(). 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ } 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ align := cview.AlignLeft 3/7/2018 West Sorvino Binder 7 19.99 139.93 ▒║ if row == 0 { 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ align = cview.AlignCenter 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ } else if column == 0 || column >= 4 { 4/27/2018 East Howard Pen 96 4.99 479.04 ▒║ align = cview.AlignRight 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ } 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ table.SetCell(row, 6/17/2018 Central Kivell Desk 5 125.00 625.00 ▒║ column, 7/4/2018 East Jones Pen Set 62 4.99 309.38 ▒║ &cview.TableCell{ 7/21/2018 Central Morgan Pen Set 55 12.49 686.95 ▒║ Text: "...", 8/7/2018 Central Kivell Pen Set 42 23.95 1,005.90 ▒║ Color: color, 8/24/2018 West Sorvino Desk 3 275.00 825.00 ▒║ Align: align, 9/10/2018 Central Gill Pencil 7 1.29 9.03 ▒║ NotSelectable: row == 0 || column░ 9/27/2018 West Sorvino Pen 76 1.99 151.24 ▒║ }) 10/14/2018 West Thompson Binder 57 19.99 1,139.43 } 10/31/2018 Central Andrews Pencil 14 1.29 18.06 ▒║ } 11/17/2018 Central Jardine Binder 11 4.99 54.89 ▒║ cview.NewApplication(). 10/31/2018 Central Andrews Pencil 14 1.29 18.06 ▒║ } 11/17/2018 Central Jardine Binder 11 4.99 54.89 ▒║ cview.NewApplication(). 9/10/2018 Central Gill Pencil 7 1.29 9.03 ▒║ NotSelectable: row == 0 || column░ 7/21/2018 Central Morgan Pen Set 55 12.49 686.95 ▒║ Text: "...", 5/31/2018 Central Gill Binder 80 8.99 719.20 ▒║ table.SetCell(row, 4/10/2018 Central Andrews Pencil 66 1.99 131.34 ▒║ } else if column == 0 || column >= 4 { 2/18/2018 East Jones Binder 4 4.99 19.96 ▒║ align := cview.AlignLeft 12/29/2017 East Parent Pen Set 74 15.99 1,183.26 ▒║ } 10/14/2018 West Thompson Binder 57 19.99 1,139.43 ▒║ cview.NewApplication(). 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ } 8/24/2018 West Sorvino Desk 3 275.00 825.00 ▒║ cview.NewApplication(). 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ } 7/4/2018 East Jones Pen Set 62 4.99 309.38 ▒║ cview.NewApplication(). 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ } 5/14/2018 Central Gill Pencil 53 1.29 68.37 ▒║ cview.NewApplication(). 6/8/2017 East Jones Binder 60 8.99 539.40 ▒║ } 3/24/2018 Central Jardine Pen Set 50 4.99 249.50 ▒║ cview.NewApplication(). 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ▒║ } 2/1/2018 Central Smith Binder 87 15.00 1,305.00 ▒║ cview.NewApplication(). 2/26/2017 Central Gill Pen 27 19.99 539.73 ▒║ } 12/12/2017 Central Smith Pencil 67 1.29 86.43 ▒║ cview.NewApplication(). 1/23/2017 Central Kivell Binder 50 19.99 999.50 } 2/9/2017 Central Jardine Pencil 36 4.99 179.64 ▒║ align := cview.AlignLeft 2/26/2017 Central Gill Pen 27 19.99 539.73 ▒║ if row == 0 { 3/15/2017 West Sorvino Pencil 56 2.99 167.44 ▒║ align = cview.AlignCenter 4/1/2017 East Jones Binder 60 4.99 299.40 ▒║ } else if column == 0 || column >= 4 { 4/18/2017 Central Andrews Pencil 75 1.99 149.25 ▒║ align = cview.AlignRight 5/5/2017 Central Jardine Pencil 90 4.99 449.10 ▒║ } 5/22/2017 West Thompson Pencil 32 1.99 63.68 ▒║ table.SetCell(row, 6/8/2017 East Jones Binder 60 8.99 539.40 ▒║ column, 6/25/2017 Central Morgan Pencil 90 4.99 449.10 ▒║ &cview.TableCell{ 7/12/2017 East Howard Binder 29 1.99 57.71 ▒║ Text: "...", 7/29/2017 East Parent Binder 81 19.99 1,619.19 ▒║ Color: color, 8/15/2017 East Jones Pencil 35 4.99 174.65 ▒║ Align: align, 9/1/2017 Central Smith Desk 2 125.00 250.00 ▒║ NotSelectable: row == 0 || column░ 9/18/2017 East Jones Pen Set 16 15.99 255.84 ▒║ }) 10/5/2017 Central Morgan Binder 28 8.99 251.72 ▒║ } 10/22/2017 East Jones Pen 64 8.99 575.36 ▒║ } 11/8/2017 East Parent Pen 15 19.99 299.85 ▒║ cview.NewApplication(). ╔══════════════════════════════════TreeView═══════════════════════════════════╗ ║Root package main ║├──Expand all ║├──Collapse all import "gitlab.com/tslocum/cview" ║├──Hide root node ║├──Align node text func main() { ║├──Prefixes tree := cview.NewTreeView() ║├──Basic tree with graphics ║└──Next slide root := cview.NewTreeNode("Root"). AddChild(cview.NewTreeNode("First child"). AddChild(cview.NewTreeNode("Grandchild A") AddChild(cview.NewTreeNode("Grandchild B") AddChild(cview.NewTreeNode("Second child"). AddChild(cview.NewTreeNode("Grandchild C") AddChild(cview.NewTreeNode("Grandchild D") AddChild(cview.NewTreeNode("Third child")) tree.SetRoot(root). SetCurrentNode(root) cview.NewApplication(). SetRoot(tree, true). Run() } ║│ ├──Tree list starts one level down func main() { ║│ ├──Works better for lists where no top node is needed tree := cview.NewTreeView() ║│ └──Switch to this layout ║├──Align node text root := cview.NewTreeNode("Root"). ║│ ├──For trees that are similar to lists AddChild(cview.NewTreeNode("First child"). ║│ ├──Hierarchy shown only in line drawings AddChild(cview.NewTreeNode("Grandchild A")║│ └──Switch to this layout AddChild(cview.NewTreeNode("Grandchild B")║├──Prefixes AddChild(cview.NewTreeNode("Second child"). ║│ ├──Best for hierarchical bullet point lists AddChild(cview.NewTreeNode("Grandchild C")║│ ├──You can define your own prefixes per level AddChild(cview.NewTreeNode("Grandchild D")║│ └──Switch to this layout AddChild(cview.NewTreeNode("Third child")) ║│ ├──Lines illustrate hierarchy tree.SetRoot(root). ║│ ├──Basic indentation SetCurrentNode(root) ║└──Next slide cview.NewApplication(). ║├──Expand all ║├──Collapse all import "gitlab.com/tslocum/cview" ║├──Hide root node ║│ └──Switch to this layout ║├──Align node text root := cview.NewTreeNode("Root"). ║│ └──Switch to this layout AddChild(cview.NewTreeNode("Grandchild B")║├──Prefixes AddChild(cview.NewTreeNode("Second child"). ║│ └──Switch to this layout AddChild(cview.NewTreeNode("Third child")) ╔═══════════════Flexible width, twice of middle column═══════════════╗┌─────────Flexible width──────────┐┌────────Fixed width─────────┐ ║│ ││ ║└─────────────────────────────────┘│ ║┌──────────Fixed height───────────┐│ ║┌─────────Flexible height─────────┐│ ╚════════════════════════════════════════════════════════════════════╝└─────────────────────────────────┘└────────────────────────────┘┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ Header ├─────────────────────┬────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────┤ Menu Main content Side Bar ├─────────────────────┴────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────┤ Footer └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌──List──┐ Item #1▓│ │Item╔Lorem Ips…╗ │Item║Lorem ips │Item║um dolor ▒║ │Item║sit amet,▒║ └────║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ │Item #2░│ │Item #3░│ │Item #4░│ │Item #5░│ └────────┘ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ └────────┘ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ Item #1▓│ ╔Lorem Ips…╗ │Item #2░│ ║Lorem ips │Item #3░│ ║um dolor ▒║ │Item #4░│ ║sit amet,▒║ │Item #5░│ ║ consecte▒║ └────────┘ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ┌──List──┐ ║Lorem ips Item #1▓│ ║um dolor ▒║ │Item #2░│ ║sit amet,▒║ │Item #3░│ ║ consecte▒║ │Item #4░│ ║tur adipi▒║ │Item #5░│ ║scing eli▒║ └────────┘ ║t, sed doo▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ │Item #2░│ ╔Lorem Ips…╗ │Item #3░│ ║Lorem ips │Item #4░│ ║um dolor ▒║ │Item #5░│ ║sit amet,▒║ └────────┘ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║ ║tempor in▒║ ║cididunt ▒║ ╚══════════╝ ╔══List══╗ Item #1 ║Item #2▒║ ║Item #3▒║ ║Item #4▒║ ║Item #5▒║ ╚════════╝ ┌Lorem Ips…┐ │Lorem ips▓│ │um dolor ░│ │sit amet,░│ │ consecte░│ │tur adipi░│ │scing eli░│ │t, sed do░│ │ eiusmod ░│ │tempor in░│ │cididunt ░│ └──────────┘ ╔══List══╗ Item #1 ║Item #2▒║ ║Item #3▒║ ║Item #4▒║ ║Item #5▒║ ┌Lorem Ips…┐ ╚════════╝ │Lorem ips▓│ ╔══List══╗ Item #1 ║Item #2▒║ ║Item #3▒║ ║Item #4▒║ ║Item #5▒║ ╚════════╝ ┌Lorem Ips…┐ ╔══List══╗ Item #1 ║Item #2▒║ ║Item #3▒║ ║Item #4▒║ ║Item #5▒║ ╚════════╝ ╔══List══╗ Item #1 ║Item #2▒║ ║Item #3▒║ ║Item #4▒║ ║Item #5▒║ ╚════════╝ ║Item #2▒║ ┌Lorem Ips…┐ ║Item #3▒║ │Lorem ips▓│ ║Item #4▒║ │um dolor ░│ ║Item #5▒║ │sit amet,░│ ╚════════╝ │ consecte░│ │u╔══List══╗ │s║Item #1 │ ║Item #2▒║ │t║Item #3▒║ │s║Item #4▒║ │t║Item #5▒║ │ ╚════════╝ │ consecte░│ ╔══List══╗ │tur adipi░│ Item #1 │scing eli░│ ║Item #2▒║ │t, sed do░│ ║Item #3▒║ │ eiusmod ░│ ║Item #4▒║ │tempor in░│ ║Item #5▒║ │cididunt ░│ ╚════════╝ │Lorem ips▓│ ╔══List══╗ │um dolor ░│ Item #1 │sit amet,░│ ║Item #2▒║ │ consecte░│ ║Item #3▒║ │tur adipi░│ ║Item #4▒║ │scing eli░│ ║Item #5▒║ │t, sed do░│ ╚════════╝ ╔══List══╗ Item #1 ┌Lorem Ip║Item #2▒║ │Lorem ip║Item #3▒║ │um dolor║Item #4▒║ │sit amet║Item #5▒║ │ consect╚════════╝ ╔══List══╗t amet,░│ Item #1 ║onsecte░│ ║Item #2▒║r adipi░│ ║Item #3▒║ing eli░│ ║Item #4▒║ sed do░│ ║Item #5▒║iusmod ░│ ╚════════╝mpor in░│ ╔══List══╗i░│ Item #1 ║o░│ ║Item #2▒║ ░│ ║Item #3▒║n░│ ║Item #4▒║ ░│ ║Item #5▒║──┘ ╚════════╝ │s╔══List══╗ │t║Item #1 │c║Item #4▒║ └─║Item #5▒║ ╚════════╝ │ ║Item #4▒║ │c║Item #6▒║ └─║Item #7 ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║──┐ ║tempor in▒║3░│ ║cididunt ▒║4░│ ╚══════════╝5░│ │Item #6░│ │Item #7▓│ └────────┘ ╔Lorem Ips…╗ ║Lorem ips ║um dolor ▒║ ║sit amet,▒║ ║ consecte▒║ ║tur adipi▒║ ║scing eli▒║ ║t, sed do▒║ ║ eiusmod ▒║List──┐ ║tempor in▒║em #3░│ ║cididunt ▒║em #4░│ ╚══════════╝em #5░│ ╔Lorem Ipsum═╗ ║Lorem ipsum ║ dolor sit ▒║ ║amet, conse▒║ ║ctetur adip▒║ ║iscing elit▒║ ║, sed do ei▒║ ║usmod tempo▒║ ║r incididun▒║st──┐ ║t ut labore▒║ #3░│ ║ et dolore ▒║ #4░│ ╚════════════╝ #5░│ ╔═Lorem Ipsum══╗ ║Lorem ipsum d ║olor sit amet▒║ ║, consectetur▒║ ║ adipiscing e▒║ ║lit, sed do e▒║ ║iusmod tempor▒║ ║ incididunt u▒║ ║t labore et d▒║──┐ ║olore magna a▒║3░│ ║liqua. Ut eni▒║4░│ ╚══════════════╝5░│ ╔══Lorem Ipsum═══╗ ║Lorem ipsum dol ║or sit amet, co▒║ ║nsectetur adipi▒║ ║scing elit, sed▒║ ║ do eiusmod tem▒║ ║por incididunt ▒║ ║ut labore et do▒║ ║lore magna aliq▒║┐ ║ua. Ut enim ad ▒║│ ║minim veniam, q▒║│ ╚════════════════╝│ ╔═════Lorem Ipsum═════╗ ║Lorem ipsum dolor si ║t amet, consectetur ▒║ ║adipiscing elit, sed▒║ ║ do eiusmod tempor i▒║ ║ncididunt ut labore ▒║ ║et dolore magna aliq▒║ ║ua. Ut enim ad minim▒║ ║ veniam, quis nostru▒║ ║d exercitation ullam▒║ ║co laboris nisi ut a▒║ ╚═════════════════════╝ ╔═════════Lorem Ipsum═════════╗ ║Lorem ipsum dolor sit amet, ║consectetur adipiscing elit,▒║ ║ sed do eiusmod tempor incid▒║ ║idunt ut labore et dolore ma▒║ ║gna aliqua. Ut enim ad minim▒║ ║ veniam, quis nostrud exerci▒║ ║tation ullamco laboris nisi ▒║ ║ut aliquip ex ea commodo con▒║ ║sequat. Duis aute irure dolo▒║ ║r in reprehenderit in volupt▒║ ╚═════════════════════════════╝ ╔══════════Lorem Ipsum═══════════╗ ║Lorem ipsum dolor sit amet, con ║sectetur adipiscing elit, sed d▒║ ║o eiusmod tempor incididunt ut ▒║ ║labore et dolore magna aliqua. ▒║ ║Ut enim ad minim veniam, quis n▒║ ║ostrud exercitation ullamco lab▒║ ║oris nisi ut aliquip ex ea comm▒║ ║odo consequat. Duis aute irure ▒║ ║dolor in reprehenderit in volup▒║ ║tate velit esse cillum dolore e▒║ ╚════════════════════════════════╝ ╔════════════Lorem Ipsum════════════╗ ║Lorem ipsum dolor sit amet, consec ║tetur adipiscing elit, sed do eius▒║ ║mod tempor incididunt ut labore et▒║ ║ dolore magna aliqua. Ut enim ad m▒║ ║inim veniam, quis nostrud exercita▒║ ║tion ullamco laboris nisi ut aliqu▒║ ║ip ex ea commodo consequat. Duis a▒║ ║ute irure dolor in reprehenderit i▒║ ║n voluptate velit esse cillum dolo▒║ ║re eu fugiat nulla pariatur. Excep▒║ ╚═══════════════════════════════════╝ ╔═════════════Lorem Ipsum══════════════╗ ║Lorem ipsum dolor sit amet, consectet ║ur adipiscing elit, sed do eiusmod te▒║ ║mpor incididunt ut labore et dolore m▒║ ║agna aliqua. Ut enim ad minim veniam,▒║ ║ quis nostrud exercitation ullamco la▒║ ║boris nisi ut aliquip ex ea commodo c▒║ ║onsequat. Duis aute irure dolor in re▒║ ║prehenderit in voluptate velit esse c▒║ ║illum dolore eu fugiat nulla pariatur▒║ ║. Excepteur sint occaecat cupidatat n▒║ ╚══════════════════════════════════════╝ ╔═══════════════Lorem Ipsum════════════════╗ ║Lorem ipsum dolor sit amet, consectetur a ║dipiscing elit, sed do eiusmod tempor inc▒║ ║ididunt ut labore et dolore magna aliqua.▒║ ║ Ut enim ad minim veniam, quis nostrud ex▒║ ║ercitation ullamco laboris nisi ut aliqui▒║ ║p ex ea commodo consequat. Duis aute irur▒║ ║e dolor in reprehenderit in voluptate vel▒║ ║it esse cillum dolore eu fugiat nulla par▒║ ║iatur. Excepteur sint occaecat cupidatat ▒║ ║non proident, sunt in culpa qui officia d▒║ ╚══════════════════════════════════════════╝ ╔════════════════Lorem Ipsum═════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adi ║piscing elit, sed do eiusmod tempor incidid▒║ ║unt ut labore et dolore magna aliqua. Ut en▒║ ║im ad minim veniam, quis nostrud exercitati▒║ ║on ullamco laboris nisi ut aliquip ex ea co▒║ ║mmodo consequat. Duis aute irure dolor in r▒║ ║eprehenderit in voluptate velit esse cillum▒║ ║ dolore eu fugiat nulla pariatur. Excepteur▒║ ║ sint occaecat cupidatat non proident, sunt▒║ ║ in culpa qui officia deserunt mollit anim ▒║ ╚════════════════════════════════════════════╝ ╔══════════════════Lorem Ipsum══════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adipisc║ ║ing elit, sed do eiusmod tempor incididunt ut l║ ║abore et dolore magna aliqua. Ut enim ad minim ║ ║veniam, quis nostrud exercitation ullamco labor║ ║is nisi ut aliquip ex ea commodo consequat. Dui║ ║s aute irure dolor in reprehenderit in voluptat║ ║e velit esse cillum dolore eu fugiat nulla pari║ ║atur. Excepteur sint occaecat cupidatat non pro║ ║ident, sunt in culpa qui officia deserunt molli║ ║t anim id est laborum. ╚═══════════════════════════════════════════════╝ ╔══════════════════════Lorem Ipsum═══════════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adipiscing elit,║ ║ sed do eiusmod tempor incididunt ut labore et dolore ma║ ║gna aliqua. Ut enim ad minim veniam, quis nostrud exerci║ ║tation ullamco laboris nisi ut aliquip ex ea commodo con║ ║sequat. Duis aute irure dolor in reprehenderit in volupt║ ║ate velit esse cillum dolore eu fugiat nulla pariatur. E║ ║xcepteur sint occaecat cupidatat non proident, sunt in c║ ║ulpa qui officia deserunt mollit anim id est laborum. ╚════════════════════════════════════════════════════════╝ ║magna aliqua. Ut enim ad minim veniam, quis nostrud exe▒║ ║rcitation ullamco laboris nisi ut aliquip ex ea commodo▒║ ║ consequat. Duis aute irure dolor in reprehenderit in v▒║ ║oluptate velit esse cillum dolore eu fugiat nulla paria▒║ ║tur. Excepteur sint occaecat cupidatat non proident, su▒║ ║nt in culpa qui officia deserunt mollit anim id est lab▒║ ║orum. │Item #3░│ │Item #4░│ │Item #5░│ ┌──List──┐ ╔══════════════════════Lorem Ipsum═══════════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adipiscing elit,║ ║ sed do eiusmod tempor incididunt ut labore et dolore ma║ ║gna aliqua. Ut enim ad minim veniam, quis nostrud exerci║ ║tation ullamco laboris nisi ut aliquip ex ea commodo con║ ║sequat. Duis aute irure dolor in reprehenderit in volupt║ ║ate velit esse cillum dolore eu fugiat nulla pariatur. E║ ║xcepteur sint occaecat cupidatat non proident, sunt in c║ ║ulpa qui officia deserunt mollit anim id est laborum. ╚════════════════════════════════════════════════════════╝ ╔══════════════════════Lorem Ipsum═══════════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adipiscing elit,║ ║ sed do eiusmod tempor incididunt ut labore et dolore ma║ ║gna aliqua. Ut enim ad minim veniam, quis nostrud exerci║ ║tation ullamco laboris nisi ut aliquip ex ea commodo con║ ║sequat. Duis aute irure dolor in reprehenderit in volupt║ ║ate velit esse cillum dolore eu fugiat nulla pariatur. E║ ║xcepteur sint occaecat cupidatat non proident, sunt in c║ ║ulpa qui officia deserunt mollit anim id est laborum. ╚════════════════════════════════════════════════════════╝ ╔══════════════════════Lorem Ipsum═══════════════════════╗ ║Lorem ipsum dolor sit amet, consectetur adipiscing elit,║ ║ sed do eiusmod tempor incididunt ut labore et dolore ma║ ║gna aliqua. Ut enim ad minim veniam, quis nostrud exerci║ ║tation ullamco laboris nisi ut aliquip ex ea commodo con║ ║sequat. Duis aute irure dolor in reprehenderit in volupt║ ║ate velit esse cillum dolore eu fugiat nulla pariatur. E║ ║xcepteur sint occaecat cupidatat non proident, sunt in c║ ║ulpa qui officia deserunt mollit anim id est laborum. ╚════════════════════════════════════════════════════════╝ https://gitlab.com/tslocum/cview + \ No newline at end of file