Created
February 5, 2020 15:04
-
-
Save penguwin/aefd5df4ed798a5b87d44de79b16f3b0 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
diff --git a/command/issue.go b/command/issue.go | |
index b9987d0..6ef9407 100644 | |
--- a/command/issue.go | |
+++ b/command/issue.go | |
@@ -10,6 +10,7 @@ import ( | |
"strings" | |
"time" | |
+ "github.com/charmbracelet/glamour" | |
"github.com/cli/cli/api" | |
"github.com/cli/cli/git" | |
"github.com/cli/cli/internal/ghrepo" | |
@@ -232,8 +233,7 @@ func issueView(cmd *cobra.Command, args []string) error { | |
if preview { | |
out := colorableOut(cmd) | |
- printIssuePreview(out, issue) | |
- return nil | |
+ return printIssuePreview(out, issue) | |
} else { | |
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL) | |
return utils.OpenInBrowser(openURL) | |
@@ -241,7 +241,7 @@ func issueView(cmd *cobra.Command, args []string) error { | |
} | |
-func printIssuePreview(out io.Writer, issue *api.Issue) { | |
+func printIssuePreview(out io.Writer, issue *api.Issue) error { | |
coloredLabels := labelList(*issue) | |
if coloredLabels != "" { | |
coloredLabels = utils.Gray(fmt.Sprintf("(%s)", coloredLabels)) | |
@@ -255,9 +255,14 @@ func printIssuePreview(out io.Writer, issue *api.Issue) { | |
coloredLabels, | |
))) | |
fmt.Fprintln(out) | |
- fmt.Fprintln(out, utils.RenderMarkdown(issue.Body)) | |
+ md, err := glamour.Render(issue.Body, "dark") | |
+ if err != nil { | |
+ return err | |
+ } | |
+ fmt.Fprintln(out, md) | |
fmt.Fprintln(out) | |
fmt.Fprintf(out, utils.Gray("View this issue on GitHub: %s\n"), issue.URL) | |
+ return nil | |
} | |
var issueURLRE = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/issues/(\d+)`) | |
diff --git a/command/pr.go b/command/pr.go | |
index 624deba..ba9f01b 100644 | |
--- a/command/pr.go | |
+++ b/command/pr.go | |
@@ -10,6 +10,7 @@ import ( | |
"strconv" | |
"strings" | |
+ "github.com/charmbracelet/glamour" | |
"github.com/cli/cli/api" | |
"github.com/cli/cli/context" | |
"github.com/cli/cli/git" | |
@@ -303,15 +304,14 @@ func prView(cmd *cobra.Command, args []string) error { | |
if preview { | |
out := colorableOut(cmd) | |
- printPrPreview(out, pr) | |
- return nil | |
+ return printPrPreview(out, pr) | |
} else { | |
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL) | |
return utils.OpenInBrowser(openURL) | |
} | |
} | |
-func printPrPreview(out io.Writer, pr *api.PullRequest) { | |
+func printPrPreview(out io.Writer, pr *api.PullRequest) error { | |
fmt.Fprintln(out, utils.Bold(pr.Title)) | |
fmt.Fprintln(out, utils.Gray(fmt.Sprintf( | |
"%s wants to merge %s into %s from %s", | |
@@ -321,9 +321,14 @@ func printPrPreview(out io.Writer, pr *api.PullRequest) { | |
pr.HeadRefName, | |
))) | |
fmt.Fprintln(out) | |
- fmt.Fprintln(out, utils.RenderMarkdown(pr.Body)) | |
+ md, err := glamour.Render(pr.Body, "dark") | |
+ if err != nil { | |
+ return err | |
+ } | |
+ fmt.Fprintln(out, md) | |
fmt.Fprintln(out) | |
fmt.Fprintf(out, utils.Gray("View this pull request on GitHub: %s\n"), pr.URL) | |
+ return nil | |
} | |
var prURLRE = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) | |
diff --git a/go.mod b/go.mod | |
index 1064845..c2b7126 100644 | |
--- a/go.mod | |
+++ b/go.mod | |
@@ -4,6 +4,7 @@ go 1.13 | |
require ( | |
github.com/AlecAivazis/survey/v2 v2.0.4 | |
+ github.com/charmbracelet/glamour v0.1.0 | |
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 | |
github.com/hashicorp/go-version v1.2.0 | |
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 | |
diff --git a/go.sum b/go.sum | |
index 7980690..f735e8f 100644 | |
--- a/go.sum | |
+++ b/go.sum | |
@@ -11,6 +11,8 @@ github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm | |
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= | |
github.com/alecthomas/chroma v0.6.8 h1:TW4JJaIdbAbMyUtGEd6BukFlOKYvVQz3vVhLBEUNwMU= | |
github.com/alecthomas/chroma v0.6.8/go.mod h1:o9ohftueRi7H5be3+Q2cQCNa/YnLBFUNx40ZJfGVFKA= | |
+github.com/alecthomas/chroma v0.7.0 h1:z+0HgTUmkpRDRz0SRSdMaqOLfJV4F+N1FPDZUZIDUzw= | |
+github.com/alecthomas/chroma v0.7.0/go.mod h1:1U/PfCsTALWWYHDnsIQkxEBM0+6LLe0v8+RSVMOwxeY= | |
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.1.17-0.20190424132513-439c674f7ae0/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= | |
@@ -21,6 +23,8 @@ github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1p | |
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= | |
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= | |
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= | |
+github.com/charmbracelet/glamour v0.1.0 h1:BHCtc+YJjoBjNUnFKBtXyyM4Bp9u7L2kf49qV+/AGYw= | |
+github.com/charmbracelet/glamour v0.1.0/go.mod h1:Z1C2JkVGBom/RYfoKcPBZ81lHMR3xp3W6OCLNWWEIMc= | |
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | |
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= | |
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | |
@@ -56,6 +60,10 @@ github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ= | |
github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | |
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= | |
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | |
+github.com/logrusorgru/aurora v0.0.0-20191116043053-66b7ad493a23 h1:Wp7NjqGKGN9te9N/rvXYRhlVcrulGdxnz8zadXWs7fc= | |
+github.com/logrusorgru/aurora v0.0.0-20191116043053-66b7ad493a23/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= | |
+github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= | |
+github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= | |
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | |
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= | |
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= | |
@@ -64,14 +72,22 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx | |
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | |
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= | |
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= | |
+github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= | |
+github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= | |
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= | |
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= | |
+github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= | |
+github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= | |
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | |
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | |
github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= | |
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= | |
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | |
+github.com/muesli/reflow v0.0.0-20191216070243-e5efeac4e302 h1:jOh3Kh03uOFkRPV3PI4Am5tqACv2aELgbPgr7YgNX00= | |
+github.com/muesli/reflow v0.0.0-20191216070243-e5efeac4e302/go.mod h1:I9bWAt7QTg/que/qmUCJBGlj7wEq8OAFBjPNjc6xK4I= | |
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= | |
+github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= | |
+github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= | |
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | |
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= | |
@@ -113,11 +129,15 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU | |
github.com/vilmibm/go-termd v0.0.4 h1:uCmDUZ3qZUblTN/D5Hvl+g1rTJj/HW746JQFWidqAyk= | |
github.com/vilmibm/go-termd v0.0.4/go.mod h1:ys+dRO6wlM3el0vPJmYBkhOPPozViBgDXHOEn1x5Vsc= | |
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= | |
+github.com/yuin/goldmark v1.1.19 h1:0s2/60x0XsFCXHeFut+F3azDVAAyIMyUfJRbRexiTYs= | |
+github.com/yuin/goldmark v1.1.19/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0= | |
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | |
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | |
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc= | |
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= | |
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
diff --git a/utils/utils.go b/utils/utils.go | |
index fbd7e84..d9de9d4 100644 | |
--- a/utils/utils.go | |
+++ b/utils/utils.go | |
@@ -1,12 +1,10 @@ | |
package utils | |
import ( | |
- "bytes" | |
"fmt" | |
"time" | |
"github.com/cli/cli/pkg/browser" | |
- md "github.com/vilmibm/go-termd" | |
) | |
// OpenInBrowser opens the url in a web browser based on OS and $BROWSER environment variable | |
@@ -18,34 +16,6 @@ func OpenInBrowser(url string) error { | |
return PrepareCmd(browseCmd).Run() | |
} | |
-func normalizeNewlines(d []byte) []byte { | |
- d = bytes.Replace(d, []byte("\r\n"), []byte("\n"), -1) | |
- d = bytes.Replace(d, []byte("\r"), []byte("\n"), -1) | |
- return d | |
-} | |
- | |
-func RenderMarkdown(text string) string { | |
- textB := []byte(text) | |
- textB = normalizeNewlines(textB) | |
- mdCompiler := md.Compiler{ | |
- Columns: 100, | |
- SyntaxHighlighter: md.SyntaxTheme{ | |
- "keyword": md.Style{Color: "#9196ed"}, | |
- "comment": md.Style{ | |
- Color: "#c0c0c2", | |
- }, | |
- "literal": md.Style{ | |
- Color: "#aaedf7", | |
- }, | |
- "name": md.Style{ | |
- Color: "#fe8eb5", | |
- }, | |
- }, | |
- } | |
- | |
- return mdCompiler.Compile(string(textB)) | |
-} | |
- | |
func Pluralize(num int, thing string) string { | |
if num == 1 { | |
return fmt.Sprintf("%d %s", num, thing) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment