-
Notifications
You must be signed in to change notification settings - Fork 746
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6faba76
commit 0f36063
Showing
3 changed files
with
187 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
|
||
"github.com/charmbracelet/bubbles/table" | ||
tea "github.com/charmbracelet/bubbletea" | ||
"github.com/charmbracelet/lipgloss" | ||
) | ||
|
||
var baseStyle = lipgloss.NewStyle(). | ||
BorderStyle(lipgloss.NormalBorder()). | ||
BorderForeground(lipgloss.Color("240")) | ||
|
||
type model struct { | ||
table table.Model | ||
} | ||
|
||
func (m model) Init() tea.Cmd { return nil } | ||
|
||
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { | ||
var cmd tea.Cmd | ||
switch msg := msg.(type) { | ||
case tea.KeyMsg: | ||
switch msg.String() { | ||
case "esc": | ||
if m.table.Focused() { | ||
m.table.Blur() | ||
} else { | ||
m.table.Focus() | ||
} | ||
case "q", "ctrl+c": | ||
return m, tea.Quit | ||
case "enter": | ||
return m, tea.Batch( | ||
tea.Printf("Let's go to %s!", m.table.SelectedRow()[1]), | ||
) | ||
} | ||
} | ||
m.table, cmd = m.table.Update(msg) | ||
return m, cmd | ||
} | ||
|
||
func (m model) View() string { | ||
return baseStyle.Render(m.table.View()) + "\n" | ||
} | ||
|
||
func main() { | ||
columns := []table.Column{ | ||
{Title: "Rank", Width: 4}, | ||
{Title: "City", Width: 10}, | ||
{Title: "Country", Width: 10}, | ||
{Title: "Population", Width: 10}, | ||
} | ||
|
||
rows := []table.Row{ | ||
{"1", "Tokyo", "Japan", "37,274,000"}, | ||
{"2", "Delhi", "India", "32,065,760"}, | ||
{"3", "Shanghai", "China", "28,516,904"}, | ||
{"4", "Dhaka", "Bangladesh", "22,478,116"}, | ||
{"5", "São Paulo", "Brazil", "22,429,800"}, | ||
{"6", "Mexico City", "Mexico", "22,085,140"}, | ||
{"7", "Cairo", "Egypt", "21,750,020"}, | ||
{"8", "Beijing", "China", "21,333,332"}, | ||
{"9", "Mumbai", "India", "20,961,472"}, | ||
{"10", "Osaka", "Japan", "19,059,856"}, | ||
{"11", "Chongqing", "China", "16,874,740"}, | ||
{"12", "Karachi", "Pakistan", "16,839,950"}, | ||
{"13", "Istanbul", "Turkey", "15,636,243"}, | ||
{"14", "Kinshasa", "DR Congo", "15,628,085"}, | ||
{"15", "Lagos", "Nigeria", "15,387,639"}, | ||
{"16", "Buenos Aires", "Argentina", "15,369,919"}, | ||
{"17", "Kolkata", "India", "15,133,888"}, | ||
{"18", "Manila", "Philippines", "14,406,059"}, | ||
{"19", "Tianjin", "China", "14,011,828"}, | ||
{"20", "Guangzhou", "China", "13,964,637"}, | ||
{"21", "Rio De Janeiro", "Brazil", "13,634,274"}, | ||
{"22", "Lahore", "Pakistan", "13,541,764"}, | ||
{"23", "Bangalore", "India", "13,193,035"}, | ||
{"24", "Shenzhen", "China", "12,831,330"}, | ||
{"25", "Moscow", "Russia", "12,640,818"}, | ||
{"26", "Chennai", "India", "11,503,293"}, | ||
{"27", "Bogota", "Colombia", "11,344,312"}, | ||
{"28", "Paris", "France", "11,142,303"}, | ||
{"29", "Jakarta", "Indonesia", "11,074,811"}, | ||
{"30", "Lima", "Peru", "11,044,607"}, | ||
{"31", "Bangkok", "Thailand", "10,899,698"}, | ||
{"32", "Hyderabad", "India", "10,534,418"}, | ||
{"33", "Seoul", "South Korea", "9,975,709"}, | ||
{"34", "Nagoya", "Japan", "9,571,596"}, | ||
{"35", "London", "United Kingdom", "9,540,576"}, | ||
{"36", "Chengdu", "China", "9,478,521"}, | ||
{"37", "Nanjing", "China", "9,429,381"}, | ||
{"38", "Tehran", "Iran", "9,381,546"}, | ||
{"39", "Ho Chi Minh City", "Vietnam", "9,077,158"}, | ||
{"40", "Luanda", "Angola", "8,952,496"}, | ||
{"41", "Wuhan", "China", "8,591,611"}, | ||
{"42", "Xi An Shaanxi", "China", "8,537,646"}, | ||
{"43", "Ahmedabad", "India", "8,450,228"}, | ||
{"44", "Kuala Lumpur", "Malaysia", "8,419,566"}, | ||
{"45", "New York City", "United States", "8,177,020"}, | ||
{"46", "Hangzhou", "China", "8,044,878"}, | ||
{"47", "Surat", "India", "7,784,276"}, | ||
{"48", "Suzhou", "China", "7,764,499"}, | ||
{"49", "Hong Kong", "Hong Kong", "7,643,256"}, | ||
{"50", "Riyadh", "Saudi Arabia", "7,538,200"}, | ||
{"51", "Shenyang", "China", "7,527,975"}, | ||
{"52", "Baghdad", "Iraq", "7,511,920"}, | ||
{"53", "Dongguan", "China", "7,511,851"}, | ||
{"54", "Foshan", "China", "7,497,263"}, | ||
{"55", "Dar Es Salaam", "Tanzania", "7,404,689"}, | ||
{"56", "Pune", "India", "6,987,077"}, | ||
{"57", "Santiago", "Chile", "6,856,939"}, | ||
{"58", "Madrid", "Spain", "6,713,557"}, | ||
{"59", "Haerbin", "China", "6,665,951"}, | ||
{"60", "Toronto", "Canada", "6,312,974"}, | ||
{"61", "Belo Horizonte", "Brazil", "6,194,292"}, | ||
{"62", "Khartoum", "Sudan", "6,160,327"}, | ||
{"63", "Johannesburg", "South Africa", "6,065,354"}, | ||
{"64", "Singapore", "Singapore", "6,039,577"}, | ||
{"65", "Dalian", "China", "5,930,140"}, | ||
{"66", "Qingdao", "China", "5,865,232"}, | ||
{"67", "Zhengzhou", "China", "5,690,312"}, | ||
{"68", "Ji Nan Shandong", "China", "5,663,015"}, | ||
{"69", "Barcelona", "Spain", "5,658,472"}, | ||
{"70", "Saint Petersburg", "Russia", "5,535,556"}, | ||
{"71", "Abidjan", "Ivory Coast", "5,515,790"}, | ||
{"72", "Yangon", "Myanmar", "5,514,454"}, | ||
{"73", "Fukuoka", "Japan", "5,502,591"}, | ||
{"74", "Alexandria", "Egypt", "5,483,605"}, | ||
{"75", "Guadalajara", "Mexico", "5,339,583"}, | ||
{"76", "Ankara", "Turkey", "5,309,690"}, | ||
{"77", "Chittagong", "Bangladesh", "5,252,842"}, | ||
{"78", "Addis Ababa", "Ethiopia", "5,227,794"}, | ||
{"79", "Melbourne", "Australia", "5,150,766"}, | ||
{"80", "Nairobi", "Kenya", "5,118,844"}, | ||
{"81", "Hanoi", "Vietnam", "5,067,352"}, | ||
{"82", "Sydney", "Australia", "5,056,571"}, | ||
{"83", "Monterrey", "Mexico", "5,036,535"}, | ||
{"84", "Changsha", "China", "4,809,887"}, | ||
{"85", "Brasilia", "Brazil", "4,803,877"}, | ||
{"86", "Cape Town", "South Africa", "4,800,954"}, | ||
{"87", "Jiddah", "Saudi Arabia", "4,780,740"}, | ||
{"88", "Urumqi", "China", "4,710,203"}, | ||
{"89", "Kunming", "China", "4,657,381"}, | ||
{"90", "Changchun", "China", "4,616,002"}, | ||
{"91", "Hefei", "China", "4,496,456"}, | ||
{"92", "Shantou", "China", "4,490,411"}, | ||
{"93", "Xinbei", "Taiwan", "4,470,672"}, | ||
{"94", "Kabul", "Afghanistan", "4,457,882"}, | ||
{"95", "Ningbo", "China", "4,405,292"}, | ||
{"96", "Tel Aviv", "Israel", "4,343,584"}, | ||
{"97", "Yaounde", "Cameroon", "4,336,670"}, | ||
{"98", "Rome", "Italy", "4,297,877"}, | ||
{"99", "Shijiazhuang", "China", "4,285,135"}, | ||
{"100", "Montreal", "Canada", "4,276,526"}, | ||
} | ||
|
||
t := table.New( | ||
table.WithColumns(columns), | ||
table.WithRows(rows), | ||
table.WithFocused(true), | ||
table.WithHeight(7), | ||
) | ||
|
||
s := table.DefaultStyles() | ||
s.Header = s.Header. | ||
BorderStyle(lipgloss.NormalBorder()). | ||
BorderForeground(lipgloss.Color("240")). | ||
BorderBottom(true). | ||
Bold(false) | ||
s.Selected = s.Selected. | ||
Foreground(lipgloss.Color("229")). | ||
Background(lipgloss.Color("57")). | ||
Bold(false) | ||
t.SetStyles(s) | ||
|
||
m := model{t} | ||
if err := tea.NewProgram(m).Start(); err != nil { | ||
fmt.Println("Error running program:", err) | ||
os.Exit(1) | ||
} | ||
} |