mirror of
https://github.com/charmbracelet/glow
synced 2024-11-10 06:04:18 +00:00
Bump Bubble Tea, Bubbles, Glamour, Lip Gloss, and Termenv and do related updates
This update also removes any usage of the charm/common package Co-authored-by: Christian Rocha <christian@rocha.is> Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
parent
d2870afb3d
commit
9c9b3e6087
14 changed files with 311 additions and 230 deletions
|
@ -9,7 +9,6 @@ import (
|
|||
"strings"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/charmbracelet/charm/ui/common"
|
||||
gap "github.com/muesli/go-app-paths"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
@ -29,8 +28,8 @@ var configCmd = &cobra.Command{
|
|||
Use: "config",
|
||||
Hidden: false,
|
||||
Short: "Edit the glow config file",
|
||||
Long: formatBlock(fmt.Sprintf("\n%s the glow config file. We’ll use EDITOR to determine which editor to use. If the config file doesn't exist, it will be created.", common.Keyword("Edit"))),
|
||||
Example: formatBlock("glow config\nglow config --config path/to/config.yml"),
|
||||
Long: paragraph(fmt.Sprintf("\n%s the glow config file. We’ll use EDITOR to determine which editor to use. If the config file doesn't exist, it will be created.", keyword("Edit"))),
|
||||
Example: paragraph("glow config\nglow config --config path/to/config.yml"),
|
||||
Args: cobra.NoArgs,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
editor := strings.Fields(os.Getenv("EDITOR"))
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/muesli/reflow/indent"
|
||||
"github.com/muesli/reflow/wordwrap"
|
||||
)
|
||||
|
||||
const (
|
||||
wrapAt = 78
|
||||
indentAmount = 2
|
||||
)
|
||||
|
||||
func formatBlock(s string) string {
|
||||
return indent.String(wordwrap.String(s, wrapAt-indentAmount), indentAmount)
|
||||
}
|
16
go.mod
16
go.mod
|
@ -3,24 +3,24 @@ module github.com/charmbracelet/glow
|
|||
go 1.16
|
||||
|
||||
require (
|
||||
github.com/charmbracelet/bubbles v0.7.6
|
||||
github.com/charmbracelet/bubbletea v0.13.2
|
||||
github.com/charmbracelet/bubbles v0.14.0
|
||||
github.com/charmbracelet/bubbletea v0.23.0
|
||||
github.com/charmbracelet/charm v0.8.6
|
||||
github.com/charmbracelet/glamour v0.2.1-0.20210402234443-abe9cda419ba
|
||||
github.com/charmbracelet/glamour v0.6.0
|
||||
github.com/charmbracelet/lipgloss v0.6.0
|
||||
github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.12
|
||||
github.com/mattn/go-runewidth v0.0.14
|
||||
github.com/meowgorithm/babyenv v1.3.1
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
github.com/muesli/gitcha v0.2.0
|
||||
github.com/muesli/go-app-paths v0.2.1
|
||||
github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68
|
||||
github.com/muesli/termenv v0.8.1
|
||||
github.com/muesli/reflow v0.3.0
|
||||
github.com/muesli/termenv v0.13.0
|
||||
github.com/sahilm/fuzzy v0.1.0
|
||||
github.com/segmentio/ksuid v1.0.3
|
||||
github.com/spf13/cobra v1.5.0
|
||||
github.com/spf13/viper v1.13.0
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
golang.org/x/text v0.3.7
|
||||
)
|
||||
|
|
88
go.sum
88
go.sum
|
@ -58,15 +58,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
|
|||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
|
||||
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
|
||||
github.com/alecthomas/chroma v0.8.2 h1:x3zkuE2lUk/RIekyAJ3XRqSCP4zwWDfcw/YJCuCAACg=
|
||||
github.com/alecthomas/chroma v0.8.2/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM=
|
||||
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo=
|
||||
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0=
|
||||
github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE=
|
||||
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY=
|
||||
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
|
||||
github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
|
||||
github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
|
@ -79,8 +72,11 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
|
|||
github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/atotto/clipboard v0.1.2 h1:YZCtFu5Ie8qX2VmVTBnrqLSiU9XOWwqNRmdT3gIQzbY=
|
||||
github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
|
||||
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||
github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg=
|
||||
github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4=
|
||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
|
||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
|
@ -93,17 +89,20 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA
|
|||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/charmbracelet/bubbles v0.7.5/go.mod h1:IRTORFvhEI6OUH7WhN2Ks8Z8miNGimk1BE6cmHijOkM=
|
||||
github.com/charmbracelet/bubbles v0.7.6 h1:SCAp4ZEUf2tBNEsufo+Xxxu2dvbFhYSDPrX45toQZrM=
|
||||
github.com/charmbracelet/bubbles v0.7.6/go.mod h1:0D4XRYK0tjo8JMvflz1obpVcOikNZSG46SFauoZj22s=
|
||||
github.com/charmbracelet/bubbles v0.14.0 h1:DJfCwnARfWjZLvMglhSQzo76UZ2gucuHPy9jLWX45Og=
|
||||
github.com/charmbracelet/bubbles v0.14.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc=
|
||||
github.com/charmbracelet/bubbletea v0.12.2/go.mod h1:3gZkYELUOiEUOp0bTInkxguucy/xRbGSOcbMs1geLxg=
|
||||
github.com/charmbracelet/bubbletea v0.13.2 h1:fSOx3q0/VbA3ChWeiNcUsNeNysD9FFWD1tZypShBuCQ=
|
||||
github.com/charmbracelet/bubbletea v0.13.2/go.mod h1:okqaA5VF0aSpEZ2HB+L/cxVw2HthIDZ1dmWoRZs8/4g=
|
||||
github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4=
|
||||
github.com/charmbracelet/bubbletea v0.23.0 h1:oGChhsNcm7kltiTdjxJbVlyh93N5fycluO7MsA2JEeg=
|
||||
github.com/charmbracelet/bubbletea v0.23.0/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU=
|
||||
github.com/charmbracelet/charm v0.8.6 h1:/U6rxGj4J6zZ1Ex8+wTr4hNMr4ESBzNZbC1UyrJPVbg=
|
||||
github.com/charmbracelet/charm v0.8.6/go.mod h1:8dE3uX+TYSpa7Q6e/CmjN6WSd7koSAKNQTGWugFREx4=
|
||||
github.com/charmbracelet/glamour v0.2.1-0.20210402234443-abe9cda419ba h1:smKYYwwVPZyMK2LCirIi2WY25tZZW0IU7GYe1ASGCe4=
|
||||
github.com/charmbracelet/glamour v0.2.1-0.20210402234443-abe9cda419ba/go.mod h1:nHP5wEbsv2eOJ7XfiScQV3p5dpZSM051R0VkxnOIPgg=
|
||||
github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU=
|
||||
github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE=
|
||||
github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc=
|
||||
github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc=
|
||||
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
|
||||
github.com/charmbracelet/lipgloss v0.5.0/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs=
|
||||
github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY=
|
||||
github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
|
@ -119,8 +118,9 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
|
|||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/containerd/console v1.0.1 h1:u7SFAJyRqWcG6ogaMAx3KjSTy1e3hT9QxqX7Jco7dRc=
|
||||
github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
|
||||
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
|
||||
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
|
@ -131,16 +131,14 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
|
|||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk=
|
||||
github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
|
||||
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac h1:opbrjaN/L8gg6Xh5D04Tem+8xVcz6ajZlGCs49mQgyg=
|
||||
github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
|
@ -344,19 +342,24 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
|
|||
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
|
||||
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
|
||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||
github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow=
|
||||
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
|
||||
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/meowgorithm/babyenv v1.3.0/go.mod h1:lwNX+J6AGBFqNrMZ2PTLkM6SO+W4X8DOg9zBDO4j3Ig=
|
||||
github.com/meowgorithm/babyenv v1.3.1 h1:18ZEYIgbzoFQfRLF9+lxjRfk/ui6w8U0FWl07CgWvvc=
|
||||
github.com/meowgorithm/babyenv v1.3.1/go.mod h1:lwNX+J6AGBFqNrMZ2PTLkM6SO+W4X8DOg9zBDO4j3Ig=
|
||||
github.com/microcosm-cc/bluemonday v1.0.4 h1:p0L+CTpo/PLFdkoPcJemLXG+fpMD7pYOoDEq1axMbGg=
|
||||
github.com/microcosm-cc/bluemonday v1.0.4/go.mod h1:8iwZnFn2CDDNZ0r6UXhF4xawGvzaqzCRa1n3/lO3W2w=
|
||||
github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
|
||||
github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
|
||||
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
||||
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
|
||||
github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a h1:eU8j/ClY2Ty3qdHnn0TyW3ivFoPC/0F1gQZz8yTxbbE=
|
||||
|
@ -375,20 +378,27 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
|
|||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34=
|
||||
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
|
||||
github.com/muesli/cancelreader v0.2.0/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
|
||||
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
|
||||
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
|
||||
github.com/muesli/gitcha v0.2.0 h1:+wOgT2dI9s2Tznj1t1rb/qkK5e0cb6qD8c4IX2TR/YY=
|
||||
github.com/muesli/gitcha v0.2.0/go.mod h1:Ri8m9TZS4+ORG4JVmVKUQcWZuxDvUW3UKxMdQfzG2zI=
|
||||
github.com/muesli/go-app-paths v0.2.1 h1:Qi+2igkDX2aPqyRddp7P0sMQIBwBqhkfQfNcjdGjL6Y=
|
||||
github.com/muesli/go-app-paths v0.2.1/go.mod h1:SxS3Umca63pcFcLtbjVb+J0oD7cl4ixQWoBKhGEtEho=
|
||||
github.com/muesli/reflow v0.1.0/go.mod h1:I9bWAt7QTg/que/qmUCJBGlj7wEq8OAFBjPNjc6xK4I=
|
||||
github.com/muesli/reflow v0.2.0/go.mod h1:qT22vjVmM9MIUeLgsVYe/Ye7eZlbv9dZjL3dVhUqLX8=
|
||||
github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68 h1:y1p/ycavWjGT9FnmSjdbWUlLGvcxrY0Rw3ATltrxOhk=
|
||||
github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ=
|
||||
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
|
||||
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
|
||||
github.com/muesli/sasquatch v0.0.0-20200811221207-66979d92330a h1:Hw/15RYEOUD6T9UCRkUmNBa33kJkH33Fui6hE4sRLKU=
|
||||
github.com/muesli/sasquatch v0.0.0-20200811221207-66979d92330a/go.mod h1:+XG0ne5zXWBTSbbe7Z3/RWxaT8PZY6zaZ1dX6KjprYY=
|
||||
github.com/muesli/termenv v0.7.2/go.mod h1:ct2L5N2lmix82RaY3bMWwVu/jUFc9Ule0KGDCiKYPh8=
|
||||
github.com/muesli/termenv v0.7.4/go.mod h1:pZ7qY9l3F7e5xsAOS0zCew2tME+p7bWeBkotCEcIIcc=
|
||||
github.com/muesli/termenv v0.8.1 h1:9q230czSP3DHVpkaPDXGp0TOfAwyjyYwXlUCQxQSaBk=
|
||||
github.com/muesli/termenv v0.8.1/go.mod h1:kzt/D/4a88RoheZmwfqorY3A+tnsSMA9HJC/fQSFKo0=
|
||||
github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
|
||||
github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
|
||||
github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0=
|
||||
github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||
|
@ -403,7 +413,6 @@ github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwb
|
|||
github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
|
@ -452,8 +461,6 @@ github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8
|
|||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/segmentio/ksuid v1.0.3 h1:FoResxvleQwYiPAVKe1tMUlEirodZqlqglIuFsdDntY=
|
||||
github.com/segmentio/ksuid v1.0.3/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE=
|
||||
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
|
@ -502,9 +509,9 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.5.2 h1:ALmeCk/px5FSm1MAcFBAsVKZjDuMVj8Tm7FFIlMJnqU=
|
||||
github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os=
|
||||
github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
|
@ -623,8 +630,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
|||
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y=
|
||||
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20221002022538-bcab6841153b h1:6e93nYa3hNqAvLr0pD4PN1fFS+gKzp2zAXqrnTCstqU=
|
||||
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
@ -690,7 +698,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -734,13 +741,16 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
|
|
22
main.go
22
main.go
|
@ -12,17 +12,15 @@ import (
|
|||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/glamour"
|
||||
"github.com/charmbracelet/glow/ui"
|
||||
"github.com/charmbracelet/glow/utils"
|
||||
"github.com/meowgorithm/babyenv"
|
||||
gap "github.com/muesli/go-app-paths"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"golang.org/x/term"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/charmbracelet/glamour"
|
||||
"github.com/charmbracelet/glow/ui"
|
||||
"github.com/charmbracelet/glow/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -41,7 +39,7 @@ var (
|
|||
rootCmd = &cobra.Command{
|
||||
Use: "glow [SOURCE|DIR]",
|
||||
Short: "Render markdown on the CLI, with pizzazz!",
|
||||
Long: formatBlock(fmt.Sprintf("\nRender markdown on the CLI, %s!", common.Keyword("with pizzazz"))),
|
||||
Long: paragraph(fmt.Sprintf("\nRender markdown on the CLI, %s!", keyword("with pizzazz"))),
|
||||
SilenceErrors: false,
|
||||
SilenceUsage: false,
|
||||
TraverseChildren: true,
|
||||
|
@ -334,6 +332,7 @@ func runTUI(workingDirectory string, stashedOnly bool) error {
|
|||
cfg.ShowAllFiles = showAllFiles
|
||||
cfg.GlamourMaxWidth = width
|
||||
cfg.GlamourStyle = style
|
||||
cfg.EnableMouse = mouse
|
||||
|
||||
if stashedOnly {
|
||||
cfg.DocumentTypes.Add(ui.StashedDoc, ui.NewsDoc)
|
||||
|
@ -342,14 +341,7 @@ func runTUI(workingDirectory string, stashedOnly bool) error {
|
|||
}
|
||||
|
||||
// Run Bubble Tea program
|
||||
p := ui.NewProgram(cfg)
|
||||
p.EnterAltScreen()
|
||||
defer p.ExitAltScreen()
|
||||
if mouse {
|
||||
p.EnableMouseCellMotion()
|
||||
defer p.DisableMouseCellMotion()
|
||||
}
|
||||
if err := p.Start(); err != nil {
|
||||
if _, err := ui.NewProgram(cfg).Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
11
stash_cmd.go
11
stash_cmd.go
|
@ -9,20 +9,20 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/charmbracelet/charm"
|
||||
"github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/muesli/termenv"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
memo string
|
||||
dot = lipgloss.NewStyle().Foreground(lipgloss.Color("#04B575")).Render("•")
|
||||
|
||||
stashCmd = &cobra.Command{
|
||||
Use: "stash [SOURCE]",
|
||||
Hidden: false,
|
||||
Short: "Stash a markdown",
|
||||
Long: formatBlock(fmt.Sprintf("\nDo %s stuff. Run with no arguments to browse your stash or pass a path to a markdown file to stash it.", common.Keyword("stash"))),
|
||||
Example: formatBlock("glow stash\nglow stash README.md\nglow stash -m \"secret notes\" path/to/notes.md"),
|
||||
Long: paragraph(fmt.Sprintf("\nDo %s stuff. Run with no arguments to browse your stash or pass a path to a markdown file to stash it.", keyword("stash"))),
|
||||
Example: paragraph("glow stash\nglow stash README.md\nglow stash -m \"secret notes\" path/to/notes.md"),
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
initConfig()
|
||||
|
@ -53,7 +53,6 @@ var (
|
|||
return fmt.Errorf("error stashing markdown")
|
||||
}
|
||||
|
||||
dot := termenv.String("•").Foreground(common.Green.Color()).String()
|
||||
fmt.Println(dot + " Stashed!")
|
||||
return nil
|
||||
},
|
||||
|
@ -73,7 +72,7 @@ func initCharmClient() *charm.Client {
|
|||
cfg := getCharmConfig()
|
||||
cc, err := charm.NewClient(cfg)
|
||||
if err == charm.ErrMissingSSHAuth {
|
||||
fmt.Println(formatBlock("We had some trouble authenticating via SSH. If this continues to happen the Charm tool may be able to help you. More info at https://github.com/charmbracelet/charm."))
|
||||
fmt.Println(paragraph("We had some trouble authenticating via SSH. If this continues to happen the Charm tool may be able to help you. More info at https://github.com/charmbracelet/charm."))
|
||||
os.Exit(1)
|
||||
} else if err != nil {
|
||||
fmt.Println(err)
|
||||
|
|
16
style.go
Normal file
16
style.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
. "github.com/charmbracelet/lipgloss"
|
||||
)
|
||||
|
||||
var (
|
||||
keyword = NewStyle().
|
||||
Foreground(AdaptiveColor{Light: "#04B575", Dark: "#04B575"}).
|
||||
Render
|
||||
|
||||
paragraph = NewStyle().
|
||||
Width(78).
|
||||
Padding(0, 0, 0, 2).
|
||||
Render
|
||||
)
|
|
@ -7,6 +7,7 @@ type Config struct {
|
|||
HomeDir string `env:"HOME"`
|
||||
GlamourMaxWidth uint
|
||||
GlamourStyle string
|
||||
EnableMouse bool
|
||||
|
||||
// Which directory should we start from?
|
||||
WorkingDirectory string
|
||||
|
|
104
ui/pager.go
104
ui/pager.go
|
@ -12,12 +12,11 @@ import (
|
|||
"github.com/charmbracelet/bubbles/viewport"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/charm"
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/charmbracelet/glamour"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
runewidth "github.com/mattn/go-runewidth"
|
||||
"github.com/muesli/reflow/ansi"
|
||||
"github.com/muesli/reflow/truncate"
|
||||
te "github.com/muesli/termenv"
|
||||
)
|
||||
|
||||
const statusBarHeight = 1
|
||||
|
@ -25,27 +24,78 @@ const statusBarHeight = 1
|
|||
var (
|
||||
pagerHelpHeight int
|
||||
|
||||
mintGreen = lib.NewColorPair("#89F0CB", "#89F0CB")
|
||||
darkGreen = lib.NewColorPair("#1C8760", "#1C8760")
|
||||
mintGreen = lipgloss.AdaptiveColor{Light: "#89F0CB", Dark: "#89F0CB"}
|
||||
darkGreen = lipgloss.AdaptiveColor{Light: "#1C8760", Dark: "#1C8760"}
|
||||
|
||||
noteHeading = te.String(" Set Memo ").
|
||||
Foreground(lib.Cream.Color()).
|
||||
Background(lib.Green.Color()).
|
||||
String()
|
||||
noteHeading = lipgloss.NewStyle().
|
||||
Foreground(cream).
|
||||
Background(green).
|
||||
Padding(0, 1).
|
||||
Render("Set Memo")
|
||||
|
||||
statusBarNoteFg = lib.NewColorPair("#7D7D7D", "#656565")
|
||||
statusBarBg = lib.NewColorPair("#242424", "#E6E6E6")
|
||||
statusBarNoteFg = lipgloss.AdaptiveColor{Light: "#656565", Dark: "#7D7D7D"}
|
||||
statusBarBg = lipgloss.AdaptiveColor{Light: "#E6E6E6", Dark: "#242424"}
|
||||
|
||||
// Styling funcs.
|
||||
statusBarScrollPosStyle = newStyle(lib.NewColorPair("#5A5A5A", "#949494"), statusBarBg, false)
|
||||
statusBarNoteStyle = newStyle(statusBarNoteFg, statusBarBg, false)
|
||||
statusBarHelpStyle = newStyle(statusBarNoteFg, lib.NewColorPair("#323232", "#DCDCDC"), false)
|
||||
statusBarStashDotStyle = newStyle(lib.Green, statusBarBg, false)
|
||||
statusBarMessageStyle = newStyle(mintGreen, darkGreen, false)
|
||||
statusBarMessageStashIconStyle = newStyle(mintGreen, darkGreen, false)
|
||||
statusBarMessageScrollPosStyle = newStyle(mintGreen, darkGreen, false)
|
||||
statusBarMessageHelpStyle = newStyle(lib.NewColorPair("#B6FFE4", "#B6FFE4"), lib.Green, false)
|
||||
helpViewStyle = newStyle(statusBarNoteFg, lib.NewColorPair("#1B1B1B", "#f2f2f2"), false)
|
||||
statusBarScrollPosStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#949494", Dark: "#5A5A5A"}).
|
||||
Background(statusBarBg).
|
||||
Render
|
||||
|
||||
statusBarNoteStyle = lipgloss.NewStyle().
|
||||
Foreground(statusBarNoteFg).
|
||||
Background(statusBarBg).
|
||||
Render
|
||||
|
||||
statusBarHelpStyle = lipgloss.NewStyle().
|
||||
Foreground(statusBarNoteFg).
|
||||
Background(lipgloss.AdaptiveColor{Light: "#DCDCDC", Dark: "#323232"}).
|
||||
Render
|
||||
|
||||
statusBarStashDotStyle = lipgloss.NewStyle().
|
||||
Foreground(green).
|
||||
Background(statusBarBg).
|
||||
Render
|
||||
|
||||
statusBarMessageStyle = lipgloss.NewStyle().
|
||||
Foreground(mintGreen).
|
||||
Background(darkGreen).
|
||||
Render
|
||||
|
||||
statusBarMessageStashIconStyle = lipgloss.NewStyle().
|
||||
Foreground(mintGreen).
|
||||
Background(darkGreen).
|
||||
Render
|
||||
|
||||
statusBarMessageScrollPosStyle = lipgloss.NewStyle().
|
||||
Foreground(mintGreen).
|
||||
Background(darkGreen).
|
||||
Render
|
||||
|
||||
statusBarMessageHelpStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.Color("#B6FFE4")).
|
||||
Background(green).
|
||||
Render
|
||||
|
||||
helpViewStyle = lipgloss.NewStyle().
|
||||
Foreground(statusBarNoteFg).
|
||||
Background(lipgloss.AdaptiveColor{Light: "#f2f2f2", Dark: "#1B1B1B"}).
|
||||
Render
|
||||
|
||||
spinnerStyle = lipgloss.NewStyle().
|
||||
Foreground(statusBarNoteFg).
|
||||
Background(statusBarBg)
|
||||
|
||||
pagerNoteInputPromptStyle = lipgloss.NewStyle().
|
||||
Foreground(darkGray).
|
||||
Background(yellowGreen).
|
||||
Padding(0, 1)
|
||||
|
||||
pagerNoteInputStyle = lipgloss.NewStyle().
|
||||
Foreground(darkGray).
|
||||
Background(yellowGreen)
|
||||
|
||||
pagerNoteInputCursorStyle = lipgloss.NewStyle().
|
||||
Foreground(fuschia)
|
||||
)
|
||||
|
||||
type contentRenderedMsg string
|
||||
|
@ -89,20 +139,16 @@ func newPagerModel(common *commonModel) pagerModel {
|
|||
|
||||
// Text input for notes/memos
|
||||
ti := textinput.NewModel()
|
||||
ti.Prompt = te.String(" > ").
|
||||
Foreground(lib.Color(darkGray)).
|
||||
Background(lib.YellowGreen.Color()).
|
||||
String()
|
||||
ti.TextColor = darkGray
|
||||
ti.BackgroundColor = lib.YellowGreen.String()
|
||||
ti.CursorColor = lib.Fuschia.String()
|
||||
ti.Prompt = " > "
|
||||
ti.PromptStyle = pagerNoteInputPromptStyle
|
||||
ti.TextStyle = pagerNoteInputStyle
|
||||
ti.CursorStyle = pagerNoteInputCursorStyle
|
||||
ti.CharLimit = noteCharacterLimit
|
||||
ti.Focus()
|
||||
|
||||
// Text input for search
|
||||
sp := spinner.NewModel()
|
||||
sp.ForegroundColor = statusBarNoteFg.String()
|
||||
sp.BackgroundColor = statusBarBg.String()
|
||||
sp.Style = spinnerStyle
|
||||
sp.HideFor = time.Millisecond * 50
|
||||
sp.MinimumLifetime = time.Millisecond * 180
|
||||
|
||||
|
|
54
ui/stash.go
54
ui/stash.go
|
@ -14,10 +14,9 @@ import (
|
|||
"github.com/charmbracelet/bubbles/textinput"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/charm"
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/muesli/reflow/ansi"
|
||||
"github.com/muesli/reflow/truncate"
|
||||
te "github.com/muesli/termenv"
|
||||
"github.com/sahilm/fuzzy"
|
||||
)
|
||||
|
||||
|
@ -35,10 +34,23 @@ var (
|
|||
)
|
||||
|
||||
var (
|
||||
stashTextInputPromptStyle styleFunc = newFgStyle(lib.YellowGreen)
|
||||
dividerDot string = darkGrayFg(" • ")
|
||||
dividerBar string = darkGrayFg(" │ ")
|
||||
offlineHeaderNote string = darkGrayFg("(Offline)")
|
||||
dividerDot = darkGrayFg(" • ")
|
||||
dividerBar = darkGrayFg(" │ ")
|
||||
offlineHeaderNote = darkGrayFg("(Offline)")
|
||||
|
||||
logoStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.Color("#ECFD65")).
|
||||
Background(fuschia).
|
||||
Bold(true)
|
||||
|
||||
stashSpinnerStyle = lipgloss.NewStyle().
|
||||
Foreground(gray)
|
||||
stashInputPromptStyle = lipgloss.NewStyle().
|
||||
Foreground(yellowGreen).
|
||||
MarginRight(1)
|
||||
stashInputCursorStyle = lipgloss.NewStyle().
|
||||
Foreground(fuschia).
|
||||
MarginRight(1)
|
||||
)
|
||||
|
||||
// MSG
|
||||
|
@ -499,20 +511,22 @@ func (m *stashModel) moveCursorDown() {
|
|||
func newStashModel(common *commonModel) stashModel {
|
||||
sp := spinner.NewModel()
|
||||
sp.Spinner = spinner.Line
|
||||
sp.ForegroundColor = lib.SpinnerColor.String()
|
||||
sp.Style = stashSpinnerStyle
|
||||
sp.HideFor = time.Millisecond * 100
|
||||
sp.MinimumLifetime = time.Millisecond * 180
|
||||
sp.Start()
|
||||
|
||||
ni := textinput.NewModel()
|
||||
ni.Prompt = stashTextInputPromptStyle("Memo: ")
|
||||
ni.CursorColor = lib.Fuschia.String()
|
||||
ni.Prompt = "Memo:"
|
||||
ni.PromptStyle = stashInputPromptStyle
|
||||
ni.CursorStyle = stashInputCursorStyle
|
||||
ni.CharLimit = noteCharacterLimit
|
||||
ni.Focus()
|
||||
|
||||
si := textinput.NewModel()
|
||||
si.Prompt = stashTextInputPromptStyle("Find: ")
|
||||
si.CursorColor = lib.Fuschia.String()
|
||||
si.Prompt = "Find:"
|
||||
si.PromptStyle = stashInputPromptStyle
|
||||
si.CursorStyle = stashInputCursorStyle
|
||||
si.CharLimit = noteCharacterLimit
|
||||
si.Focus()
|
||||
|
||||
|
@ -1195,7 +1209,7 @@ func (m stashModel) view() string {
|
|||
// pointers in our model should be refactored away.
|
||||
var p paginator.Model = *(m.paginator())
|
||||
p.Type = paginator.Arabic
|
||||
pagination = lib.Subtle(p.View())
|
||||
pagination = paginationStyle.Render(p.View())
|
||||
}
|
||||
|
||||
// We could also look at m.stashFullyLoaded and add an indicator
|
||||
|
@ -1218,11 +1232,7 @@ func (m stashModel) view() string {
|
|||
}
|
||||
|
||||
func glowLogoView(text string) string {
|
||||
return te.String(text).
|
||||
Bold().
|
||||
Foreground(glowLogoTextColor).
|
||||
Background(lib.Fuschia.Color()).
|
||||
String()
|
||||
return logoStyle.Render(text)
|
||||
}
|
||||
|
||||
func (m stashModel) headerView() string {
|
||||
|
@ -1258,9 +1268,9 @@ func (m stashModel) headerView() string {
|
|||
}
|
||||
|
||||
if m.stashedOnly() {
|
||||
return lib.Subtle("Can’t load stash") + maybeOffline
|
||||
return subtleStyle.Render("Can’t load stash") + maybeOffline
|
||||
}
|
||||
return lib.Subtle("No markdown files found") + maybeOffline
|
||||
return subtleStyle.Render("No markdown files found") + maybeOffline
|
||||
}
|
||||
|
||||
// Tabs
|
||||
|
@ -1288,9 +1298,9 @@ func (m stashModel) headerView() string {
|
|||
}
|
||||
|
||||
if m.sectionIndex == i && len(m.sections) > 1 {
|
||||
s = selectedTabColor(s)
|
||||
s = selectedTabStyle.Render(s)
|
||||
} else {
|
||||
s = tabColor(s)
|
||||
s = tabStyle.Render(s)
|
||||
}
|
||||
sections = append(sections, s)
|
||||
}
|
||||
|
@ -1379,7 +1389,7 @@ func loadRemoteMarkdown(cc *charm.Client, md *markdown) tea.Cmd {
|
|||
newMD, err := fetchMarkdown(cc, md.ID, md.docType)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Printf("error loading %s markdown (ID %d, Note: '%s'): %v", md.docType, md.ID, md.Note, err)
|
||||
log.Printf("error loading %s markdown (ID %s, Note: '%s'): %v", md.docType, md.ID, md.Note, err)
|
||||
}
|
||||
return markdownFetchFailedMsg{
|
||||
err: err,
|
||||
|
|
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/muesli/reflow/ansi"
|
||||
)
|
||||
|
||||
|
@ -195,7 +194,7 @@ func (m stashModel) miniHelpView(entries ...string) string {
|
|||
}
|
||||
|
||||
var (
|
||||
truncationChar = lib.Subtle("…")
|
||||
truncationChar = subtleStyle.Render("…")
|
||||
truncationWidth = ansi.PrintableRuneWidth(truncationChar)
|
||||
)
|
||||
|
||||
|
|
|
@ -5,10 +5,9 @@ import (
|
|||
"log"
|
||||
"strings"
|
||||
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/muesli/reflow/ansi"
|
||||
"github.com/muesli/reflow/truncate"
|
||||
"github.com/muesli/termenv"
|
||||
"github.com/sahilm/fuzzy"
|
||||
)
|
||||
|
||||
|
@ -77,8 +76,8 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
icon = dullFuchsiaFg(icon)
|
||||
if m.currentSection().key == filterSection &&
|
||||
m.filterState == filterApplied || singleFilteredItem {
|
||||
s := termenv.Style{}.Foreground(lib.Fuschia.Color())
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Underline())
|
||||
s := lipgloss.NewStyle().Foreground(fuschia)
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Copy().Underline(true))
|
||||
} else {
|
||||
title = fuchsiaFg(title)
|
||||
}
|
||||
|
@ -100,8 +99,8 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
title = dimIndigoFg(title)
|
||||
date = dimSubtleIndigoFg(date)
|
||||
} else {
|
||||
s := termenv.Style{}.Foreground(lib.Indigo.Color())
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Underline())
|
||||
s := lipgloss.NewStyle().Foreground(indigo)
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Copy().Underline(true))
|
||||
date = subtleIndigoFg(date)
|
||||
}
|
||||
} else if isFiltering && m.filterInput.Value() == "" {
|
||||
|
@ -117,8 +116,8 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
if title == noMemoTitle {
|
||||
title = brightGrayFg(title)
|
||||
} else {
|
||||
s := termenv.Style{}.Foreground(lib.NewColorPair("#dddddd", "#1a1a1a").Color())
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Underline())
|
||||
s := lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#1a1a1a", Dark: "#dddddd"})
|
||||
title = styleFilteredText(title, m.filterInput.Value(), s, s.Copy().Underline(true))
|
||||
}
|
||||
date = brightGrayFg(date)
|
||||
}
|
||||
|
@ -128,7 +127,7 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
fmt.Fprintf(b, "%s %s", gutter, date)
|
||||
}
|
||||
|
||||
func styleFilteredText(haystack, needles string, defaultStyle, matchedStyle termenv.Style) string {
|
||||
func styleFilteredText(haystack, needles string, defaultStyle, matchedStyle lipgloss.Style) string {
|
||||
b := strings.Builder{}
|
||||
|
||||
normalizedHay, err := normalize(haystack)
|
||||
|
@ -138,7 +137,7 @@ func styleFilteredText(haystack, needles string, defaultStyle, matchedStyle term
|
|||
|
||||
matches := fuzzy.Find(needles, []string{normalizedHay})
|
||||
if len(matches) == 0 {
|
||||
return defaultStyle.Styled(haystack)
|
||||
return defaultStyle.Render(haystack)
|
||||
}
|
||||
|
||||
m := matches[0] // only one match exists
|
||||
|
@ -146,12 +145,12 @@ func styleFilteredText(haystack, needles string, defaultStyle, matchedStyle term
|
|||
styled := false
|
||||
for _, mi := range m.MatchedIndexes {
|
||||
if i == mi {
|
||||
b.WriteString(matchedStyle.Styled(string(rune)))
|
||||
b.WriteString(matchedStyle.Render(string(rune)))
|
||||
styled = true
|
||||
}
|
||||
}
|
||||
if !styled {
|
||||
b.WriteString(defaultStyle.Styled(string(rune)))
|
||||
b.WriteString(defaultStyle.Render(string(rune)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
120
ui/styles.go
120
ui/styles.go
|
@ -1,63 +1,85 @@
|
|||
package ui
|
||||
|
||||
import (
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
te "github.com/muesli/termenv"
|
||||
. "github.com/charmbracelet/lipgloss"
|
||||
)
|
||||
|
||||
type styleFunc func(string) string
|
||||
// Colors.
|
||||
var (
|
||||
normal = AdaptiveColor{Light: "#1A1A1A", Dark: "#dddddd"}
|
||||
normalDim = AdaptiveColor{Light: "#A49FA5", Dark: "#777777"}
|
||||
gray = AdaptiveColor{Light: "#909090", Dark: "#626262"}
|
||||
midGray = AdaptiveColor{Light: "#B2B2B2", Dark: "#4A4A4A"}
|
||||
darkGray = AdaptiveColor{Light: "#DDDADA", Dark: "#3C3C3C"}
|
||||
brightGray = AdaptiveColor{Light: "#847A85", Dark: "#979797"}
|
||||
dimBrightGray = AdaptiveColor{Light: "#C2B8C2", Dark: "#4D4D4D"}
|
||||
indigo = AdaptiveColor{Light: "#5A56E0", Dark: "#7571F9"}
|
||||
dimIndigo = AdaptiveColor{Light: "#9498FF", Dark: "#494690"}
|
||||
subtleIndigo = AdaptiveColor{Light: "#7D79F6", Dark: "#514DC1"}
|
||||
dimSubtleIndigo = AdaptiveColor{Light: "#BBBDFF", Dark: "#383584"}
|
||||
cream = AdaptiveColor{Light: "#FFFDF5", Dark: "#FFFDF5"}
|
||||
yellowGreen = AdaptiveColor{Light: "#04B575", Dark: "#ECFD65"}
|
||||
dullYellowGreen = AdaptiveColor{Light: "#6BCB94", Dark: "#9BA92F"}
|
||||
fuschia = AdaptiveColor{Light: "#EE6FF8", Dark: "#EE6FF8"}
|
||||
dimFuchsia = AdaptiveColor{Light: "#F1A8FF", Dark: "#99519E"}
|
||||
dullFuchsia = AdaptiveColor{Dark: "#AD58B4", Light: "#F793FF"}
|
||||
dimDullFuchsia = AdaptiveColor{Light: "#F6C9FF", Dark: "#6B3A6F"}
|
||||
green = Color("#04B575")
|
||||
red = AdaptiveColor{Light: "#FF4672", Dark: "#ED567A"}
|
||||
faintRed = AdaptiveColor{Light: "#FF6F91", Dark: "#C74665"}
|
||||
|
||||
const (
|
||||
darkGray = "#333333"
|
||||
semiDimGreen = AdaptiveColor{Light: "#35D79C", Dark: "#036B46"}
|
||||
dimGreen = AdaptiveColor{Light: "#72D2B0", Dark: "#0B5137"}
|
||||
)
|
||||
|
||||
// Ulimately, we'll transition to named styles.
|
||||
var (
|
||||
normalFg = NewStyle().Foreground(normal).Render
|
||||
dimNormalFg = NewStyle().Foreground(normalDim).Render
|
||||
|
||||
brightGrayFg = NewStyle().Foreground(brightGray).Render
|
||||
dimBrightGrayFg = NewStyle().Foreground(dimBrightGray).Render
|
||||
|
||||
grayFg = NewStyle().Foreground(gray).Render
|
||||
midGrayFg = NewStyle().Foreground(midGray).Render
|
||||
darkGrayFg = NewStyle().Foreground(darkGray).Render
|
||||
|
||||
greenFg = NewStyle().Foreground(green).Render
|
||||
semiDimGreenFg = NewStyle().Foreground(semiDimGreen).Render
|
||||
dimGreenFg = NewStyle().Foreground(dimGreen).Render
|
||||
|
||||
fuchsiaFg = NewStyle().Foreground(fuschia).Render
|
||||
dimFuchsiaFg = NewStyle().Foreground(dimFuchsia).Render
|
||||
|
||||
dullFuchsiaFg = NewStyle().Foreground(dullFuchsia).Render
|
||||
dimDullFuchsiaFg = NewStyle().Foreground(dimDullFuchsia).Render
|
||||
|
||||
indigoFg = NewStyle().Foreground(fuschia).Render
|
||||
dimIndigoFg = NewStyle().Foreground(dimIndigo).Render
|
||||
|
||||
subtleIndigoFg = NewStyle().Foreground(subtleIndigo).Render
|
||||
dimSubtleIndigoFg = NewStyle().Foreground(dimSubtleIndigo).Render
|
||||
|
||||
yellowFg = NewStyle().Foreground(yellowGreen).Render // renders light green on light backgrounds
|
||||
dullYellowFg = NewStyle().Foreground(dullYellowGreen).Render // renders light green on light backgrounds
|
||||
redFg = NewStyle().Foreground(red).Render
|
||||
faintRedFg = NewStyle().Foreground(faintRed).Render
|
||||
)
|
||||
|
||||
var (
|
||||
normalFg = newFgStyle(lib.NewColorPair("#dddddd", "#1a1a1a"))
|
||||
dimNormalFg = newFgStyle(lib.NewColorPair("#777777", "#A49FA5"))
|
||||
tabStyle = NewStyle().
|
||||
Foreground(AdaptiveColor{Light: "#909090", Dark: "#626262"})
|
||||
|
||||
brightGrayFg = newFgStyle(lib.NewColorPair("#979797", "#847A85"))
|
||||
dimBrightGrayFg = newFgStyle(lib.NewColorPair("#4D4D4D", "#C2B8C2"))
|
||||
selectedTabStyle = NewStyle().
|
||||
Foreground(AdaptiveColor{Light: "#333333", Dark: "#979797"})
|
||||
|
||||
grayFg = newFgStyle(lib.NewColorPair("#626262", "#909090"))
|
||||
midGrayFg = newFgStyle(lib.NewColorPair("#4A4A4A", "#B2B2B2"))
|
||||
darkGrayFg = newFgStyle(lib.NewColorPair("#3C3C3C", "#DDDADA"))
|
||||
errorTitleStyle = NewStyle().
|
||||
Foreground(cream).
|
||||
Background(red).
|
||||
Padding(0, 1)
|
||||
|
||||
greenFg = newFgStyle(lib.NewColorPair("#04B575", "#04B575"))
|
||||
semiDimGreenFg = newFgStyle(lib.NewColorPair("#036B46", "#35D79C"))
|
||||
dimGreenFg = newFgStyle(lib.NewColorPair("#0B5137", "#72D2B0"))
|
||||
subtleStyle = NewStyle().
|
||||
Foreground(AdaptiveColor{Light: "#9B9B9B", Dark: "#5C5C5C"})
|
||||
|
||||
fuchsiaFg = newFgStyle(lib.Fuschia)
|
||||
dimFuchsiaFg = newFgStyle(lib.NewColorPair("#99519E", "#F1A8FF"))
|
||||
|
||||
dullFuchsiaFg = newFgStyle(lib.NewColorPair("#AD58B4", "#F793FF"))
|
||||
dimDullFuchsiaFg = newFgStyle(lib.NewColorPair("#6B3A6F", "#F6C9FF"))
|
||||
|
||||
indigoFg = newFgStyle(lib.Indigo)
|
||||
dimIndigoFg = newFgStyle(lib.NewColorPair("#494690", "#9498FF"))
|
||||
|
||||
subtleIndigoFg = newFgStyle(lib.NewColorPair("#514DC1", "#7D79F6"))
|
||||
dimSubtleIndigoFg = newFgStyle(lib.NewColorPair("#383584", "#BBBDFF"))
|
||||
|
||||
yellowFg = newFgStyle(lib.YellowGreen) // renders light green on light backgrounds
|
||||
dullYellowFg = newFgStyle(lib.NewColorPair("#9BA92F", "#6BCB94")) // renders light green on light backgrounds
|
||||
redFg = newFgStyle(lib.Red)
|
||||
faintRedFg = newFgStyle(lib.FaintRed)
|
||||
|
||||
// Ultimately, we should transition to named styles
|
||||
tabColor = newFgStyle(lib.NewColorPair("#626262", "#909090"))
|
||||
selectedTabColor = newFgStyle(lib.NewColorPair("#979797", "#332F33"))
|
||||
paginationStyle = subtleStyle.Copy()
|
||||
)
|
||||
|
||||
// Returns a termenv style with foreground and background options.
|
||||
func newStyle(fg, bg lib.ColorPair, bold bool) func(string) string {
|
||||
s := te.Style{}.Foreground(fg.Color()).Background(bg.Color())
|
||||
if bold {
|
||||
s = s.Bold()
|
||||
}
|
||||
return s.Styled
|
||||
}
|
||||
|
||||
// Returns a new termenv style with background options only.
|
||||
func newFgStyle(c lib.ColorPair) styleFunc {
|
||||
return te.Style{}.Foreground(c.Color()).Styled
|
||||
}
|
||||
|
|
53
ui/ui.go
53
ui/ui.go
|
@ -14,8 +14,7 @@ import (
|
|||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/charm"
|
||||
"github.com/charmbracelet/charm/keygen"
|
||||
"github.com/charmbracelet/charm/ui/common"
|
||||
lib "github.com/charmbracelet/charm/ui/common"
|
||||
"github.com/charmbracelet/charm/ui/keygen"
|
||||
"github.com/charmbracelet/glow/utils"
|
||||
"github.com/muesli/gitcha"
|
||||
te "github.com/muesli/termenv"
|
||||
|
@ -30,7 +29,6 @@ const (
|
|||
|
||||
var (
|
||||
config Config
|
||||
glowLogoTextColor = lib.Color("#ECFD65")
|
||||
|
||||
markdownExtensions = []string{
|
||||
"*.md", "*.mdown", "*.mkdn", "*.mkd", "*.markdown",
|
||||
|
@ -53,33 +51,41 @@ func NewProgram(cfg Config) *tea.Program {
|
|||
debug = true
|
||||
}
|
||||
config = cfg
|
||||
return tea.NewProgram(newModel(cfg))
|
||||
opts := []tea.ProgramOption{tea.WithAltScreen()}
|
||||
if cfg.EnableMouse {
|
||||
opts = append(opts, tea.WithMouseCellMotion())
|
||||
}
|
||||
return tea.NewProgram(newModel(cfg), opts...)
|
||||
}
|
||||
|
||||
type errMsg struct{ err error }
|
||||
|
||||
func (e errMsg) Error() string { return e.err.Error() }
|
||||
|
||||
type newCharmClientMsg *charm.Client
|
||||
type sshAuthErrMsg struct{}
|
||||
type keygenFailedMsg struct{ err error }
|
||||
type keygenSuccessMsg struct{}
|
||||
type initLocalFileSearchMsg struct {
|
||||
type (
|
||||
newCharmClientMsg *charm.Client
|
||||
sshAuthErrMsg struct{}
|
||||
keygenFailedMsg struct{ err error }
|
||||
keygenSuccessMsg struct{}
|
||||
initLocalFileSearchMsg struct {
|
||||
cwd string
|
||||
ch chan gitcha.SearchResult
|
||||
}
|
||||
type foundLocalFileMsg gitcha.SearchResult
|
||||
type localFileSearchFinished struct{}
|
||||
type gotStashMsg []*charm.Markdown
|
||||
type stashLoadErrMsg struct{ err error }
|
||||
type gotNewsMsg []*charm.Markdown
|
||||
type statusMessageTimeoutMsg applicationContext
|
||||
type newsLoadErrMsg struct{ err error }
|
||||
type stashSuccessMsg markdown
|
||||
type stashFailMsg struct {
|
||||
}
|
||||
)
|
||||
type (
|
||||
foundLocalFileMsg gitcha.SearchResult
|
||||
localFileSearchFinished struct{}
|
||||
gotStashMsg []*charm.Markdown
|
||||
stashLoadErrMsg struct{ err error }
|
||||
gotNewsMsg []*charm.Markdown
|
||||
statusMessageTimeoutMsg applicationContext
|
||||
newsLoadErrMsg struct{ err error }
|
||||
stashSuccessMsg markdown
|
||||
stashFailMsg struct {
|
||||
err error
|
||||
markdown markdown
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
// applicationContext indicates the area of the application something appies
|
||||
// to. Occasionally used as an argument to commands and messages.
|
||||
|
@ -455,12 +461,9 @@ func errorView(err error, fatal bool) string {
|
|||
exitMsg += "return"
|
||||
}
|
||||
s := fmt.Sprintf("%s\n\n%v\n\n%s",
|
||||
te.String(" ERROR ").
|
||||
Foreground(lib.Cream.Color()).
|
||||
Background(lib.Red.Color()).
|
||||
String(),
|
||||
errorTitleStyle.Render("ERROR"),
|
||||
err,
|
||||
common.Subtle(exitMsg),
|
||||
subtleStyle.Render(exitMsg),
|
||||
)
|
||||
return "\n" + indent(s, 3)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue