diff --git a/README.md b/README.md index a217345..a8aa305 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ eton show processes # edit items eton edit {1..3} 4 prcs -# alias matching is fuzzy +# alias matching is fuzzy for cat, show, edit, mark, unmark commands eton cat prcs # pass items to xargs as filenames: diff --git a/commands.go b/commands.go index 4d07d6f..eca92a2 100644 --- a/commands.go +++ b/commands.go @@ -35,7 +35,7 @@ func cmdShow(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, false) //fmt.Printf(attr.GetValue()) printToLess(attr.GetValue()) } @@ -53,7 +53,7 @@ func cmdCat(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, false) fmt.Printf(attr.GetValue()) } return true @@ -226,7 +226,7 @@ func cmdAddAttr(db *sql.DB, id int, attrs []string) bool { } func cmdUnalias(db *sql.DB, opts Options) bool { - attr := findAttributeByAlias(db, opts.Alias) + attr := findAttributeByAlias(db, opts.Alias, true) if attr.GetID() == -1 { log.Fatalf("alias \"%s\" not found", opts.Alias) } else { @@ -250,8 +250,8 @@ func cmdAlias(db *sql.DB, opts Options) bool { attr.SetAlias(db, opts.Alias2) } } else if len(opts.Alias1) > 0 && len(opts.Alias2) > 0 { - attr1 := findAttributeByAlias(db, opts.Alias1) - attr2 := findAttributeByAlias(db, opts.Alias2) + attr1 := findAttributeByAlias(db, opts.Alias1, true) + attr2 := findAttributeByAlias(db, opts.Alias2, true) if attr1.GetID() > 0 && attr2.GetID() <= 0 { attr1.SetAlias(db, opts.Alias2) @@ -277,7 +277,7 @@ func cmdEdit(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, false) totalUpdated += attr.Edit(db) } @@ -298,7 +298,7 @@ func cmdRm(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, true) totalUpdated += attr.Rm(db) } @@ -318,7 +318,7 @@ func cmdUnrm(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, true) totalUpdated += attr.Unrm(db) } @@ -342,7 +342,7 @@ func cmdMark(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, false) totalUpdated += attr.SetMark(db, 1) } @@ -358,7 +358,7 @@ func cmdUnmark(db *sql.DB, opts Options) bool { } for _, alias := range opts.Aliases { - attr := findAttributeByAlias(db, alias) + attr := findAttributeByAlias(db, alias, false) totalUpdated += attr.SetMark(db, 0) } diff --git a/main.go b/main.go index 1a31161..e6e528f 100644 --- a/main.go +++ b/main.go @@ -20,7 +20,7 @@ const dbfilename string = ".etondb" const usage string = `Usage: eton new [-|] [-v] - eton (ls|grep) [...] [-Rsl] [-o OFFSET] [-L LIMIT] [--after AFTER] + eton (ls|grep) [...] [-asl] [-o OFFSET] [-L LIMIT] [--after AFTER] eton edit [...] [-v] eton alias eton unalias @@ -41,7 +41,7 @@ Options: -l, --list-files list items as filenames -s, --short short mode lists rows with aliases only -v, --verbose talk a lot - -R, --removed-only only list removed notes + -a, --all include removed items as well ` func main() { diff --git a/models.attr.go b/models.attr.go index 08221af..cf1921f 100644 --- a/models.attr.go +++ b/models.attr.go @@ -335,9 +335,9 @@ func (attr Attr) SetAlias(db *sql.DB, alias string) { //check(err) if err == nil { if unset { - fmt.Printf("alias NULL set for ID:%d\n", attr.GetID()) + fmt.Printf("ID:%d unaliased\n", attr.GetID()) } else { - fmt.Printf("alias \"%s\" set for ID:%d\n", alias, attr.GetID()) + fmt.Printf("alias set: %s => %s\n", attr.GetIdentifier(), alias) } } else { log.Fatalf("error while setting alias \"%s\" for ID:%d -- alias must be unique\n", alias, attr.GetID()) // , err) @@ -511,7 +511,7 @@ func findAttributeByID(db *sql.DB, ID int64) (attr Attr) { return } -func findAttributeByAlias(db *sql.DB, alias string) (attr Attr) { +func findAttributeByAlias(db *sql.DB, alias string, exactMatchOnly bool) (attr Attr) { var err error var stmt *sql.Stmt @@ -529,6 +529,10 @@ func findAttributeByAlias(db *sql.DB, alias string) (attr Attr) { return } + if exactMatchOnly { + return + } + stmt, err = db.Prepare("SELECT " + sqlSelect + " FROM attributes WHERE alias LIKE ? ORDER BY " + orderby + " LIMIT 1") check(err) @@ -556,7 +560,7 @@ func findAttributeByAlias(db *sql.DB, alias string) (attr Attr) { } func findAttributeByAliasOrID(db *sql.DB, alias_or_id string) (attr Attr) { - attr = findAttributeByAlias(db, alias_or_id) + attr = findAttributeByAlias(db, alias_or_id, false) if attr.GetID() <= 0 { intID, err := strconv.Atoi(alias_or_id) @@ -574,15 +578,15 @@ func findAttributeByAliasOrID(db *sql.DB, alias_or_id string) (attr Attr) { func listWithFilters(db *sql.DB, opts Options) (attrs []Attr) { var stmt *sql.Stmt var rows *sql.Rows - var nolimit = opts.Limit == -1 + var nolimit = opts.Limit == -1 || opts.IncludeRemoved var sqlConditions string var sqlLimit string queryValues := make([]interface{}, 0, 5) - if opts.RemovedOnly { - sqlConditions = "deleted_at IS NOT NULL" + if opts.IncludeRemoved { + sqlConditions = "1" } else { sqlConditions = "deleted_at IS NULL" } diff --git a/options.go b/options.go index dae044d..97fef8b 100644 --- a/options.go +++ b/options.go @@ -23,7 +23,7 @@ type Options struct { Filters []string FromStdin bool Recursive bool - RemovedOnly bool + IncludeRemoved bool ShortMode bool Verbose bool ListFilepaths bool @@ -109,7 +109,7 @@ func OptionsFromArgs(args map[string]interface{}) (opts Options) { opts.Filters = args[""].([]string) opts.FromStdin = args["-"].(bool) opts.Recursive = false // args["--recursive"].(bool) - opts.RemovedOnly = args["--removed-only"].(bool) + opts.IncludeRemoved = args["--all"].(bool) opts.ShortMode = args["--short"].(bool) opts.Verbose = args["--verbose"].(bool)