1diff --git a/Makefile b/Makefile
2index eb08518ffbba68cbace6e59867f37074cb02adac..a04902b0aadb72c1913e793732b226f5bbe3c8d7 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -7,8 +7,7 @@ buid: ext
6 $(GO_BUILD) -o $(BIN) ./cmd/dict/main.go
7
8 run: ext
9- $(GO_RUN) ./cmd/dict/main.go
10-
11+ $(GO_RUN) ./cmd/dict/main.go ui
12
13 import: ext
14 $(GO_RUN) ./cmd/dict/main.go import
15diff --git a/cmd/ui/ui.go b/cmd/ui/ui.go
16index 82c0bc5fed899b86af453dc08e1d3b2909ac9501..b5f2f2fca941082410826eb92820fcb5b44172f8 100644
17--- a/cmd/ui/ui.go
18+++ b/cmd/ui/ui.go
19@@ -21,13 +21,13 @@ Name: "ui",
20 Usage: "interactive dictionary",
21 Flags: []cli.Flag{
22 &cli.StringFlag{
23- Name: "filename",
24+ Name: "database",
25 Value: "main.dict",
26 Usage: "Dictionary database location",
27 },
28 },
29 Action: func(cCtx *cli.Context) error {
30- name := cCtx.String("lang")
31+ name := cCtx.String("database")
32 return Run(context.Background(), name)
33 },
34 }
35@@ -87,8 +87,10 @@ return vs
36 })
37
38 input.SetDoneFunc(func(key tcell.Key) {
39- textView.Clear()
40- input.SetText("")
41+ if key == tcell.KeyEscape {
42+ textView.Clear()
43+ input.SetText("")
44+ }
45 })
46
47 grid := tview.NewGrid().
48diff --git a/db/db.go b/db/db.go
49index 746c30d2b2886716386f8794a339201479da9e24..b28dea2cb1aa9b02df7b1ab68295f21e6f36458e 100644
50--- a/db/db.go
51+++ b/db/db.go
52@@ -4,6 +4,7 @@ import (
53 "context"
54 "database/sql"
55 "fmt"
56+ "os"
57
58 "github.com/mattn/go-sqlite3"
59 )
60@@ -42,9 +43,8 @@ func (d *DB) Migrate(ctx context.Context) error {
61 _, err := d.db.ExecContext(
62 ctx,
63 `CREATE VIRTUAL TABLE IF NOT EXISTS words USING fts5 (word, line);
64- CREATE VIRTUAL TABLE IF NOT EXISTS words_terms USING fts4aux(words);
65- CREATE VIRTUAL TABLE IF NOT EXISTS spell USING spellfix1;
66- `,
67+ CREATE VIRTUAL TABLE IF NOT EXISTS words_vocab USING fts5vocab('words', 'row');
68+ CREATE VIRTUAL TABLE IF NOT EXISTS spell USING spellfix1;`,
69 )
70 return err
71 }
72@@ -100,7 +100,7 @@ }
73 words = append(words, w)
74 }
75
76- return words, err
77+ return words, nil
78
79 }
80
81@@ -119,8 +119,7 @@
82 func (d *DB) Consolidade(ctx context.Context) error {
83 _, err := d.db.ExecContext(
84 ctx,
85- `INSERT INTO spell(word,rank)
86- SELECT term, documents FROM words_terms WHERE col='*'`,
87+ `INSERT INTO spell(word) SELECT term FROM words_vocab`,
88 )
89 if err != nil {
90 return err
91@@ -139,6 +138,10 @@ return Copy(ctx, d.db, destDb)
92 }
93
94 func (d *DB) Restore(ctx context.Context, name string) error {
95+ if _, err := os.Stat(name); err != nil {
96+ return err
97+ }
98+
99 srcDb, err := sql.Open("sqlite3_with_extensions", name)
100 if err != nil {
101 return err