mirror of https://github.com/cheat/cheat.git
feat: implement `--all` flag
Implement an `--all` flag that can be used to view cheatsheets on all chaetpaths. (Resolves #548)
This commit is contained in:
parent
aa16f68620
commit
233a9de1aa
|
@ -30,9 +30,37 @@ func cmdView(opts map[string]interface{}, conf config.Config) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// consolidate the cheatsheets found on all paths into a single map of
|
// if --all was passed, display cheatsheets from all cheatpaths
|
||||||
// `title` => `sheet` (ie, allow more local cheatsheets to override less
|
if opts["--all"].(bool) {
|
||||||
// local cheatsheets)
|
// iterate over the cheatpaths
|
||||||
|
for _, cheatpath := range cheatsheets {
|
||||||
|
|
||||||
|
// if the cheatpath contains the specified cheatsheet, display it
|
||||||
|
if sheet, ok := cheatpath[cheatsheet]; ok {
|
||||||
|
|
||||||
|
// identify the matching cheatsheet
|
||||||
|
fmt.Println(fmt.Sprintf("%s %s",
|
||||||
|
display.Underline(sheet.Title),
|
||||||
|
display.Faint(fmt.Sprintf("(%s)", sheet.CheatPath)),
|
||||||
|
))
|
||||||
|
|
||||||
|
// apply colorization if requested
|
||||||
|
if conf.Color(opts) {
|
||||||
|
sheet.Colorize(conf)
|
||||||
|
}
|
||||||
|
|
||||||
|
// display the cheatsheet
|
||||||
|
display.Display(display.Indent(sheet.Text), conf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// exit early
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// otherwise, consolidate the cheatsheets found on all paths into a single
|
||||||
|
// map of `title` => `sheet` (ie, allow more local cheatsheets to override
|
||||||
|
// less local cheatsheets)
|
||||||
consolidated := sheets.Consolidate(cheatsheets)
|
consolidated := sheets.Consolidate(cheatsheets)
|
||||||
|
|
||||||
// fail early if the requested cheatsheet does not exist
|
// fail early if the requested cheatsheet does not exist
|
||||||
|
|
|
@ -3,11 +3,12 @@ Usage:
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--init Write a default config file to stdout
|
--init Write a default config file to stdout
|
||||||
|
-a --all Search among all cheatpaths
|
||||||
-c --colorize Colorize output
|
-c --colorize Colorize output
|
||||||
-d --directories List cheatsheet directories
|
-d --directories List cheatsheet directories
|
||||||
-e --edit=<cheatsheet> Edit <cheatsheet>
|
-e --edit=<cheatsheet> Edit <cheatsheet>
|
||||||
-l --list List cheatsheets
|
-l --list List cheatsheets
|
||||||
-p --path=<name> Return only sheets found on path <name>
|
-p --path=<name> Return only sheets found on cheatpath <name>
|
||||||
-r --regex Treat search <phrase> as a regex
|
-r --regex Treat search <phrase> as a regex
|
||||||
-s --search=<phrase> Search cheatsheets for <phrase>
|
-s --search=<phrase> Search cheatsheets for <phrase>
|
||||||
-t --tag=<tag> Return only sheets matching <tag>
|
-t --tag=<tag> Return only sheets matching <tag>
|
||||||
|
|
|
@ -12,11 +12,12 @@ func usage() string {
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--init Write a default config file to stdout
|
--init Write a default config file to stdout
|
||||||
|
-a --all Search among all cheatpaths
|
||||||
-c --colorize Colorize output
|
-c --colorize Colorize output
|
||||||
-d --directories List cheatsheet directories
|
-d --directories List cheatsheet directories
|
||||||
-e --edit=<cheatsheet> Edit <cheatsheet>
|
-e --edit=<cheatsheet> Edit <cheatsheet>
|
||||||
-l --list List cheatsheets
|
-l --list List cheatsheets
|
||||||
-p --path=<name> Return only sheets found on path <name>
|
-p --path=<name> Return only sheets found on cheatpath <name>
|
||||||
-r --regex Treat search <phrase> as a regex
|
-r --regex Treat search <phrase> as a regex
|
||||||
-s --search=<phrase> Search cheatsheets for <phrase>
|
-s --search=<phrase> Search cheatsheets for <phrase>
|
||||||
-t --tag=<tag> Return only sheets matching <tag>
|
-t --tag=<tag> Return only sheets matching <tag>
|
||||||
|
|
|
@ -25,7 +25,7 @@ func TestCopyFlat(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// mock a cheatsheet struct
|
// mock a cheatsheet struct
|
||||||
sheet, err := New("foo", src.Name(), []string{}, false)
|
sheet, err := New("foo", "community", src.Name(), []string{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to init cheatsheet: %v", err)
|
t.Errorf("failed to init cheatsheet: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,13 @@ func TestCopyDeep(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// mock a cheatsheet struct
|
// mock a cheatsheet struct
|
||||||
sheet, err := New("/cheat-tests/alpha/bravo/foo", src.Name(), []string{}, false)
|
sheet, err := New(
|
||||||
|
"/cheat-tests/alpha/bravo/foo",
|
||||||
|
"community",
|
||||||
|
src.Name(),
|
||||||
|
[]string{},
|
||||||
|
false,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to init cheatsheet: %v", err)
|
t.Errorf("failed to init cheatsheet: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
// Sheet encapsulates sheet information
|
// Sheet encapsulates sheet information
|
||||||
type Sheet struct {
|
type Sheet struct {
|
||||||
Title string
|
Title string
|
||||||
|
CheatPath string
|
||||||
Path string
|
Path string
|
||||||
Text string
|
Text string
|
||||||
Tags []string
|
Tags []string
|
||||||
|
@ -21,6 +22,7 @@ type Sheet struct {
|
||||||
// New initializes a new Sheet
|
// New initializes a new Sheet
|
||||||
func New(
|
func New(
|
||||||
title string,
|
title string,
|
||||||
|
cheatpath string,
|
||||||
path string,
|
path string,
|
||||||
tags []string,
|
tags []string,
|
||||||
readOnly bool,
|
readOnly bool,
|
||||||
|
@ -47,6 +49,7 @@ func New(
|
||||||
// initialize and return a sheet
|
// initialize and return a sheet
|
||||||
return Sheet{
|
return Sheet{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
CheatPath: cheatpath,
|
||||||
Path: path,
|
Path: path,
|
||||||
Text: text + "\n",
|
Text: text + "\n",
|
||||||
Tags: tags,
|
Tags: tags,
|
||||||
|
|
|
@ -13,6 +13,7 @@ func TestSheetSuccess(t *testing.T) {
|
||||||
// initialize a sheet
|
// initialize a sheet
|
||||||
sheet, err := New(
|
sheet, err := New(
|
||||||
"foo",
|
"foo",
|
||||||
|
"community",
|
||||||
mock.Path("sheet/foo"),
|
mock.Path("sheet/foo"),
|
||||||
[]string{"alpha", "bravo"},
|
[]string{"alpha", "bravo"},
|
||||||
false,
|
false,
|
||||||
|
@ -61,6 +62,7 @@ func TestSheetFailure(t *testing.T) {
|
||||||
// initialize a sheet
|
// initialize a sheet
|
||||||
_, err := New(
|
_, err := New(
|
||||||
"foo",
|
"foo",
|
||||||
|
"community",
|
||||||
mock.Path("/does-not-exist"),
|
mock.Path("/does-not-exist"),
|
||||||
[]string{"alpha", "bravo"},
|
[]string{"alpha", "bravo"},
|
||||||
false,
|
false,
|
||||||
|
@ -77,6 +79,7 @@ func TestSheetFrontMatterFailure(t *testing.T) {
|
||||||
// initialize a sheet
|
// initialize a sheet
|
||||||
_, err := New(
|
_, err := New(
|
||||||
"foo",
|
"foo",
|
||||||
|
"community",
|
||||||
mock.Path("sheet/bad-fm"),
|
mock.Path("sheet/bad-fm"),
|
||||||
[]string{"alpha", "bravo"},
|
[]string{"alpha", "bravo"},
|
||||||
false,
|
false,
|
||||||
|
|
|
@ -59,7 +59,13 @@ func Load(cheatpaths []cp.Cheatpath) ([]map[string]sheet.Sheet, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse the cheatsheet file into a `sheet` struct
|
// parse the cheatsheet file into a `sheet` struct
|
||||||
s, err := sheet.New(title, path, cheatpath.Tags, cheatpath.ReadOnly)
|
s, err := sheet.New(
|
||||||
|
title,
|
||||||
|
cheatpath.Name,
|
||||||
|
path,
|
||||||
|
cheatpath.Tags,
|
||||||
|
cheatpath.ReadOnly,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"failed to load sheet: %s, path: %s, err: %v",
|
"failed to load sheet: %s, path: %s, err: %v",
|
||||||
|
|
Loading…
Reference in New Issue